如何从彩色图像中 remove/reassign 小像素区域(在边缘)? (MATLAB)

How can I remove/reassign small pixelregions (at edges) from color images? (MATLAB)

我有带索引颜色的分割蒙版。不幸的是,物体边缘存在(有色)噪声。在从一个颜色区域到下一个颜色区域的过渡处,存在不同颜色的小像素区域,将两个颜色区域分开(由转换边缘的透明像素引起)。

我想通过为相邻的大区域之一指定一种颜色来消除这种噪声(使用 MATLAB)。没关系,哪一个 - 主要是去除小区域。 可以假设任何颜色的小区域都可以通过这种方式移除(重新分配给相邻的大区域)。

如果是二进制图像,我可以使用 bwareaopen(在本问答中建议:Remove small chunks of labels in an image)。将图像转换为每种颜色的二值图像可能是一种解决方法,但这代价高昂(对于许多颜色)并且使重新分配的问题悬而未决。我希望有更优雅的方法来做到这一点。

检查以下内容:

  • 将 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);

黑边有点问题