我正在尝试使用MATLAB中的 normxcorr2 (normalized cross-correlation)来计算正在发育的胚胎中移动形状的速度。我有3个问题:
1)我的图像尺寸为260x360像素。我给出了一个10x10像素的模板大小,我要求命令在50x50像素的搜索窗口中的后续帧中搜索此模板。我得到一个大小为59x59的相关矩阵。因此,这意味着命令在搜索窗口内逐个像素地移动模板以寻找最佳相关性。正确?
2)相关矩阵中的每个值表示搜索窗口中的模板矩阵。正确?
3)假设我在相关矩阵的第10行和第16列得到最大值。这意味着最佳相关模板位于图像中y方向上的第10个矩阵和x方向上的第16个矩阵中。正确?
答案 0 :(得分:4)
为了说明 normxcorr2 的使用,请考虑以下示例(改编自this page)
%# Make light gray plus on dark gray background
template = 0.2*ones(11);
template(6,3:9) = 0.6;
template(3:9,6) = 0.6;
BW = single(template > 0.5); %# Make white plus on black background
imtool(template, 'InitialMagnification','fit')
%# Make new image that offsets the template
offsetTemplate = 0.2*ones(81);
offset = [30 50]; %# Shift by 30 rows, 50 columns
offsetTemplate( (1:size(template,1))+offset(1), ...
(1:size(template,2))+offset(2) ) = template;
imtool(offsetTemplate, 'InitialMagnification',400)
%# Cross-correlate BW and offsetTemplate to recover offset
cc_norm = normxcorr2(BW, offsetTemplate);
imtool(cc_norm, 'InitialMagnification',400)
[max_cc_norm, imax] = max( abs(cc_norm(:)) );
[ypeak, xpeak] = ind2sub(size(cc_norm), imax(1));
corr_offset = [ (ypeak-size(template,1)) (xpeak-size(template,2)) ];
fprintf('Input offset: %d,%d\nRecovered offset: %d,%d\n', offset, corr_offset)