模板匹配(matlab实现)

基于像素匹配算法

模板匹配算法一般是通过滑窗的方式在待匹配的图像上滑动,通过比较模板与子图的相似度,找到相似度最大的子图。这种算法最核心部分在于如何设计一个相似性函数。

最容易想到的一个相似性函数便是欧式距离:
欧式距离公式

将这个相似性函数展开,可以得:
欧氏距离展开式
可以看出,只有第二项是有意义的,因为第一项和第三项的值在选定模板后是固定的。对于欧式距离相似函数,值越大表示越不相似,也就是说,第二项的值越小则越不相似。 再将第二项归一化:
欧氏距离归一化

如果就仅仅匹配大小不变角度不变的模板,到此为止就够了。

为了解决旋转不变性,我用很简单的很丑陋的方法————旋转模板再重新匹配。

代码

化简后的欧氏距离matlab实现方法。

1
2
3
4
5
6
7
for i=1:m-m0+1  
for j=1:n-n0+1
subMatr=test(i:i+m0-1,j:j+n0-1);
vec=double( subMatr(:) );
result(i,j)=vec'*vec_sub / (norm(vec)*norm_sub+eps);
end
end

结果图:


具体源码 可以见github.