在Matlab中查找轮廓的坐标

Ale*_*Mel 0 matlab image-processing curve-fitting contour

我想这不是困难但我想知道是否有任何功能或任何最佳方式.

考虑到在图像处理之后我有一个矩阵图像,其中0到处都是1,在轮廓处有1.

现在我想沿着该轮廓线找到xy
重要的是例如 [x(2)y(2)] 应该是[x(1)y(1)]的下一个像素

我用过这个:

[CH] =轮廓(图像,1)

x = c(1,:) y = c(2,:)

但结果不是很好,它给出了一些非常糟糕的噪点(并且出于某种原因它看起来是镜像的)

ray*_*ica 5

如果你有图像处理工具箱,我强烈建议使用bwperim它返回一个logical图像,其中true是一个周长或轮廓点,false否则....更不用说它更快.

尝试做:

bw = bwperim(image == 1); % image == 1 to ensure binary
[y, x] = find(bw);
Run Code Online (Sandbox Code Playgroud)

第一行代码找到一个只包含轮廓点的图像,然后我们可以find在结果上使用它来查找行和列位置.这里y表示行并x表示列位置.

如果您希望订购轮廓,请改用该bwtraceboundary功能.但是,这将要求您在运行函数之前指定初始轮廓点.

一种简单的方法是沿着对象的轮廓找到任何非零点.你可以bwperim先使用,然后从这里取样.选择任何一点可能无法给出实际的轮廓点.

因此:

bw = bwperim(image == 1); % image == 1 to ensure binary
[y, x] = find(bw, 1); % Find the first contour point
ctr = bwtraceboundary(image == 1, [y, x], 'SE');
Run Code Online (Sandbox Code Playgroud)

'SE'在给定初始轮廓点的情况下,首先查看的方向.在这里,我选择了东南.这将生成一个N x 2矩阵,其中第一列包含行,第二列包含从y和提供的初始位置开始的有序轮廓点的列x.