Как удалить / переназначить небольшие области пикселей (по краям) из цветных изображений? (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);
Черная рамка немного проблематична.