我正在处理一些非方形的重建图像,我需要将它们与我的“理想图像”进行比较。事实是,由于重建图像是用不同的方法获得的,图像的“形状”不是恒定的,我需要以某种方式填充那些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没有任何数字邻居
答案 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维矩阵中的纳米元素