模板匹配里的一些数学原理
我们知道,在openCV里,模板匹配中匹配度的计算公式有三类。SQDIFF、CCORR、CCOEFF。下面我们来简单介绍一下这三类计算方法,并比较其不同之处。
openCV里的模板匹配
SQDIFF
SQDIFF全称Sum of Squared Difference (SSD),即差的平方和。其离散形式为:
\[E(\vec{d}) = \sum_{\Omega}^{}\left |{I(\vec{x}+\vec{d})-T(\vec{x})}\right |^2 \\ 其中\Omega表示模板图像定义域,\vec{d}表示模板图像在输入图像里的位置向量,I(\vec{x})表示待匹配图像(大小与模板图像相等),T(\vec{x})表示模板图像 \]我们将模板图像与待匹配图像均展开成一维向量,即一维离散信号:
\[I = (x_1, x_2,...,x_n)^T \\ T = (t_1, t_2, ..., t_n)^T \]则E可以表示为:
\[E = \sum_{i}\left | x_i-t_i \right| ^ 2 \ \ \ (*) \]这样就很好理解了,就是两个图像中每个像素之差的平方和,类似于线性回归中的MSE(Mean-Square Error)损失函数。
我们再写成向量形式:
\[E = \sum\left|| I-T \right||^2 \\ 其中||x||表示L_2范数,相当于x的模 \]这样可以发现,SQDIFF其实就是用来度量模板图片与待匹配图片的欧式距离。
在 (*) 式中,我们将模板图片与待匹配图片均展成了一维向量,而这也充分表明了模板匹配的局限性:无法包含空间信息,如旋转、伸缩等
SQDIFF_NORMED就是对SQDIFF进行归一化,这里不多赘述。
CCORR
CCORR 的全称为 Cross Correlation,意即互相关,其离散形式为:
\[E(\vec{d}) = \sum_{\Omega}^{}{I(\vec{x}+\vec{d})*T(\vec{x})} \]反映了待匹配图像与模板图像的相似性。
为什么这个式子可以反应两个图像的相似性呢?
我们还是将图像展成一维离散信号进行分析:
\[I = (x_1, x_2,...,x_n)^T \\ T = (t_1, t_2, ..., t_n)^T \]则E可以表示为:
\[E = \sum_{i}x_i*t_i=I^TT=|I||T|cos\theta \\ 其中\theta表示I向量与T向量的夹角 \]当模板图像与待匹配图像的相关性越好时,\(I\)与\(T\)之间的夹角越小,也就是两个向量靠得越近,此时\(cos\theta\)越大,\(E\)也就越大
其归一化形式:
\[E(\vec{d}) =\frac{\sum_{\Omega}^{}{I(\vec{x}+\vec{d})*T(\vec{x})}}{\sqrt{\sum_{\Omega}I^2(\vec{x}+\vec{d})*\sum_{\Omega}T^2(\vec{x})}} \]其全称为Normalized Cross Correlation (NCC),意即归一化互相关.
我们还是将图像展成一维离散信号,则E可以表示为:
\[E=\frac{|I||T|cos\theta}{|I||T|} = cos\theta \]也就是两个向量之间的夹角,范围为\([0,1]\),越接近1则相关性越好。
CCOEFF
CCOEFF 的全称为 Correlation Coefficient, 意即相关系数,也就是零均值互相关 (Zero-mean Cross Correlation; ZCC)
其离散形式:
\[E(\vec{d}) = \sum_{\Omega}(I(\vec{x}+\vec{d})-\bar{I}_\bar{d})(T(\vec{x})-\bar{T}) \\ 其中\ \ \bar{T} = \frac{1}{|\Omega|}\sum_{\Omega}T(\vec{x}),\ \ \bar{I}_\bar{d}=\frac{1}{|\Omega|}\sum_{\Omega}I(\vec{x}+\vec{d}) \]可以发现,CCOEFF的计算相当于CCORR中的像素值替换成了(像素值-图像像素均值),这样做的好处就是减弱了光照对于图像匹配的影响,鲁棒性更强
标签:匹配,sum,数学原理,图像,Omega,模板,vec From: https://www.cnblogs.com/Asaka-QianXiang/p/18025093