歸一化二維互相關矩陣的計算
阿新 • • 發佈:2019-01-28
一. 定義
首先看Matlab help 裡normxcorr2函式中關於歸一化二維互相關矩陣的定義:
核心就是模板template 二維矩陣使用
其中template 比 fixed 要小. 假設template矩陣是
二. 計算過程
下面的座標系都是以matlab的矩陣座標系來說明的.也就是左上角是座標原點, 豎直方向往下是x正方向,
水平方向往右是y的正方向.
顯然,
1. 當
2. 當
3. 當
4. 當
當然, u,v的取值是有限的, 因為必須要保證template和fixed矩陣是有相交部分的.
否則相關係數都是0. 沒有計算意義.
所以,
u的取值是 −(m−1),M−1]
v的取值是
所以,
最後的相關係數矩陣是
因為matlab是從
所以,
所以,
已知相關係數矩陣索引(i, j), 對應公式中:
通過這個公式, 就可以把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