我有一个二进制图像。我在图像中有几个单个像素。单个像素是白色 (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 中通过形态学运算去除单个像素?
我有一个二进制图像。我在图像中有几个单个像素。单个像素是白色 (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 中通过形态学运算去除单个像素?
与您之前的问题一样,您可以使用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
我给你另一个没有循环的选择,使用 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