从二值图像中提取形状/多边形?

Ant*_* S. 0 python opencv computer-vision computational-geometry python-2.7

我正在尝试从映射数据构建导航网格。其中一个步骤涉及将二值图像(其中 0 表示占用空间,1 表示空闲空间)转换为平面直线图。

我试图找出一种方法来做到这一点,这有点可靠。我目前的想法是使用 Canny 边缘检测器,然后通过 OpenCV 的 Hough 线变换运行它。但是,这并不能保证检测到的线以代表原始形状的方式连接。

可以安全地假设地图相对平滑,并且没有任何区域相互接触。

编辑 - 这是一个示例图像:

样本地图

白色区域代表可用空间

黑色区域代表占用空间

Yve*_*ust 5

对这个二值图像进行边缘检测是不必要的/有害的,只需使用轮廓跟随

然后通过Douglas-Peucker线简化方法将 Freeman 链转换为多段线。