2016-08-05 98 views
0

我有这个问题:我有这个二维二值图像,我想提取该图像中对象的轮廓。 这是图像: enter image description here在matlab中查找图像中2D对象的轮廓

我想有相同的矩阵图像但那些只能在对象和零其他地方的轮廓。 有没有解决方案? 如果是这样,是否有任何实现也为3D对象做同样的事情?

非常感谢您

回答

1

如果您有图像处理工具箱,你可以使用bwperim

BW = imread('http://i.stack.imgur.com/05T06.png'); 
BW = BW(:,:,1) == 255; 

boundary = bwperim(BW); 

imshow(boundary) 

enter image description here

归根结底这是什么呢,是进行原始图像上卷积蚕食然后计算受侵蚀版本和原始版本之间的差异。所以如果你没有工具箱,你可以用conv2(或3D中的convn)做到这一点。

eroded = ~conv2(double(~BW), ones(3), 'same'); 
boundary = BW - eroded; 

或者在3D:

eroded = ~convn(double(~BW_3D), ones(3,3,3), 'same'); 
boundary = BW_3D - eroded; 
+0

非常感谢你,它的工作原理完全与bwperim功能! – David