1

我有一个二进制图像。我在图像中有几个单个像素。单个像素是白色 (1),它们的所有邻域都是黑色 (0)。例如,下图显示了一个像素(中心)和两个像素(左下角):

0 0 0 0 0 0
0 0 0 0
0 0 1 0 0
0 0 0 0 0
1 1 0 0 0

如何在 Matlab 中通过形态学运算去除单个像素?

4

2 回答 2

1

与您之前的问题一样,您可以使用bwboundaries

如果P是二值图像,则比:

B = bwboundaries(P,8);
for k = 1:numel(B)
    if size(B{k})<=2
        P(B{k}(1,1),B{k}(1,2)) = 0;
    end
end

所以对于上面的例子P变成:

P =

     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     1     1     0     0     0
于 2017-02-13T07:31:17.597 回答
1

我给你另一个没有循环的选择,使用 2D 卷积conv2

M = [0     0     0     0     0
     0     0     1     0     0
     0     0     0     0     0
     0     0     0     0     0
     1     1     0     0     0]

C = [0 1 0
     1 1 1
     0 1 0]; % The matrice that is going to check if a `1` is alone or not.

%if you also want to consider the neibhbors on the diagonal choose:
%C = ones(3);

R = M.*conv2(M,C,'same')>1 %Check for the neighbors. 

结果

R =

   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
   1   1   0   0   0
于 2017-02-13T08:48:42.203 回答