比较行算法建议

时间:2011-11-29 15:28:49

标签: c# algorithm math geometry distance

Line是点数组(两个或更多)。每个点都有X和Y坐标(双精度)。 我有一架满是线的飞机。 我需要一些措施来告诉我离飞机的任何两条线有多接近和有多相似。当线条完全相同时,我需要将此度量设置为0,并且当线条进行转换,移位或具有完全不同的几何形状时,其值必须增加。 首先,如果有人知道一个好的算法名称,这将是好的。

更新: 可能的用法是:我有一条近似几何的道路。我有一个公路网。我必须在公路网找到另一条路,这可能是我正在寻找的道路。但由于其他一些原因,我也需要这个措施。找到这条路是不够的,我必须给出一个数字,告诉我的比赛有多好以及其他比赛有多接近。

请注意,如果点不同,则两行不必相同。

此外,如果有人知道在哪里可以找到C#中此算法的代码或库,那就太棒了。

1 个答案:

答案 0 :(得分:1)

警告:图形模式识别不是我最喜欢的爱好,所以这可能是完全废话......

我会尝试找一些可以说明比较线之间某些相似之处的启发式方法......

首先是微不足道的检查:

点数相等吗?

看点数:
如果两条线的点数相同:
测量两条线中点到点的相对距离...
测量两条线从一点到另一点行走时的角度变化...
...总结差异(及其绝对值),你得到了一些指标

如果两条线的点数不同:

将线条放在网格上,并标记线条所触及的网格单元格...计算差异...尝试不同的网格分辨率

穿过线条,跟踪你的行走方向并移除与你的行走方向有小角度差异的点...一旦你到达一个角度变化较大的点,将它作为你的新行走方向,并留下点......之后,尝试其他指标

找到旋转和比例:

尝试计算/找到3个积分点或特征点(具有相似角度变化的点,最好不要彼此接近并且具有不常见的角度变化)并尝试旋转/拉伸/镜像......你可能会想要计算每个可能版本的所有其他指标,并在适用的情况下获得最佳结果

如果这样的东西不能给你带来可用的结果......看起来有很多数学等着你......

http://en.wikipedia.org/wiki/Image_registration
http://en.wikipedia.org/wiki/Scale-invariant_feature_transform