在MATLAB中使用大小为n x n的邻域对灰度图像进行形态学膨胀



展开过程是通过将结构化元素B放置在图像A上并以类似于卷积的方式在图像上滑动来执行的

我理解灰度图像的数学形态学膨胀背后的主要概念,但我仍然有一个问题:

用户是否可以不选择结构元素的值?换句话说,我们是否可以通过选择结构元素的大小和形状而不指定其元素来对图像进行膨胀处理?

为了更精确,我将通过一个例子很好地解释我的问题:假设大小为160 x 160的灰度图像I将被处理(在这种情况下被放大)大小为8 x 8的邻域。我没有指定这个邻域的元素,所以它们的元素来自图像本身。例如,我写了下面的matlab代码:

Max_image = max_filter(I, [0 0 7 7]);

其中函数max_filter为:

[n m] = size(I); % n=160 and m=160
B = I; 
for i = 1:m-7,
B(:,i) = max(I(:,i:i+7),[],2);
end
for i=m-7+1:m
B(:,i) = max(I(:,i:min(end,i+7),[],2);
end
for i = 1:n-7,
I(i,:) = max(B(max(1,i):min(end,i+7),:),[],1);
end
for i = n-7+1:n,
I(i,:) = max(B(i:min(end,i+7),:),[],1);
end

这仍然被认为是一种形态学扩张手术吗?回想一下,我使用了一个大小为8 x 8的结构元素。

您的程序相当于ones(8)结构元素的全图像扩展(顺便说一句,您没有使用输入参数[0 0 7 7],实际上您不需要它):

I = [92    99     1     8    15    67    74    51    58    40
98    80     7    14    16    73    55    57    64    41
4    81    88    20    22    54    56    63    70    47
85    87    19    21     3    60    62    69    71    28
86    93    25     2     9    61    68    75    52    34
17    24    76    83    90    42    49    26    33    65
23     5    82    89    91    48    30    32    39    66
79     6    13    95    97    29    31    38    45    72
10    12    94    96    78    35    37    44    46    53
11    18   100    77    84    36    43    50    27    59];

Max_image = max_filter(I, [0 0 7 7])会给你:

99    99    97    97    97    75    75    75    72    72
98    97    97    97    97    75    75    75    72    72
100   100   100    97    97    75    75    75    72    72
100   100   100    97    97    75    75    75    72    72
100   100   100    97    97    75    75    75    72    72
100   100   100    97    97    72    72    72    72    72
100   100   100    97    97    72    72    72    72    72
100   100   100    97    97    72    72    72    72    72
100   100   100    96    84    59    59    59    59    59
100   100   100    84    84    59    59    59    59    59

使用时:

J1=imdilate(I,ones(8),'full');
J1(8:end,8:end)

它会给你完全相同的答案。

这就是为什么我昨天告诉你,它经常使用二进制图像掩码作为结构元素。您不需要选择遮罩内部的值,但需要选择大小(8*8)和形状。什么是形状?在二进制图像中,用1填充的元素决定了形状。在您的代码中,您选择了8*8区域内的最大值,这相当于使用整个明亮的8*8方形遮罩进行图像扩展。

最新更新