在非方形区域填充NaN

时间:2014-07-25 13:31:30

标签: matlab nan

我正在处理一些非方形的重建图像,我需要将它们与我的“理想图像”进行比较。事实是,由于重建图像是用不同的方法获得的,图像的“形状”不是恒定的,我需要以某种方式填充那些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]

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

其他信息:  我的图像一般是100x100,不匹配的数量是20左右。然而,特定区域中不匹配的NaN可能是“更大”(即4x4平方),因此有些NaN没有任何数字邻居

2 个答案:

答案 0 :(得分:2)

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

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

然后我会根据每个非NaN邻居的数量来排序不匹配的NaN。将过滤器应用于每个点,从具有最少NaN邻居点并以具有最多NaN邻居点的那些点开始。

当然,您可能需要除了均值滤波器之外的其他内容。使用适合您数据的过滤器内核(例如插补良好的内容)。

答案 1 :(得分:2)

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