在matlab中查找图像中二维对象的轮廓
Find contour of 2D object in image in matlab
我有这个问题:我有这个二维二值图像,我想提取这个图像中物体的轮廓。
这是图像:
我想要相同的矩阵图像,但只在对象的轮廓中使用矩阵图像,在其他地方使用零。
有解决办法吗?
如果是这样,是否有任何实现也可以对 3D 对象做同样的事情?
非常感谢
如果您有图像处理工具箱,您可以使用 bwperim
BW = imread('http://i.stack.imgur.com/05T06.png');
BW = BW(:,:,1) == 255;
boundary = bwperim(BW);
imshow(boundary)
最终,它所做的是对原始图像执行卷积以腐蚀它,然后计算腐蚀版本与原始版本之间的差异。因此,如果您没有工具箱,可以使用 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;
我有这个问题:我有这个二维二值图像,我想提取这个图像中物体的轮廓。
这是图像:
我想要相同的矩阵图像,但只在对象的轮廓中使用矩阵图像,在其他地方使用零。 有解决办法吗? 如果是这样,是否有任何实现也可以对 3D 对象做同样的事情?
非常感谢
如果您有图像处理工具箱,您可以使用 bwperim
BW = imread('http://i.stack.imgur.com/05T06.png');
BW = BW(:,:,1) == 255;
boundary = bwperim(BW);
imshow(boundary)
最终,它所做的是对原始图像执行卷积以腐蚀它,然后计算腐蚀版本与原始版本之间的差异。因此,如果您没有工具箱,可以使用 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;