Xcorr2.

2-D交叉相关

描述

例子

C= Xcorr2(一种B.返回矩阵的互相关一种B.没有缩放。Xcorr2.是二维版本XCorr.

C= Xcorr2(一种是输入矩阵的自相关矩阵一种。此语法相当于Xcorr2(a,a)

例子

全部收缩

创建两个矩阵,M1M2

M1 = [17 24 1 8 15;23 5 7 14 16;4 6 13 20 22;10 12 19 21 3;11 18 25 2 9];m2 = [8 1 6;3 5 7;4 9 2];

M1是5-by-5和M2是3比3,因此它们的互相关具有(5 + 3-1) - (5 + 3-1),或7×7。就滞后而言,所得到的矩阵是

C = C - 2 - 2 C - 2 - 1 C - 2 0. C - 2 1 C - 2 2 C - 2 3. C - 2 4. C - 1 - 2 C - 1 - 1 C - 1 0. C - 1 1 C - 1 2 C - 1 3. C - 1 4. C 0. - 2 C 0. - 1 C 0. 0. C 0. 1 C 0. 2 C 0. 3. C 0. 4. C 1 - 2 C 1 - 1 C 1 0. C 1 1 C 1 2 C 1 3. C 1 4. C 2 - 2 C 2 - 1 C 2 0. C 2 1 C 2 2 C 2 3. C 2 4. C 3. - 2 C 3. - 1 C 3. 0. C 3. 1 C 3. 2 C 3. 3. C 3. 4. C 4. - 2 C 4. - 1 C 4. 0. C 4. 1 C 4. 2 C 4. 3. C 4. 4.

例如,计算元素 C 0. 2 (或者C(3,5)在Matlab®中,以来M2是3比3)。将两个矩阵排成两个矩阵(1,1)元素一致。这种放置对应于 C 0. 0. 。找到 C 0. 2 , 滑动M2两排到右边。

现在M2位于矩阵之上M1(1:3,3:5)。计算元素逐个元素产品并进行总和。s manbetx 845答案应该是

1 × 8. + 7. × 3. + 1 3. × 4. + 8. × 1 + 1 4. × 5. + 2 0. × 9. + 1 5. × 6. + 1 6. × 7. + 2 2 × 2 = 5. 8. 5.

[R2,C2] =尺寸(M2);cc = sum(sum(m1(0+(1:R2),2 +(1:C2))。* M2))
CC = 585.

验证结果使用Xcorr2.

d = Xcorr2(M1,M2);DD = D(0 + R2,2 + C2)
DD = 585.

给定矩阵 X 大小 m × N 和一个矩阵 H 大小 P. × 问: ,他们的二维互相关, C = X H ,是一个大小的矩阵 m + P. - 1 × N + 问: - 1 与元素

C K. L. = T. R. { X H K. L. } 1 ≤. K. ≤. m + P. - 1 1 ≤. L. ≤. N + 问: - 1

T. R. 痕迹和匕首表示赫米特氏族共轭。矩阵 X H K. L. 有规模 m + 2 P. - 1 × N + 2 问: - 1 和非零元素给出

X m N. = X m - P. + 1 N. - 问: + 1 P. ≤. m ≤. m + P. - 1 问: ≤. N. ≤. N + 问: - 1

H K. L. P. 问: = H P. - K. + 1 问: - L. + 1 K. ≤. P. ≤. P. + K. - 1 L. ≤. 问: ≤. 问: + L. - 1

打电话Xcorr2.相当于该过程的一般复杂矩阵的任意大小。

创建两个复杂的矩阵, X 大小 7. × 2 2 H 大小 6. × 1 7.

x = randn([7 22])+ 1J * RANDN([7 22]);H = RANDN([617])+ 1J * RANDN([6 17]);[m,n] = size(x);m = 1:m;n = 1:n;[p,q] =尺寸(h);p = 1:p;q = 1:q;

初始化 X C

xt =零([m + 2 *(p-1)n + 2 *(q-1)]);xt(m + p-1,n + q-1)= x;C =零([M + P-1 n + Q-1]);

计算元素 C 通过循环 K. L. 。重启 H K. L. 每个步骤都归零。通过求和元素产品来节省时间和内存而不是乘以和追踪跟踪。s manbetx 845

为了k = 1:m + p-1为了l = 1:n + q-1 hkl =零([m + 2 *(p-1)n + 2 *(q-1)]);HKL(P + K-1,Q + L-1)= H;c(k,l)= sum(sum(xt。*结合(hkl)));结尾结尾max(max(abs(c-xcorr2(x,h)))))))
ans = 1.4648e-14

答案与输出的机器精度一致Xcorr2.

使用互相关以找到图像的一部分整体。交叉相关使您能够找到两个信号最彼此类似的区域。对于二维信号,如图像,使用Xcorr2.

将黑白测试图像加载到工作区中。显示它ImagesC.

加载杜尔img = x;white = max(max(img));ImagesC(IMG)轴图像离开COLOROMAP.灰色的标题('原来的'

选择图像的矩形部分。显示缺少的部分显示较大的图像。

x = 435;x = 535;szx = x:x;y = 62;y = 182;szy = y:y;sect = img(szx,szy);kimg = img;kimg(szx,szy)=白色;kumg = white *那些(大小(img)); kumg(szx,szy) = Sect; subplot(1,2,1) imagesc(kimg) axis图像离开COLOROMAP.灰色的标题('图像')子图(1,2,2)ImageC(Kumg)轴图像离开COLOROMAP.灰色的标题('部分'

Xcorr2.找到小图像在较大图像中适合的位置。减去平均值,使得具有大致相同的负值和正值。

nimg = img-incl(平均值(img));nsec = nimg(szx,szy);CRR = Xcorr2(NiMG,NSEC);

互相关的最大值对应于该部分右下角的估计位置。用Ind2sub.将最大的一维位置转换为二维坐标。

[SSR,SND] = MAX(CRR(:));[IJ,JI] = IND2SUB(大小(CRR),SND);图绘图(CRR(:))标题('交叉相关') 抓住Plot(SND,SSR,'或者') 抓住离开文本(SND * 1.05,SSR,'最大'

将较小的图像放在较大的图像内。旋转较小的图像以符合MATLAB®用于显示图像的惯例。在它周围画一个矩形。

IMG(IJ:-1:IJ尺寸(SECT,1)+ 1,JI:-1:ji大小(sect,2)+1)= rot90(sect,2);ImagesC(IMG)轴图像离开COLOROMAP.灰色的标题('重建') 抓住plot([y y y y y],[x x x x],'r') 抓住离开

通过已知量移动模板并使用互相关恢复偏移。

在11×11矩阵中创建模板。创建一个22×22矩阵,并沿着列尺寸和沿列尺寸将原始模板换档8。

模板= 0.2 *那些(11);模板(6,3:9)= 0.6;模板(3:9,6)= 0.6;Offstettemplate = 0.2 *那些(22);offset = [8 6];Offsteptemplate((1:尺寸(模板,1))+偏移(1),......(1:尺寸(模板,2))+偏移(2))=模板;

绘制原始和移位的模板。

ImagesC(Oppsteptemplate)ColorMap灰色的抓住ImagesC(模板)轴平等的

交叉关联两个矩阵并找到交叉相关的最大绝对值。使用最大绝对值的位置来确定模板中的偏移。检查结果是否掌握了已知班次。

CC = Xcorr2(Offsteptemplate,模板);[max_cc,imax] = max(abs(cc(:)));[ypeak,xpeak] = Ind2sub(尺寸(cc),imax(1));corr_offset = [(ypeak大小(模板,1))(xpeak尺寸(模板,2))];isequal(corr_offset,offset)
ans =.逻辑1

从互相关获得的偏移等于行和列维中的已知模板偏移。

此示例需要并行计算工具箱™软件。参考GPU通万博1manbetx过发布支持(并行计算工具箱)以查看支持的GPU。万博1manbetx

通过已知量移动模板并使用互相关恢复偏移。

在11×11矩阵中创建模板。创建一个22×22矩阵,并沿着列尺寸和沿列尺寸将原始模板换档8。

模板= 0.2 *那些(11);模板(6,3:9)= 0.6;模板(3:9,6)= 0.6;Offstettemplate = 0.2 *那些(22);offset = [8 6];Offsteptemplate((1:尺寸(模板,1))+偏移(1),......(1:尺寸(模板,2))+偏移(2))=模板;

使用GPU将原始和移位的模板矩阵放在GPU上GPUArray.对象。

模板= GPUARRAY(模板);Offsettemplate = GPUArray(Oppsteptemplate);

计算GPU上的互相关。

CC = Xcorr2(Offsteptemplate,模板);

使用Matlab®工作区返回结果收集。使用互相关的最大绝对值来确定偏移,并将结果与​​已知移位进行比较。

CC =聚集(CC);[max_cc,imax] = max(abs(cc(:)));[ypeak,xpeak] = Ind2sub(尺寸(cc),imax(1));corr_offset = [(ypeak大小(模板,1))(xpeak尺寸(模板,2))];isequal(corr_offset,offset)
ans =.逻辑1

输入参数

全部收缩

输入阵列,指定为矩阵或GPUArray.对象。

在GPU上运行matlab函数(并行计算工具箱)和GPU通万博1manbetx过发布支持(并行计算工具箱)有关使用的详细信息Xcorr2.GPUArray.对象。

例子:SIN(2 * PI *(0:9)'/ 10)* SIN(2 * PI *(0:13)/ 20)指定二维正弦表面。

例子:GPUArray(SIN(2 * PI *(0:9)'/ 10)* SIN(2 * PI *(0:13)/ 20))指定二维正弦表面作为aGPUArray.目的。

数据类型:单身的|双倍的
复数支持:万博1manbetx是的

输出参数

全部收缩

2-D互相关或自相关矩阵,作为矩阵返回GPUArray.目的。

更多关于

全部收缩

2-D交叉相关

2-D的交叉相关m-经过-N矩阵,X和A.P.-经过-问:矩阵,H,是一个矩阵,C,大小m+P.-1 byN+问:-1。它的元素由

C K. L. = σ. m = 0. m - 1 σ. N. = 0. N - 1 X m N. H ¯ m - K. N. - L. - P. - 1 ≤. K. ≤. m - 1 - 问: - 1 ≤. L. ≤. N - 1

酒吧结束的地方H表示复合缀合。

输出矩阵,CK,L.),具有负数和正行和列指数。

  • 负行索引对应于行的向上偏移H

  • 负列索引对应于列的左移H

  • 正行索引对应于行的向下偏移H

  • 正柱索引对应于列的右转H

在matlab中施放索引®表格,增加大小H:元素CK.L.)对应于C(k + p,l + q)在工作区。

例如,考虑此2-D的交叉相关:

x =那些(2,3);h = [1 2;3 4;5 6];%h是3到2c = Xcorr2(x,h)
C = 6 11 11 5 10 18 18 8 6 10 10 4 2 3 3 1

C(1,1)输出中的元素对应于C(1-3,1-2)=C(-2,-1)在定义方程中,使用零基索引。计算C(1,1)元素,转移H两排到左边的一列。因此,跨相关和中唯一的产品是x(1,1)* h(3,2)= 6。使用定义方程式,您获得

C - 2 - 1 = σ. m = 0. 1 σ. N. = 0. 2 X m N. H ¯ m + 2 N. + 1 = X 0. 0. H ¯ 2 1 = 1 × 6. = 6.

所有其他术语中的所有其他术语等于零。

扩展能力

C / C ++代码生成
使用MATLAB®Coder™生成C和C ++代码。

也可以看看

||

在R2006A之前介绍