定义和填充孔图像的边界
博客阅读器亚历克斯问了一个问题本周填补这个二进制图像。
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)标题(“最后的填充结果”)
关于这个问题的读者,请把你的想法。它不会令我惊讶的是,其他有用的思考方式和其他实现方法。
亚历克斯,我希望你发现这很有用。
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。