Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

xcorr2

Correlación cruzada 2-D

Descripción

ejemplo

c = xcorr2(a,b) devuelve la correlación cruzada de matrices y sin escalado. es la versión bidimensional de .abxcorr2xcorr

c = xcorr2(a) es la matriz de autocorrelación de la matriz de entrada.a Esta sintaxis es equivalente a .xcorr2(a,a)

Ejemplos

contraer todo

Cree dos matrices y .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];

es 5 por 5 y es 3 por 3, por lo que su correlación cruzada tiene tamaño (5+3-1)-por-(5+3-1), o 7 por 7.M1M2 En términos de retrasos, la matriz resultante es

<math display="block">
<mrow>
<mi>C</mi>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
<mo>,</mo>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
<mo>,</mo>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
<mo>,</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
<mo>,</mo>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
<mo>,</mo>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>,</mo>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>,</mo>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>,</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>,</mo>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>1</mn>
<mo>,</mo>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>2</mn>
<mo>,</mo>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>3</mn>
<mo>,</mo>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>3</mn>
<mo>,</mo>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>3</mn>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>3</mn>
<mo>,</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>3</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>3</mn>
<mo>,</mo>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>3</mn>
<mo>,</mo>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>4</mn>
<mo>,</mo>
<mo>-</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>4</mn>
<mo>,</mo>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>4</mn>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>4</mn>
<mo>,</mo>
<mn>1</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>4</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>4</mn>
<mo>,</mo>
<mn>3</mn>
</mrow>
</msub>
</mrow>
</mtd>
<mtd>
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>4</mn>
<mo>,</mo>
<mn>4</mn>
</mrow>
</msub>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
<mo>.</mo>
</mrow>
</math>

Por ejemplo, calcule el elemento

<math display="block">
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
(o en MATLAB®, ya que es 3 por 3).C(3,5)M2 Alinee las dos matrices para que sus elementos coincidan.(1,1) Esta colocación corresponde a
<math display="block">
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</math>
. Buscar
<math display="block">
<mrow>
<msub>
<mrow>
<mi>c</mi>
</mrow>
<mrow>
<mn>0</mn>
<mo>,</mo>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>
, deslice dos filas hacia la derecha.M2

Ahora está en la parte superior de la matriz .M2M1(1:3,3:5) Calcular los productos elemento por elemento y sumarlos. La respuesta debe ser

<math display="block">
<mrow>
<mn>1</mn>
<mo>×</mo>
<mn>8</mn>
<mo>+</mo>
<mn>7</mn>
<mo>×</mo>
<mn>3</mn>
<mo>+</mo>
<mn>1</mn>
<mn>3</mn>
<mo>×</mo>
<mn>4</mn>
<mo>+</mo>
<mn>8</mn>
<mo>×</mo>
<mn>1</mn>
<mo>+</mo>
<mn>1</mn>
<mn>4</mn>
<mo>×</mo>
<mn>5</mn>
<mo>+</mo>
<mn>2</mn>
<mn>0</mn>
<mo>×</mo>
<mn>9</mn>
<mo>+</mo>
<mn>1</mn>
<mn>5</mn>
<mo>×</mo>
<mn>6</mn>
<mo>+</mo>
<mn>1</mn>
<mn>6</mn>
<mo>×</mo>
<mn>7</mn>
<mo>+</mo>
<mn>2</mn>
<mn>2</mn>
<mo>×</mo>
<mn>2</mn>
<mo>=</mo>
<mn>5</mn>
<mn>8</mn>
<mn>5</mn>
<mo>.</mo>
</mrow>
</math>

[r2,c2] = size(M2);  CC = sum(sum(M1(0+(1:r2),2+(1:c2)).*M2))
CC = 585 

Compruebe el resultado utilizando .xcorr2

D = xcorr2(M1,M2);  DD = D(0+r2,2+c2)
DD = 585 

Dada una matriz

<math display="block">
<mrow>
<mrow>
<mi mathvariant="script">X</mi>
</mrow>
</mrow>
</math>
de tamaño
<math display="block">
<mrow>
<mi>M</mi>
<mo>×</mo>
<mi>N</mi>
</mrow>
</math>
y una matriz
<math display="block">
<mrow>
<mrow>
<mi mathvariant="script">H</mi>
</mrow>
</mrow>
</math>
de tamaño
<math display="block">
<mrow>
<mi>P</mi>
<mo>×</mo>
<mi>Q</mi>
</mrow>
</math>
, su correlación cruzada bidimensional,
<math display="block">
<mrow>
<mrow>
<mrow>
<mi mathvariant="script">C</mi>
</mrow>
</mrow>
<mo>=</mo>
<mrow>
<mrow>
<mi mathvariant="script">X</mi>
</mrow>
</mrow>
<mo></mo>
<mrow>
<mrow>
<mi mathvariant="script">H</mi>
</mrow>
</mrow>
</mrow>
</math>
, es una matriz de tamaño
<math display="block">
<mrow>
<mo stretchy="false">(</mo>
<mi>M</mi>
<mo>+</mo>
<mi>P</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>×</mo>
<mo stretchy="false">(</mo>
<mi>N</mi>
<mo>+</mo>
<mi>Q</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
</mrow>
</math>
con elementos

<math display="block">
<mrow>
<mrow>
<mrow>
<mi mathvariant="script">C</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>,</mo>
<mi>l</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow>
<mstyle mathvariant="normal">
<mrow>
<mi>T</mi>
<mi>r</mi>
</mrow>
</mstyle>
</mrow>
<mspace width="0.16666666666666666em"></mspace>
<mo maxsize="1.2" minsize="1.2">{</mo>
<munderover accent="true">
<mrow>
<mrow>
<mi mathvariant="script">X</mi>
</mrow>
</mrow>
<mrow></mrow>
<mrow>
<mo stretchy="false"></mo>
</mrow>
</munderover>
<msubsup>
<mrow>
<munderover accent="true">
<mrow>
<mrow>
<mi mathvariant="script">H</mi>
</mrow>
</mrow>
<mrow></mrow>
<mrow>
<mo stretchy="false"></mo>
</mrow>
</munderover>
</mrow>
<mrow>
<mi>k</mi>
<mi>l</mi>
</mrow>
<mrow>
<mo></mo>
</mrow>
</msubsup>
<mo maxsize="1.2" minsize="1.2">}</mo>
<mspace width="2em"></mspace>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
<mo></mo>
<mi>k</mi>
<mo></mo>
<mi>M</mi>
<mo>+</mo>
<mi>P</mi>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
<mo></mo>
<mi>l</mi>
<mo></mo>
<mi>N</mi>
<mo>+</mo>
<mi>Q</mi>
<mo>-</mo>
<mn>1</mn>
<mo>.</mo>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

<math display="block">
<mrow>
<mrow>
<mstyle mathvariant="normal">
<mrow>
<mi>T</mi>
<mi>r</mi>
</mrow>
</mstyle>
</mrow>
</mrow>
</math>
es el rastro y la daga denota conjugación hermitiana. Las matrices
<math display="block">
<mrow>
<munderover accent="true">
<mrow>
<mrow>
<mi mathvariant="script">X</mi>
</mrow>
</mrow>
<mrow></mrow>
<mrow>
<mo stretchy="false"></mo>
</mrow>
</munderover>
</mrow>
</math>
Y
<math display="block">
<mrow>
<msub>
<mrow>
<munderover accent="true">
<mrow>
<mrow>
<mi mathvariant="script">H</mi>
</mrow>
</mrow>
<mrow></mrow>
<mrow>
<mo stretchy="false"></mo>
</mrow>
</munderover>
</mrow>
<mrow>
<mi>k</mi>
<mi>l</mi>
</mrow>
</msub>
</mrow>
</math>
tienen tamaño
<math display="block">
<mrow>
<mo stretchy="false">(</mo>
<mi>M</mi>
<mo>+</mo>
<mn>2</mn>
<mo stretchy="false">(</mo>
<mi>P</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
<mo>×</mo>
<mo stretchy="false">(</mo>
<mi>N</mi>
<mo>+</mo>
<mn>2</mn>
<mo stretchy="false">(</mo>
<mi>Q</mi>
<mo>-</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo stretchy="false">)</mo>
</mrow>
</math>
y elementos distintos de cero dados por

<math display="block">
<mrow>
<munderover accent="true">
<mrow>
<mrow>
<mi mathvariant="script">X</mi>
</mrow>
</mrow>
<mrow></mrow>
<mrow>
<mo stretchy="false"></mo>
</mrow>
</munderover>
<mo stretchy="false">(</mo>
<mi>m</mi>
<mo>,</mo>
<mi>n</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow>
<mrow>
<mi mathvariant="script">X</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>m</mi>
<mo>-</mo>
<mi>P</mi>
<mo>+</mo>
<mn>1</mn>
<mo>,</mo>
<mi>n</mi>
<mo>-</mo>
<mi>Q</mi>
<mo>+</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>,</mo>
<mspace width="1em"></mspace>
<mtable>
<mtr>
<mtd>
<mrow>
<mrow>
<mi>P</mi>
<mo></mo>
<mi>m</mi>
<mo></mo>
<mi>M</mi>
<mo>+</mo>
<mi>P</mi>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mrow>
<mi>Q</mi>
<mo></mo>
<mi>n</mi>
<mo></mo>
<mi>N</mi>
<mo>+</mo>
<mi>Q</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

Y

<math display="block">
<mrow>
<msub>
<mrow>
<munderover accent="true">
<mrow>
<mrow>
<mi mathvariant="script">H</mi>
</mrow>
</mrow>
<mrow></mrow>
<mrow>
<mo stretchy="false"></mo>
</mrow>
</munderover>
</mrow>
<mrow>
<mi>k</mi>
<mi>l</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo>,</mo>
<mi>q</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mrow>
<mrow>
<mi mathvariant="script">H</mi>
</mrow>
</mrow>
<mo stretchy="false">(</mo>
<mi>p</mi>
<mo>-</mo>
<mi>k</mi>
<mo>+</mo>
<mn>1</mn>
<mo>,</mo>
<mi>q</mi>
<mo>-</mo>
<mi>l</mi>
<mo>+</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>,</mo>
<mspace width="1em"></mspace>
<mtable>
<mtr>
<mtd>
<mrow>
<mrow>
<mi>k</mi>
<mo></mo>
<mi>p</mi>
<mo></mo>
<mi>P</mi>
<mo>+</mo>
<mi>k</mi>
<mo>-</mo>
<mn>1</mn>
<mo>,</mo>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mrow>
<mi>l</mi>
<mo></mo>
<mi>q</mi>
<mo></mo>
<mi>Q</mi>
<mo>+</mo>
<mi>l</mi>
<mo>-</mo>
<mn>1</mn>
<mo>.</mo>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

Llamar es equivalente a este procedimiento para matrices complejas generales de tamaño arbitrario.xcorr2

Crear dos matrices complejas,

<math display="block">
<mrow>
<mrow>
<mi mathvariant="script">X</mi>
</mrow>
</mrow>
</math>
de tamaño
<math display="block">
<mrow>
<mn>7</mn>
<mo>×</mo>
<mn>2</mn>
<mn>2</mn>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mrow>
<mi mathvariant="script">H</mi>
</mrow>
</mrow>
</math>
de tamaño
<math display="block">
<mrow>
<mn>6</mn>
<mo>×</mo>
<mn>1</mn>
<mn>7</mn>
</mrow>
</math>
.

X = randn([7 22])+1j*randn([7 22]); H = randn([6 17])+1j*randn([6 17]);  [M,N] = size(X); m = 1:M; n = 1:N;  [P,Q] = size(H); p = 1:P; q = 1:Q;

Inicializar

<math display="block">
<mrow>
<munderover accent="true">
<mrow>
<mrow>
<mi mathvariant="script">X</mi>
</mrow>
</mrow>
<mrow></mrow>
<mrow>
<mo stretchy="false"></mo>
</mrow>
</munderover>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mrow>
<mi mathvariant="script">C</mi>
</mrow>
</mrow>
</math>
.

Xt = zeros([M+2*(P-1) N+2*(Q-1)]); Xt(m+P-1,n+Q-1) = X; C = zeros([M+P-1 N+Q-1]);

Calcular los elementos de

<math display="block">
<mrow>
<mrow>
<mi mathvariant="script">C</mi>
</mrow>
</mrow>
</math>
por bucle sobre
<math display="block">
<mrow>
<mi>k</mi>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mi>l</mi>
</mrow>
</math>
. Restablecer
<math display="block">
<mrow>
<msub>
<mrow>
<munderover accent="true">
<mrow>
<mrow>
<mi mathvariant="script">H</mi>
</mrow>
</mrow>
<mrow></mrow>
<mrow>
<mo stretchy="false"></mo>
</mrow>
</munderover>
</mrow>
<mrow>
<mi>k</mi>
<mi>l</mi>
</mrow>
</msub>
</mrow>
</math>
a cero en cada paso. Ahorre tiempo y memoria sumando productos de elementos en lugar de multiplicar y tomar el seguimiento.

for k = 1:M+P-1     for l = 1:N+Q-1         Hkl = zeros([M+2*(P-1) N+2*(Q-1)]);         Hkl(p+k-1,q+l-1) = H;         C(k,l) = sum(sum(Xt.*conj(Hkl)));     end end  max(max(abs(C-xcorr2(X,H))))
ans = 1.4648e-14 

La respuesta coincide con la precisión de la máquina con la salida de .xcorr2

Utilice la correlación cruzada para encontrar dónde cabe una sección de una imagen en su conjunto. La correlación cruzada le permite encontrar las regiones en las que dos señales se parecen más entre sí. Para señales bidimensionales, como imágenes, utilice .xcorr2

Cargue una imagen de prueba en blanco y negro en el espacio de trabajo. Muésquelo con .imagesc

load durer img = X; White = max(max(img));  imagesc(img) axis image off colormap gray title('Original')

Seleccione una sección rectangular de la imagen. Muestre la imagen más grande con la sección que falta.

x = 435; X = 535; szx = x:X;  y = 62; Y = 182; szy = y:Y;  Sect = img(szx,szy);  kimg = img; kimg(szx,szy) = White;  kumg = White*ones(size(img)); kumg(szx,szy) = Sect;  subplot(1,2,1) imagesc(kimg) axis image off colormap gray title('Image')  subplot(1,2,2) imagesc(kumg) axis image off colormap gray title('Section')

Se utiliza para encontrar dónde encaja la imagen pequeña en la imagen más grande.xcorr2 Restar el valor medio para que haya aproximadamente iguales números de valores negativos y positivos.

nimg = img-mean(mean(img)); nSec = nimg(szx,szy);  crr = xcorr2(nimg,nSec);

El máximo de la correlación cruzada corresponde a la ubicación estimada de la esquina inferior derecha de la sección. Se utiliza para convertir la ubicación unidimensional del máximo a coordenadas bidimensionales.ind2sub

[ssr,snd] = max(crr(:)); [ij,ji] = ind2sub(size(crr),snd);  figure plot(crr(:)) title('Cross-Correlation') hold on plot(snd,ssr,'or') hold off text(snd*1.05,ssr,'Maximum')

Coloque la imagen más pequeña dentro de la imagen más grande. Gire la imagen más pequeña para cumplir con la convención que MATLAB® utiliza para mostrar imágenes. Dibuja un rectángulo alrededor de él.

img(ij:-1:ij-size(Sect,1)+1,ji:-1:ji-size(Sect,2)+1) = rot90(Sect,2);  imagesc(img) axis image off colormap gray title('Reconstructed') hold on plot([y y Y Y y],[x X X x x],'r') hold off

Cambie una plantilla en una cantidad conocida y recupere el desplazamiento mediante la correlación cruzada.

Cree una plantilla en una matriz de 11 por 11. Cree una matriz de 22 por 22 y cambie la plantilla original por 8 a lo largo de la dimensión de fila y 6 a lo largo de la dimensión de columna.

template = 0.2*ones(11); template(6,3:9) = 0.6; template(3:9,6) = 0.6; offsetTemplate = 0.2*ones(22); offset = [8 6]; offsetTemplate((1:size(template,1))+offset(1), ...     (1:size(template,2))+offset(2)) = template;

Trazar las plantillas originales y cambiadas.

imagesc(offsetTemplate) colormap gray hold on imagesc(template) axis equal

Correlacione las dos matrices y encuentre el valor absoluto máximo de la correlación cruzada. Utilice la posición del valor absoluto máximo para determinar el desplazamiento en la plantilla. Compruebe el resultado con el cambio conocido.

cc = xcorr2(offsetTemplate,template); [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)
ans = logical
   1

El desplazamiento obtenido de la correlación cruzada es igual al desplazamiento de plantilla conocido en las dimensiones de fila y columna.

Este ejemplo requiere parallel Computing Toolbox™ software. Consulte para ver qué GPU son compatibles.GPU Support by Release (Parallel Computing Toolbox)

Cambie una plantilla en una cantidad conocida y recupere el desplazamiento mediante la correlación cruzada.

Cree una plantilla en una matriz de 11 por 11. Cree una matriz de 22 por 22 y cambie la plantilla original por 8 a lo largo de la dimensión de fila y 6 a lo largo de la dimensión de columna.

template = 0.2*ones(11);  template(6,3:9) = 0.6;    template(3:9,6) = 0.6; offsetTemplate = 0.2*ones(22);  offset = [8 6]; offsetTemplate((1:size(template,1))+offset(1), ...     (1:size(template,2))+offset(2)) = template;

Coloque las matrices de plantilla originales y cambiadas en la GPU mediante objetos.gpuArray

template = gpuArray(template); offsetTemplate = gpuArray(offsetTemplate);

Calcular la correlación cruzada en la GPU.

cc = xcorr2(offsetTemplate,template);

Devuelva el resultado al espacio de trabajo MATLAB® mediante .gather Utilice el valor absoluto máximo de la correlación cruzada para determinar el desplazamiento y compare el resultado con el desplazamiento conocido.

cc = gather(cc); [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)
ans = logical
   1

Argumentos de entrada

contraer todo

Matrices de entrada, especificadas como matrices u objetos.gpuArray

Consulte y para obtener más información sobre el uso con objetos.Run MATLAB Functions on a GPU (Parallel Computing Toolbox)GPU Support by Release (Parallel Computing Toolbox)xcorr2gpuArray (Parallel Computing Toolbox)

Ejemplo: especifica una superficie sinusoidal bidimensional.sin(2*pi*(0:9)'/10)*sin(2*pi*(0:13)/20)

Ejemplo: especifica una superficie sinusoidal bidimensional como ungpuArray(sin(2*pi*(0:9)'/10)*sin(2*pi*(0:13)/20)) gpuArray Objeto.

Tipos de datos: single | double
Soporte de números complejos:

Argumentos de salida

contraer todo

Matriz de correlación cruzada o autocorrelación 2-D, devuelta como una matriz o un objeto.gpuArray

Más acerca de

contraer todo

2-D Correlación Cruzada

La correlación cruzada 2D de una matriz -por-, y una matriz -por-, , es una matriz, , de tamaño + –1 por + –1.MNXPQHCMPNQ Sus elementos son dados por

C(k,l)=m=0M1n=0N1X(m,n)H¯(mk,nl),(P1)kM1,(Q1)lN1,

donde la barra sobre denota conjugación compleja.H

La matriz de salida, ( ), tiene índices de fila y columna negativos y positivos.Ck,l

  • Un índice de fila negativo corresponde a un desplazamiento hacia arriba de las filas de .H

  • Un índice de columna negativo corresponde a un desplazamiento hacia la izquierda de las columnas de .H

  • Un índice de fila positivo corresponde a un desplazamiento a la baja de las filas de .H

  • Un índice de columna positivo corresponde a un desplazamiento hacia la derecha de las columnas de .H

Para convertir los índices en forma, agregue el tamaño de : el elemento ( , ) corresponde al espacio de trabajo.MATLAB®HCklC(k+P,l+Q)

Por ejemplo, considere esta correlación cruzada 2-D:

X = ones(2,3); H = [1 2; 3 4; 5 6];  % H is 3 by 2 C = xcorr2(X,H)
C =      6    11    11     5     10    18    18     8      6    10    10     4      2     3     3     1

El elemento de la salida corresponde a (1–3,1–2) á (–2,–1) en la ecuación de definición, que utiliza la indexación de base cero.C(1,1)CC Para calcular el elemento, cambie dos filas hacia arriba y una columna a la izquierda.C(1,1)H En consecuencia, el único producto de la suma de correlación cruzada es .X(1,1)*H(3,2) = 6 Usando la ecuación definitoria, se obtiene

C(2,1)=m=01n=02X(m,n)H¯(m+2,n+1)=X(0,0)H¯(2,1)=1×6=6,

con todos los demás términos en la suma doble igual a cero.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Consulte también

| |

Introducido antes de R2006a