好吧,让我们试一试……这个解决方案尝试使用现有的normxcorr2实现并修改它以解决yoru问题.
归一化互相关的公式是:
在这种情况下,您希望更改每个窗口的集成边界.这会影响标准偏差和相关性本身.让我们分几步解决它:
步骤#1:获得正确的关联
我们可以通过修改模板图像来做到这一点:
template_fix = template;
mean_template_mask = mean(template(mask == 1));
template_fix(mask == 0) = mean_template_mask;
result = normxcorr2(template_fix, query)
请注意,通过进行此更改,我们使模板的平均值等于掩码旁边的模板的平均值.这样,掩码外的所有模板像素都不会对积分做出贡献,因为它们等于平均值.
第二步:修复模板标准
size_mask = sum(mask(:));
size_template = numel(template);
std_template = std2(template);
std_template_masked = sqrt(sum((template_fix(:) - mean_template_mask).^2)/size_mask);
result = result * (std_template/std_template_masked);
第3步:修复查询标准
sum_filt = ones(size(template));
std_query = filter2(query.^2, sum_filt)