Общее название для такой задачи - написание. Если вы ищете это, вы найдете лучшие методы, чем то, что я показываю здесь. Это не более чем подтверждение концепции. Я использую DIPimage 3 (потому что я автор, и мне легко пользоваться).
Сначала нам нужно создать маску для областей, которые мы хотим удалить (inpaint). Легко найти пиксели, в которых все три канала имеют высокое значение (белый) или низкое значение (черный):
img = readim('https://i.stack.imgur.com/16r9N.png');
% Find a mask for the areas to remove
whitemask = min(img,'tensor') > 50;
blackmask = max(img,'tensor') < 30;
mask = whitemask | blackmask;
Эта маска не охватывает всю черную сетку, если мы увеличим порог, мы также удалим темную область моря у побережья Испании. И это также отражает белый контур побережья. Мы можем сделать это немного лучше с помощью дополнительной фильтрации:
% Find a mask for the areas to remove
whitemask = min(img,'tensor') > 50;
whitemask = whitemask - pathopening(whitemask,50);
blackmask = max(img,'tensor');
blackmask2 = blackmask < 80;
blackmask2 = blackmask2 - areaopening(blackmask2,6);
blackmask = blackmask < 30 | blackmask2;
mask = whitemask | blackmask;
Создает следующую маску:
![mask](https://i.stack.imgur.com/juY0R.png)
Все еще далеко от совершенства, но хорошее начало для нашего доказательства концепции.
В одном простом методе рисования используется нормализованная свертка: используя инверсию созданной нами маски, сворачиваем изображение, умноженное на маску, и сворачиваем маску отдельно. Соотношение этих двух результатов представляет собой сглаженное изображение, которое не учитывает маскированные пиксели. Наконец, мы заменяем пиксели в исходном изображении под маской значениями из этой нормализованной свертки:
% Solution 1: normalized convolution
smooth = gaussf(img * ~mask, 2) / gaussf(~mask, 2);
img(mask) = smooth(mask);
![output for solution 1](https://i.stack.imgur.com/UiKxo.png)
Альтернативное решение применяет закрытие к изображению, умноженному на маску (обратите внимание, что это умножение делает пиксели, которые мы не хотим, полностью черными; закрытие распространит окружающие цвета по черным областям):
% Solution 2: morphology
smooth = iterate('closing',img * ~mask, 13);
img(mask) = smooth(mask);
![output for solution 2](https://i.stack.imgur.com/7XTyn.png)