【问题标题】:Image Morphing in MatlabMatlab中的图像变形
【发布时间】:2013-01-22 12:23:19
【问题描述】:

我想在 MATLAB 中使用数学形态学函数来找到 can.png 图像的边界。输入图像为:

我想得到一个边界,例如:

我尝试使用strel、imerode、imdilate使用不同的组合和参数,但结果不够好(与预期相去甚远)

我的试用代码之一是:

a = imread ('can.png');
b = im2bw(a);

SE = strel('rectangle', [10 50 ]) ;
i2 = imdilate(b,SE);

figure(1); imshow(i2);

p = ones(4);
c = b - imerode(b,p);

figure(2); imshow(c);

输出是:

任何人都可以帮助我,如何创建预期的图像(罐子的黑色背景和细边框?非常感谢。

【问题讨论】:

  • 这张图片是怎么变形的?更改问题的标题以更好地反映您的目标。

标签: matlab image-processing edge-detection


【解决方案1】:

对其形态梯度进行二值化,然后使用基本 SE 进行膨胀,填充孔洞并最终获得其边界(对于当前图像来说很简单)。这不需要任何神奇的任意阈值。

【讨论】:

  • “在其形态梯度上二值化”是什么意思?在 SE(使用 strel)中,我们还需要确定我们使用哪种结构,以及它的大小。
  • @user1917485 形态梯度通常在膨胀-腐蚀上定义,基本正方形。要对其进行二值化,我的意思是简单地对结果运行 otsu 以获得二值化阈值:im2bw(mgrad, graythresh(mgrad))。这里,如果你真的需要 Matlab 语法,SE 总是等于strel(square, 3)
  • 谢谢。我是一个新手,我试图实现这个: mgrad=imread ('can.png');我 = im2bw(mgrad, graythresh(mgrad)); se = strel('square',3); c = imdilate(I, se) - imerode(I, se); Imf = imfill(c, 'holes');图(3),imshow(IMF);但是罐子里装满了白色像素
  • img = imread('can.png'); mgrad = imdilate(img, se) - imerode(img, se); 现在你对形态梯度进行二值化。如果罐子被白色像素填充,那很好,剩下的唯一一步就是提到的微不足道的一步。它也使用形态学,你想在我给它之前考虑一下吗?
  • 通过重复上一行,我得到了很好的结果,对吧?
【解决方案2】:
im = imread('can.png');

% turn image to BW
imb = (im < 220);

% fill the holes in the image
imf = imfill(imb, 'holes');

% find the edge
ed = edge(imf);

生成的图像:

【讨论】:

  • 感谢您的代码。结果是完美的。但是,我想通过使用 strel、imerode 和 imdilate 来学习 MATLAB 中的数学形态学函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2017-09-15
相关资源
最近更新 更多