基于相关的模板匹配技术可直接⽤于在⼀幅图像中寻找某种⼦图像模式。图像相关的基本概念是:对于⼤⼩为M×N的图像f(x, y)和⼤⼩为J×K的⼦图像模式w(x, y),f与w的相关可表示为:
c ( x , y ) = ∑ s = 0 K ∑ t = 0 J w ( s , t ) f ( x + s , y + t ) c\left( x,y \right)=\sum\limits_{s=0}^{K}{\sum\limits_{t=0}^{J}{w\left( s,t \right)}}f\left( x+s,y+t \right) c(x,y)=s=0∑Kt=0∑Jw(s,t)f(x+s,y+t) (1)
其中,x=0,1,2,…,N-K,y=0,1,2,…,M-J。⽬的是寻找匹配⽽不是对f(x, y)进⾏滤波操作,因此w的原点被设置在⼦图像的左上⻆,并且上式式给出的形式也完全适⽤于J和K为偶数的情况。
计算相关c(x, y)的过程就是在图像f(x,y)中逐点地移动⼦图像w(x, y),使w的原点和点(x,y)重合,然后计算w与f中被w覆盖的图像区域对应像素的乘积之和,以此计算结果作为相关图像c(x, y)在(x,y)点的响应。
相关可⽤于在图像f(x, y)中找到与⼦图像w(x, y)匹配的所有位置。实际上,当w按照上⼀段中描述的过程移过整幅图像f之后,最⼤的响应点(x0,y0 )即为最佳匹配的左上⻆点。我们也可以设定⼀个阈值T,认为响应值⼤于该阈值的点均是可能的匹配位置。
相关的计算是通过将图像元素和⼦模式图像元素联系起来获得的,将相关元素相乘后累加。我们完全可以将⼦图像w视为⼀个按⾏或按列存储的向量 ,将计算过程中被w覆盖的图像区域视为另⼀个按照同样的⽅式存储的向量 。这样一来,相关计算就成了向量之间的点积运算。
两个向量的点积为:
a ⃗ ⋅ b ⃗ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ cos θ \vec{a}\centerdot \vec{b}=\left| {\vec{a}} \right|\left| {\vec{b}} \right|\cos \theta a⋅b=∣a∣∣ ∣b∣ ∣cosθ (2)
其中,θ为向量 a ⃗ \vec{a} a、 b ⃗ \vec{b} b 之间的夹⻆。显然,当 a ⃗ \vec{a} a和 b ⃗ \vec{b} b 具有完全相同的⽅向(平⾏)时,cosθ=1,从⽽式(2)取得其最⼤值 ∣ a ⃗ ∣ ∣ b ⃗ ∣ \left| {\vec{a}} \right|\left| {\vec{b}} \right| ∣a∣∣ ∣b∣ ∣,这就意味着当图像的局部区域类似于⼦图像模式时,相关运算产⽣最⼤的响应。然⽽,式(2)最终的取值还与向量 a ⃗ \vec{a} a、 b ⃗ \vec{b} b ⾃⾝的模有关,这将导致按照式(2)计算的相关响应存在着对f和w的灰度幅值⽐较敏感的缺陷。这样⼀来,在f的⾼灰度区域,可能尽管其内容与⼦图像w的内容并不相近,但由于 ∣ a ⃗ ∣ \left| {\vec{a}} \right| ∣a∣⾃⾝较⼤⽽同样产⽣⼀个很⾼的响应。可通过对向量以其模值来归⼀化从⽽解决这⼀问题,即通过 a ⃗ ⋅ b ⃗ ∣ a ⃗ ∣ ∣ b ⃗ ∣ \frac{\vec{a}\centerdot \vec{b}}{\left| {\vec{a}} \right|\left| {\vec{b}} \right|} ∣a∣∣b∣a⋅b来计算相关。
改进的⽤于匹配的相关计算公式如下。
r ( x , y ) = ∑ s = 0 K ∑ t = 0 J w ( s , t ) f ( x + s , y + t ) [ ∑ s = 0 K ∑ t = 0 J w 2 ( s , t ) ⋅ ∑ s = 0 K ∑ t = 0 J f 2 ( x + s , y + t ) ] 1 / 2 r\left( x,y \right)=\frac{\sum\limits_{s=0}^{K}{\sum\limits_{t=0}^{J}{w\left( s,t \right)}}f\left( x+s,y+t \right)}{{{\left[ \sum\limits_{s=0}^{K}{\sum\limits_{t=0}^{J}{{{w}^{2}}\left( s,t \right)\cdot \sum\limits_{s=0}^{K}{\sum\limits_{t=0}^{J}{{{f}^{2}}\left( x+s,y+t \right)}}}} \right]}^{1/2}}} r(x,y)=[s=0∑Kt=0∑Jw2(s,t)⋅s=0∑Kt=0∑Jf2(x+s,y+t)]1/2s=0∑Kt=0∑Jw(s,t)f(x+s,y+t) (3)
改进的相关公式实际上计算的是向量 a ⃗ \vec{a} a、 b ⃗ \vec{b} b 之间的夹⻆余弦值。显然,它只和图案模式本⾝的形状或纹理有关,与幅值(亮度)⽆关。
上图原始图像包含有12种不同的图案模式,要在原始图像中找到与⼦图像的最佳匹配。
基于相关的图像匹配结果如下:
此时,计算得到的相关响应最大值为1,表示原始图像包含了与子图像纹理结构完全相同的图像区域。
此时,计算得到的相关响应最大值为0.9784,表示原始图像包含了与子图像中的最佳匹配区域并不完全相同。
相关资源可从如下链接获取:
基于matlab的相关模板图像匹配
资源包含以下内容:
1. 基于matlab的相关模板图像匹配.m
2 一幅原始图像与两幅子图像