【发布时间】:2012-09-30 00:52:23
【问题描述】:
问题:
我有一张从谷歌静态地图 api 下载的图片。我使用这张图片基本上创建了一个用户点击的“魔杖”类型的功能。对于那些感兴趣的人,我正在使用图形切割算法来查找用户单击的形状。然后,我使用轮廓跟踪找到代表此形状边界的所有点(borderPoints)。
我的目标:
拉直线条(如果可能)并尽量减少边界点的数量(尽可能)。我目前的用例是房屋的屋顶,所以在大多数情况下,我希望我能找到角落并将它们用作边界点,而不是它们之间的所有不同点。但由于像素线凹凸不平,我无法弄清楚如何找到这些角落。
我的解决方案尝试:
一种简单的技术是循环检查之前的点、当前点和之后的点。如果之前的点和之后的点具有相同的 x 或相同的 y,则可以删除当前点。这会稍微减少点数,但没有我想要的那么多。
我还尝试查看之前和之后的点,看看是否可以删除当前点,如果它不在某个斜率范围内,但收效甚微,因为偶尔会删除关键角点,因为图像有点像模糊,角落有轻微的圆点。
我的问题:
有什么算法可以做这种事情吗?如果是这样,它(他们)叫什么?如果没有,关于如何以编程方式解决此问题的任何想法?
【问题讨论】:
-
en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm
-
感谢您的快速回复。我会检查并报告情况。
-
@MartinBeckett 这正是我所需要的。您应该回答问题而不是发表评论,以便我可以将其标记为答案:)。否则我会在你之后标记另一个回答它的人。再次感谢!
-
这是一个很棒的算法,每个人最终都会在需要逼近一条线时重新发明它!
-
@MartinBeckett 你打算为此创建一个答案吗?我不是想烦人,我只是想确保你得到分数,因为你是第一个回答的。如果您不在乎,我只会支持您的评论并标记工作的答案。
标签: algorithm image-processing signal-processing