Как удалить / переназначить небольшие области пикселей (по краям) из цветных изображений? (MATLAB)

У меня есть маски сегментации с индексированными цветами. К сожалению, есть (цветной) шум по краям объектов. При переходе от одной цветовой области к другой появляются небольшие пиксельные области разных цветов, разделяющие две цветовые области (вызванные преобразованием прозрачных пикселей по краям).

Смотрите изображение: Сегментация с шумом

Я хочу удалить этот шум (с помощью MATLAB), назначив цвет одной из соседних больших областей. Неважно, что главное - убрать небольшие участки. Можно предположить, что таким образом можно удалить небольшие области ЛЮБОГО цвета (переназначить соседние большие области).

В случае двоичного изображения, я мог бы использовать bwareaopen (предлагается в этом разделе "Вопросы и ответы: удалить небольшие фрагменты меток на изображении"). Преобразование изображения в двоичное изображение для каждого цвета может быть обходным путем, однако это является дорогостоящим (для многих цветов) и оставляет вопрос о переназначении открытым. Я надеюсь, что есть более элегантные способы сделать это.

1 ответ

Решение

Проверьте следующее:

  • Конвертировать RGB в индексированное изображение.
  • Применить медианный фильтр на индексированной карте.
  • Конвертировать обратно в RGB

RGB = imread('GylzKm.png');

%Convert RGB to indexed image with 4 levels
[X, map] = rgb2ind(RGB, 4);

%Apply median filter on 4 levels images
X = medfilt2(X, [5, 5]);

%Convert indexed image back to RGB.
J = ind2rgb(X, map);

figure;imshow(J);

Черная рамка немного проблематична.

Другие вопросы по тегам