依次获取边缘图像的外轮廓

信息处理 图像处理 matlab 计算机视觉 opencv
2022-01-09 11:31:52

嗨 CV/模式识别社区,

因为我的最后一个线程是关于分割为 BLOB 并开始变得太大,没有明确的结果。我想重新考虑该过程的最后一步,即对象轮廓点的顺序获取。

我需要从定义的起点(左)到右(终点)提取图像的轮廓。正如您在下一张图片中看到的,有两个黄色窗口(左侧和右侧)。这些是提到的起点和终点。我想做的事:从左边的黄色窗口开始向右移动,保存相关点的(x,y)坐标。这就是红线(轮廓)的作用。轮廓像素的顺序确实很重要。 我想做的事

我正处于只有二值图像的阶段,到目前为止,一切都很好。在最坏的情况下,图像的其余部分仍然存在孔洞和可能的噪点。

所以,这里有一些我想提取的图像。

对于这个例子,我想得到桌子/地下物体的外轮廓线。如您所见,右上角和左上角是边缘检测过程的片段,不应遍历。 示例1 示例2

先感谢您。欢迎使用 Matlab 和/或 OpenCV 提示!

2个回答

您可以执行以下操作以获得连接的轮廓。在轮廓上获得几个点,比如 100 点左右。然后在其上拟合三次样条

我做了一些可能对你有帮助的事情。以下是我所做的。该项目是按形状对汽车进行聚类。所以我有汽车的图像,我是一个用户标记了汽车的边界。红点是手动标记的点。然后我在这几个点上拟合了一个封闭的三次样条。蓝色轮廓是三次样条。然后我将这个轮廓用于我的目的在此处输入图像描述

我相信你可以做类似的事情来获得轮廓。请注意,可以使用三次样条获得开放曲线。让我还告诉您,从这些坐标点集构造样条线很简单。您基本上想要做的是在每组点之间拟合三次曲线。

请询问您是否需要进一步澄清我的想法。

我可以建议如下

1- 在某些部分截取图像。你知道基地在哪里,那是蓝线所在的地方。从那里截取图像。如果您可以安全地移除不需要的底部

2-使用霍夫变换,检测图像的水平和垂直线。排序最大的线。然后从图像中删除它们。您现在应该留下一些干净的图像。

3- 现在找到图像的轮廓,看看现在哪个轮廓最靠近图像的底部。这将确保您感兴趣的对象靠近基地。或者找到所有轮廓并删除一些预定义大小的小轮廓,然后寻找位于底部附近的轮廓。轮廓总是有方向的并且是顺时针方向的。

4- 或者现在的另一种方法是从左边的黄色框开始并继续前进