按条件平滑多边形

时间:2012-02-17 06:50:02

标签: algorithm opencv polygon smoothing

我有点序列给出的多边形 我需要应用以下规则:

  • 角度必须为180,90,45度;
  • 如果行平行然后离开线路大于minValue;
  • 多边形的方向是水平和垂直的。

(如果最接近特定问题,那么我在OpenCV中找到对象的轮廓,那么它们应该很好画)

我需要做这样的事情: Example

2 个答案:

答案 0 :(得分:2)

我会使用DP点减少来解决这个问题。这个例程有几种不同的风格,最常见的并不是你想做的最好的,但最终这种方法会带来最好的质量。

经典的DP操作采用一系列点形成一条多义线,并删除任何不会破坏形状超出某个因素的点。此因子是基于您的数据的度量单位,因此在您的情况下,它可能以像素为单位。您可以想象,选择因子是使用DP最困难的部分,除非您只想从多边形中删除可以轻松量化的点并不重要。

在你的情况下,并且花了很多时间,你想要删除对多边形形状有贡献的点。您应该能够获取DP的典型递归示例,并在第一次迭代通过点后使其中断,以便一次删除一个点。然后,您将对您的形状进行评分,看它是否符合您的要求。如果它没有得分完美,你移除另一个点并重新得分,直到它或你只剩下三个点。如果没有完美的分数,你可以采用最佳分数的形状,并且可能有第二种算法迫使它满足要求。

http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

答案 1 :(得分:0)

你所要求的东西似乎是微不足道的,并没有那么明确。需要更多背景信息。

我会尝试两种方法:

  • 在多边形上叠加一个方格,并保持足够填充的方格。

  • 对形状进行骨架化(http://en.wikipedia.org/wiki/Topological_skeleton),清理并将骨架分成大部分水平/垂直线段;然后用真正的水平/垂直笔画替换这些片段。