小编典典

使用numpy和scipy填充图像上的间隙

python

图像(test.tif)已附加。np.nan值是最白的区域。如何使用一些使用邻居的值的填充算法来填充最白的区域?

在此处输入图片说明

import scipy.ndimage

data = ndimage.imread('test.tif')

阅读 220

收藏
2021-01-20

共1个答案

小编典典

我觉得 维也纳的 问题是更相关的修补问题。

这里有一些想法:

  • 为了填补黑白图像中的空白,您可以使用一些 填充 算法,例如scipy.ndimage.morphology.binary_fill_holes。但是您有灰度图像,因此无法使用。

  • 我想您不想使用复杂的修复算法。我的第一个建议是:不要尝试使用最近的灰度值(您不知道NaN像素的实际值)。使用NEarest值将生成脏算法。相反,我建议您 用其他一些值 (例如,行的平均值) 填补空白 。您可以通过使用scikit-learn而无需编写代码:

资源:

>>> from sklearn.preprocessing import Imputer
>>> imp = Imputer(strategy="mean")
>>> a = np.random.random((5,5))
>>> a[(1,4,0,3),(2,4,2,0)] = np.nan
>>> a
array([[ 0.77473361,  0.62987193,         nan,  0.11367791,  0.17633671],
   [ 0.68555944,  0.54680378,         nan,  0.64186838,  0.15563309],
   [ 0.37784422,  0.59678177,  0.08103329,  0.60760487,  0.65288022],
   [        nan,  0.54097945,  0.30680838,  0.82303869,  0.22784574],
   [ 0.21223024,  0.06426663,  0.34254093,  0.22115931,         nan]])
>>> a = imp.fit_transform(a)
>>> a
array([[ 0.77473361,  0.62987193,  0.24346087,  0.11367791,  0.17633671],
   [ 0.68555944,  0.54680378,  0.24346087,  0.64186838,  0.15563309],
   [ 0.37784422,  0.59678177,  0.08103329,  0.60760487,  0.65288022],
   [ 0.51259188,  0.54097945,  0.30680838,  0.82303869,  0.22784574],
   [ 0.21223024,  0.06426663,  0.34254093,  0.22115931,  0.30317394]])
  • 使用最近值的 肮脏解决方案 可以是:1)找到NaN区域的周边点2)计算NaN点和周边之间的 所有 距离3)用最近的点灰度值替换NaN
2021-01-20