【问题标题】:Matlab: Dilation operator does not return the desired outputMatlab:膨胀运算符不返回所需的输出
【发布时间】:2019-07-19 08:52:52
【问题描述】:

假设我们想在 Matlab 中使用形态膨胀算子放大二值图像中的黑色区域。所需的输出必须如下所示,但给定的代码会生成不同的图像!

bin = ones(10,10, 'uint8');
bin(3:8, 3:8) = 0;
bin([4 7], [4 7]) = 1;
nhood = [1 0 1; 
         0 0 0; 
         1 0 1];
dil = imdilate(bin, strel(nhood))
figure; 
subplot(1,2,1)
imshow(255*bin, 'InitialMagnification', 'fit')
subplot(1,2,2)
imshow(255*dil, 'InitialMagnification', 'fit')

结构元素和原始图像如下所示:

【问题讨论】:

  • 如果你想放大黑色区域然后腐蚀图像或先反转图像然后应用膨胀然后再次反转
  • 你扩大了白色区域,因此白色区域变大了。扩张黑色区域与扩张、侵蚀相反。
  • 请您看一下来自 edx DEV290x 课程的视频:edx-video.net/MicrosoftDEV290x-V001100_DTH.mp4@user8190410
  • 不,我没有做课程来帮助你抱歉

标签: matlab image-processing image-morphology


【解决方案1】:

在这种情况下,您的结构元素是反转的,即 [255, 0, 255;0, 0, 0; 255, 0, 255] 将在您将黑色区域设置为前景时使用。

要获得视频中显示的结果,您必须使用 [0, 1, 0;1, 1, 1; 0, 1, 0] 作为结构元素。

注意:在形态学操作中,通常以白色区域为前景,并使用结构元素来修改前景。但是在这个video 中,他使用黑色区域作为前景

bin = ones(10,10, 'uint8');
bin(3:8, 3:8) = 0;
bin([4 7], [4 7]) = 1;
nhood = [0 1 0; 
         1 1 1; 
         0 1 0];
erode = imerode(bin, strel(nhood));
dilate = imdilate(erode, strel(nhood));
figure; 
subplot(2,2,1)
imshow(255*bin, 'InitialMagnification', 'fit')
subplot(2,2,2)
imshow(255*erode, 'InitialMagnification', 'fit')
title('after erosion')
subplot(2,2,3)
imshow(255*dilate, 'InitialMagnification', 'fit')
title('after dilation')

【讨论】:

  • 感谢 beaucoup 澄清事情。 @user8190410
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 2012-09-18
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多