史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

定义和填充孔图像的边界

博客阅读器亚历克斯问了一个问题本周填补这个二进制图像。

url =“https://blogs.mathworks.com/images/steve/2013/eye-heart-matlab.png”;bw = imread (url);imshow (bw)

亚历克斯尝试imfill但它并没有给他,他正在寻找什么。

bw2 = imfill (bw,“黑洞”);imshow (bw2)标题(灌装孔(第一次))

亚历克斯问他如何能填补对象接触边界。在这一点上,MathWorker肖恩·德Wolski并指出了问题不是定义良好;有多种解释,可能的解决方案。金宝搏官方网站

从亚历克斯的形象也许不是显而易见的,这种情况下,让我用一个不同的例子来加以说明。这张图片有一个对象,它触及到边境,将背景划分为两个区域。拓扑,这个对象是一样的在亚历克斯五“空缺”对象的形象。

bw_eye = imdilate(眼(200),(5));imshow (bw_eye)

imfill不做任何事这张照片:

imshow (imfill (bw_eye,“黑洞”)标题(“imfill输出”)

是什么意思“填补”这个对象?你会期望右上部分的背景,或右下角的吗?这是点肖恩正。

我盯着亚历克斯的形象,试图想出一个公式定义的问题,会更好,会做亚历克斯预计。

我想我已经找到了一个合理的配方。然而,并不是只有一个,我这想法其他读者对什么感兴趣。

这是我的想法:填充对象与两个相邻的边界。通过“反边界填充”,我的意思是垫与白色像素边界,做填充,然后删除填充。

让我们回到亚历克斯的形象和“填补”左边和顶部边界。下面的调用padarray添加一个列左边的白色像素和一排白色像素上。

bw_a = padarray (bw, [1], 1,“以前”);bw_a_filled = imfill (bw_a,“黑洞”);bw_a_filled = bw_a_filled(2:结束,2:结束);imshow (bw_a_filled)

现在填对顶部和边界。

bw_b = padarray (padarray (bw [1 0], 1,“以前”),[0,1],1,“职位”);bw_b_filled = imfill (bw_b,“黑洞”);bw_b_filled = bw_b_filled(2:结束,1:end-1);imshow (bw_b_filled);

接下来,填补右边和底部边界。

bw_c = padarray (bw, [1], 1,“职位”);bw_c_filled = imfill (bw_c,“黑洞”);bw_c_filled = bw_c_filled (1: end-1, 1: end-1);imshow (bw_c_filled)

最后,对底部填充和边界。(我不认为这有什么影响这个特殊的形象。)

bw_d = padarray (padarray (bw [1 0], 1,“职位”),[0,1],1,“以前”);bw_d_filled = imfill (bw_d,“黑洞”);bw_d_filled = bw_d_filled (1: end-1, 2:结束);imshow (bw_d_filled)

最后一步是那么“逻辑或”所有这些图像。

bw_filled = bw_a_filled | bw_b_filled | bw_c_filled | bw_d_filled;imshow (bw_filled)标题(“最后的填充结果”)

关于这个问题的读者,请把你的想法。它不会令我惊讶的是,其他有用的思考方式和其他实现方法。

亚历克斯,我希望你发现这很有用。




发表与MATLAB®R2013a

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。