walkie

ORC小节2

0
阅读(1243)

这些天继续关注ORC,

其中的算法想要稍微的改进一下。

在目前的算法中,在识别的过程中使用的模板匹配的方式是:

r = sum(sum(a.*b))/sqrt(sum(sum(a.*a))*sum(sum(b.*b)));

其中a和b都是N*M的矩阵, 并且数值都是0和1(图像已经经过了二值化)。

这个识别的效果相当的好,只是算法的复杂度是N×M,甚至更高。。

为了降低这 个算法的复杂度。

经过和Kevin的讨论,决定使用数组的方式来降低其复杂度,把横轴方向上是黑的点都记为1,然后累计下来,会得到一组数 组,记录着这个图像矩阵横轴方向上的象素累计。同样也可以得到一组纵轴方向的一组数组。

我们记录为a1和a2,然后模板的数组记为b1和 b2,

先进行归一化,

经过一些实验验证,感觉如下的归一化的方式不错的。

a1 = a1 - mean(a1);
b1 = b1 - mean(b1);
a2 = a2 - mean(a2);
b2 = b2 - mean(b2);

可以去除平均 值,而真正查看各个数组的差别。

 

#############

###法一

一开始的方法是想通过 距离的方式来比较,比如

r=(sum(a1.*b1)/sqrt(sum(a1.*a1)+sum(b1.*b1)))^2+(sum(a2.*b2)/sqrt(sum(a2.*a2)+sum(b2.*b2)))^2

 等 效的意思就是x^2+y^2,横轴方向我们暂定义为x,纵轴方向我们暂定义为y。

这种方式在比较的时候,大多数的数据都可以比较出来了,

但 是H ,N以及U无法分辨,

想想原因其实很简单,因为我们这里的x与y没有挂钩,而对于H,N,U,他们的sum(y)其实是一样的。他们 纵轴方向上的数组其实中数值都差不多,只是大小数值的顺序不一样,H在中间,

N平均在各个数值上,U在底部。

 

######

## 法二

为了解决上面的问题,

决定让x与y挂钩。

r=(sum(a1.*b1)/sqrt(sum(a1.*a1)+sum(b1.*b1)))*(sum(a2.*b2)/sqrt(sum(a2.*a2)+sum(b2.*b2)))

等 效的意思是x*y,

这种方式比较的结果很好,

标准的数字和字母都可以很好的识别出来,

 

但是最 后我希望可以使用fft的方式来查看两个模式是不是一样。

不过这种方式我还在思考中,

晚上回去也一直在翻信号与系统的书,发 现奥本海姆的书很经典,果然很经典,虽然那个时候学习的时候只是翻翻而已。。。