Main Content

normxcorr2

归一化二维互相关性

说明

示例

C = normxcorr2(template,A) 计算矩阵 templateA 的归一化互相关性。生成的矩阵 C 包含相关系数。

示例

全部折叠

将两个图像读入工作区,并将其转换为灰度以用于 normxcorr2。并排显示图像。

onion = im2gray(imread('onion.png'));
peppers = im2gray(imread('peppers.png'));
montage({peppers,onion})

执行互相关性,并将结果显示为曲面。

c = normxcorr2(onion,peppers);
surf(c)
shading flat

求互相关性中的峰值。

[ypeak,xpeak] = find(c==max(c(:)));

normxcorr2 添加的填充考虑在内。

yoffSet = ypeak-size(onion,1);
xoffSet = xpeak-size(onion,2);

使用 drawrectangle 函数显示匹配的区域。'Position' 名称-值对组参量将 ROI 的左上角坐标、宽度和高度指定为四元素向量 [xmin,ymin,width,height]。将 ROI 的面指定为完全透明。

imshow(peppers)
drawrectangle(gca,'Position',[xoffSet,yoffSet,size(onion,2),size(onion,1)], ...
    'FaceAlpha',0);

输入参数

全部折叠

输入模板,指定为数值矩阵。template 的值不能都相同。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

输入图像,指定为数值图像。A 必须大于矩阵 template,归一化才有意义。

对于 A 中在模板的整个范围内对应方差为零的区域,归一化互相关性为未定义的运算。在这些区域中,normxcorr2 为输出 C 赋予零相关系数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

输出参量

全部折叠

相关系数,以数值矩阵形式返回,值在 [-1, 1] 范围内。

数据类型: double

算法

normxcorr2 使用以下一般过程 [1][2]

  1. 根据图像的大小,计算空间域或频域中的互相关性。

  2. 通过预先计算运行总和来计算局部总和。

  3. 使用局部总和来归一化互相关性以获得相关系数。

该实现严格遵循 [1] 中的公式:

γ(u,v)=x,y[f(x,y)f¯u,v][t(xu,yv)t¯]{x,y[f(x,y)f¯u,v]2x,y[t(xu,yv)t¯]2}0.5

其中

  • f 是图像。

  • t¯ 是模板的均值

  • f¯u,v 是模板范围内区域中 f(x,y) 的均值。

参考

[1] Lewis, J. P. "Fast Normalized Cross-Correlation." Industrial Light & Magic, 1995. http://scribblethink.org/Work/nvisionInterface/nip.pdf.

[2] Haralick, Robert M., and Linda G. Shapiro, Computer and Robot Vision, Volume II, Addison-Wesley, 1992, pp. 316-317.

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

|