如果我有任何m x n
白色区域的逻辑图像,如下所示:
如何获得白色和黑色区域之间边界线的索引?
这简单地归结为检测给定图像的边缘。edge
MATLAB 在命令中已经有一个内置的实现。I
这是使用 Canny 过滤器检测图像边界的示例:
A = edge(I, 'canny');
结果图像中的非零元素A
就是您所追求的。然后,您可以使用find
来获取它们的索引。
由于您的输入是清晰的二进制图像,因此无需edge
按照@EitanT 的建议使用。
使用形态学运算获得周长imdilate
,imerode
并且regionprops
:
% let input image be bw
we = bw & ~imerode( bw, strel('disk', 1) ); % get a binary image with only the boundary pixels set
st = regionprops(we, 'PixelIdxList'); % get the linear indices of the boundary
% get a binary image with pixels on the outer side of the shape set
be = ~bw & imdilate( bw, strel('disk', 1) );
st = regionprops(be, 'PixelList'); % get the row-col indices of the boundary