【问题标题】:Downsize a matrix in which some entries are unknown缩小其中某些条目未知的矩阵
【发布时间】:2012-09-27 18:02:10
【问题描述】:

我有一个 2D 网格 (G= 250x250),其中只有大约 100 个点是已知的,其余的是未知的 (NaN)。我想调整这个矩阵的大小。我的问题是imresize 不能在 MATLAB 中为我执行此操作,因为它会删除我的已知值并只给出一个 NaN 矩阵。

有人知道可以为我做的方法吗?一个建议是使用插值方法(例如通过使用反距离加权),但我不确定它是否有效,甚至有没有更好的方法?

    G = NaN(250,250);
    a = ceil(rand(1,50)*250*250);
    b = ceil(rand(1,50)*250*250);
    G (a) = 1; G (b) = 0;

【问题讨论】:

  • imresize 返回NaNs,因为您的原始矩阵有NaNs。我认为您应该用零替换NaNs,调用imresize,然后可以选择将零恢复为NaNs。另外,您所说的“调整矩阵大小”是什么意思——您是要在不更改矩阵中现有值的情况下进行插值还是只添加元素?
  • @Eitan:我只想调整矩阵的大小并将这 100 个数据分配给粗网格上最合适的节点。我想如果我使用插值,一切都会改变!因此,我正在寻找在不更改值的情况下调整矩阵大小。另外,我不能用 0 或 1 替换 NaN 值,因为它会与我当前已知的数据混合在一起,我会失去准确性
  • imresize 不会调整矩阵大小,而是缩放图像。这涉及插值,因此使用 NaN 不会很好地工作..
  • @Angainor:这就是为什么我说一种解决方案可能使用插值,但我不知道如何!
  • @Sam 我没有关注你。假设你有A = [1 2; 3 NaN];。您只想用零“填充”矩阵,以获得例如 10x10 矩阵(包含原始四个元素和其余零),或者对其进行插值以获得新的 10x10 矩阵?

标签: image matlab image-processing signal-processing


【解决方案1】:

这个怎么样:

% find the non-NaN entries in G
idx = ~isnan(G);

% find their corresponding row/column indices
[i,j] = find(idx);

% resize your matrix as desired, i.e. scale the row/column indices
i = ceil(i*100/250);
j = ceil(j*100/250);

% write the old non-NaN entries to Gnew using accumarray
% you have to set the correct size of Gnew explicitly
% maximum value is chosen if many entries share the same scaled i/j indices
% NaNs are used as the fill
Gnew = accumarray([i, j], G(idx), [100 100], @max, NaN);

如果 max 不适合您,您还可以为 accumarray 选择不同的累积函数。如果它不是您需要的,您可以将填充值从 NaN 更改为其他值。

【讨论】:

  • 非常感谢。它工作:),但它是如何工作的?你能给我简单的解释吗?或网页阅读。
  • @Sam 我注释了代码。我只是重新调整非 nan 条目的行和列的索引,并通过将值分配给新的行/列索引来创建新矩阵。非常基本的东西,没有插值。阅读 accumarray 的帮助以了解它的具体作用。
  • @Angainor:我觉得有问题:(。我的意思是,想象一下你正在近距离看一张图片(细网格),在这种情况下你会看到细节,但是当你走远了,分辨率会改变,因此值也会相应改变。我的意思是,在较粗的网格中,这些值(非 NaN 像素)与较细的值不同。在这种情况下,可能需要插值更粗的中心像素,是吗?
  • @Sam 这真的取决于你想做什么:) 我的代码只做上面描述的事情。是否可以使用它完全取决于您。我不知道从远处看,我知道如何在 matlab 中编写您要求的内容。决定如何处理粗化值,并在 accumarray 中设置适当的函数而不是 max。或者,如果您想做的是插值,请进行插值。试一试,看看有什么效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多