从二进制图像中提取 shape/polygon?

Extracting a shape/polygon from a binary image?

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

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

可以安全地假设地图相对平滑,并且 none 个区域相互接触。

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

白色区域代表免费space

黑色区域代表被占用space

边缘检测在这个二值图像上是unnecessary/harmful,只需使用contour following

然后通过Douglas-Peucker线简化方法将弗里曼链变成折线。