如何检查曲线是否相似

时间:2011-07-04 18:10:20

标签: java algorithm image-processing image-recognition

如何比较白色背景上的两条黑色曲线?怎么做得那么快?例如 此

http://i.stack.imgur.com/xUcwc.jpg

和这个

enter image description here

类似,但是这个

enter image description here

和这个

enter image description here

不是

第一条曲线我将在JPanel上绘制,第二条是图像。

3 个答案:

答案 0 :(得分:4)

我有个主意。不确定它是最好的,但不知何故,它允许评估两艘小龙的相似系数。

让我们为每个cruve制作一个矩阵,将1个用于黑色像素,0个用于白色像素。现在,如果我们想首先用矩阵ab比较两个小轮,我们应该构造第三个矩阵c,其中:

if(a[i][j] == 0 && b[i][j] == 0)
    c[i][j] = 0;
else if(a[i][j] == 0 || b[i][j] == 0)
    c[i][j] = 1;
else
    c[i][j] = 2;

然后,我们将S个小区的c[i][j] != 0表示Tc[i][j] == 2T / S > 1 - eps小区的计数。如果eps,最后两个巡航是相似的,{{1}}你应该根据你想要的准确度选择自己。

答案 1 :(得分:1)

对于curve1的每个点,找到curve2上的最近点,计算最大或平均距离。然后交换曲线,重复并获取最大结果。

如果您想考虑方向 - 请使用修改后的距离函数,其中包括方向比较。

答案 2 :(得分:0)

  1. 去除厚度。
  2. 用长笔划替换原始'模拟'线。
  3. 定义一组可能的'形状'。我可以建议下一组:4条线(水平,垂直和2个dianals),4条曲线 - 在向上,向左,向右或向下,以及椭圆处断开。
  4. 遍历每一行的笔画,并对其形状做出决定。
  5. 此算法不是很准确。您可能需要进行额外的分析,例如:

    1. 如果曲线中断太小,则形状为椭圆形。
    2. 如果第一个/最后一个笔划很短并且与其余笔划的方向不同,则应忽略它。