通过点位置或图像进行角点检测

Corner detection by points location or image

我有一些简单的形状,这些形状不一定是规则的。

我需要一个算法来找到它们的角点,实际上我想将它们的点总结到最小,以 dxf 格式保存它们,并且我在数组中有它们的点位置。 像 harris 或 surf 这样的简单算法找不到合适的点,结果 return 太多点。 你能帮我用算法、想法或代码来解决这个问题吗? (在 c、c#、java ,...)或图像处理 提前致谢。

你要实现的叫多边形矢量化.

首先,您需要应用轮廓跟随算法来顺序获取像素。在这种情况下,似乎只需将像素链接到它们的邻居就可以了(请注意,在您的示例中,某些形状是开放的,您可能必须将邻域扩展到两个或三个像素。

然后通过Douglas-Peucker算法(https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm)或类似算法检测长直边。

你的一些角落很钝,你可能想把它们修好。我建议丢弃形成平角的短线段序列,并连接长的相邻线段以恢复方角。

不要期待 "perfect" 结果。