1. 程式人生 > >歸一化二維互相關矩陣的計算

歸一化二維互相關矩陣的計算

一. 定義

首先看Matlab help 裡normxcorr2函式中關於歸一化二維互相關矩陣的定義:
這裡寫圖片描述
核心就是模板template 二維矩陣使用(u,v)的位移和fixed 矩陣做點乘求和.
其中template 比 fixed 要小. 假設template矩陣是mn的, fixed矩陣是MN的.

二. 計算過程

下面的座標系都是以matlab的矩陣座標系來說明的.也就是左上角是座標原點, 豎直方向往下是x正方向,
水平方向往右是y的正方向.
u=0,v=0時, 兩矩陣左上角(1,1)位置對齊.
顯然,
1. 當u>0,v>0時, template 相對於fixed 是往右下角

移動了. x軸移動了u單位, y軸移動了v單位.
2. 當u>0,v<0時, template 相對於fixed 是往左下角移動了. x軸移動了u單位, y軸移動了v單位.
3. 當u<0,v<0 時, template 相對於fixed 是往左上角移動了. x軸移動了u單位, y軸移動了v單位.
4. 當u<0,v>0 時, template 相對於fixed 是往右上角移動了. x軸移動了u單位, y軸移動了v單位.
當然, u,v的取值是有限的, 因為必須要保證template和fixed矩陣是有相交部分的.
否則相關係數都是0. 沒有計算意義.

所以,
u的取值是[

(m1),M1], 共M+m1點,
v的取值是[(n1),N1], 共N+n1點.

所以,
最後的相關係數矩陣是(M+m1)(N+n1)大小的.

因為matlab是從(1,1)索引開始儲存資料的.
所以,
(1,1)索引處, u=(m1)=1m,v=(n1)=1n.

所以,
已知相關係數矩陣索引(i, j), 對應公式中:

u=im,v=jn
通過這個公式, 就可以把mat索引和相關矩陣的偏移量聯絡起來了.

下面是matlab自帶的example:
通過normxcorr2函式求template和fixed的偏移量.
這種方法在影象模板匹配

中是常用的方法.
注意: imshow輸出的figure座標是影象座標, 和mat座標是不同的.

template = .2*ones(11); % Make light gray plus on dark gray background
template(6,3:9) = .6;   
template(3:9,6) = .6;
BW = template > 0.5;      % Make white plus on black background
figure, imshow(BW), figure, imshow(template)
% Make new image that offsets the template
offsetTemplate = .2*ones(21); 
offset = [3 5];  % Shift by 3 rows, 5 columns
offsetTemplate( (1:size(template,1))+offset(1),...
                (1:size(template,2))+offset(2) ) = template;
figure, imshow(offsetTemplate)
% Cross-correlate BW and offsetTemplate to recover offset  
cc = normxcorr2(BW,offsetTemplate); 
[max_cc, imax] = max(abs(cc(:)));
[ypeak, xpeak] = ind2sub(size(cc),imax(1));
corr_offset = [ (ypeak-size(template,1)) (xpeak-size(template,2)) ];
isequal(corr_offset,offset) % 1 means offset was recovered