【问题标题】:Fill NaNs in a non-square region在非正方形区域中填充 NaN
【发布时间】:2014-09-17 09:06:52
【问题描述】:

我正在处理一些不是正方形的重建图像,我需要将它们与我的“理想图像”进行比较。问题是,由于重建图像是用不同的方法获得的,图像的“形状”不是恒定的,我需要以某种方式填充这些 NaN。

好吧,因为它不是那么容易解释,让我们用一个例子来说明:

Orig_image=[ NaN NaN 1 NaN NaN
             NaN 4   2 6   NaN
             6   3   2 2   2
             NaN 3   4 1   NaN
             NaN NaN 5 NaN NaN];

Rec_image=[ NaN NaN  1 NaN NaN
            NaN NaN  2  3  NaN
            6    3   2  2    2
            NaN  3   2  1   NaN
            NaN  NaN 5 NaN NaN];

isnan(Orig_image)~=isnan(Rec_image)

ans=[ 0 0 0 0 0
      0 1 0 0 0
      0 0 0 0 0
      0 0 0 0 0
      0 0 0 0 0]

可以看到Rec_image中元素(2,2)是NaN。 我想用它的邻居的插值填充那个 NaN,但不知道如何解决这个问题。

附加信息: 我的图像通常为 100x100,不匹配的 nan 数量约为 20。但是,特定区域中不匹配的 NaN 可能“更大”(即 4x4 正方形),因此存在没有任何数字邻居的 NaN .

【问题讨论】:

  • 你已经看过了吗? stackoverflow.com/a/3632014/1136458 即使问题是关于一维数组,一些答案也考虑二维情况
  • @lib 让我检查一下...
  • @lib 它就像魅力一样。将其发布为答案(我之前确实看过该帖子,但我认为它不起作用)。另外,对我有用的答案不是另一篇文章中的“接受的答案”。
  • 好吧,我从来没有尝试过这种方法:)

标签: matlab nan


【解决方案1】:

可能最简单的方法是使用比您的 NaN 块更大的过滤器内核。如果您以通常的顺序应用过滤器(简单地迭代图像的尺寸),您可能无法获得最佳结果。

从创建/应用任意大小的平均过滤器的讨论开始: Mean filter for smoothing images in Matlab

然后我会根据每个有多少非 NaN 邻居对不匹配的 NaN 进行排序。将过滤器应用于每个点,从具有最少 NaN 相邻点的那些开始,到具有最多的那些结束。

当然,您可能需要除均值过滤器以外的其他东西。使用适合您的数据的过滤器内核(例如,可以很好地插值的东西)。

【讨论】:

  • 谢谢!即使您的答案非常好,我也使用建议的帖子的 inpaint_nans 函数解决了它。
  • @AnderBiguri 请发布您的解决方案
  • @Dan 我正在等待@lib 做这件事,因为他向我提出了解决方案,他应该得到信任。
【解决方案2】:

正如MATLAB: Using interpolation to replace missing values (NaN) 中所建议的,在matlabcentral 上有一个名为inpaint_nans 的工具,它通过插值替换一维或二维矩阵中的nan 元素

【讨论】:

  • 还有外推!这就是对我有用的部分;)
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多