0 думаю, viena's вопрос больше связан с проблемой inpainting.
Вот некоторые идеи:
Для того, чтобы заполнить пробелы в B/W изображения, которые вы можете использовать некоторые заполнения алгоритм как scipy.ndimage.morphology.binary_fill_holes. Но у вас есть изображение на уровне серого, поэтому вы не можете его использовать.
Я полагаю, что вы не хотите использовать комплексный алгоритм inpainting. Мое первое предложение: не пытайтесь использовать значение Nearest grey (вы не знаете реального значения NaN-пикселей). Использование значения NEarest создаст грязный алгоритм. Вместо этого я предлагаю вам заполнить пробелы некоторым другим значением (например, среднее из строки). Вы можете сделать это без кодирования с использованием scikit-learn:
Source:
>>> 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 на th e ближайшая точка значение серого
Посмотрите на библиотеку scipy interolate, чтобы найти функцию, соответствующую вашим потребностям. http://docs.scipy.org/doc/scipy/reference/interpolate.html – M4rtini