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 equivale 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 cuanto a los 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>

Como 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) Calcule los productos elemento por elemento y resumirlos. 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 

Verifique el resultado usando.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 el 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 los 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>

La llamada equivale a este procedimiento para matrices complejas generales de tamaño arbitrario.xcorr2

Cree 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]);

Calcule los elementos de

<math display="block">
<mrow>
<mrow>
<mi mathvariant="script">C</mi>
</mrow>
</mrow>
</math>
haciendo un 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 multiplicarlos y tomar el rastro.

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 encaja una sección de una imagen en el conjunto. La correlación cruzada le permite encontrar las regiones en las que las dos señales se asemejan entre sí. Para señales bidimensionales, como imágenes, uso.xcorr2

Cargue una imagen de prueba en blanco y negro en el espacio de trabajo. Mostrarlo 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. Visualice 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 usa para encontrar Dónde encaja la imagen pequeña en la imagen más grande.xcorr2 Reste el valor medio para que haya aproximadamente el mismo número 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 de las coordenadas máximas a 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

Desplace una plantilla por una cantidad conocida y recupere el cambio mediante correlación cruzada.

Cree una plantilla en una matriz de 11 por 11. Cree una matriz de 22 por 22 y desplace la plantilla original por 8 a lo largo de la cota de fila y 6 a lo largo de la cota 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;

Trace las plantillas originales y desplazadas.

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 equivale al cambio de plantilla conocido en las cotas de fila y columna.

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

Desplace una plantilla por una cantidad conocida y recupere el cambio mediante correlación cruzada.

Cree una plantilla en una matriz de 11 por 11. Cree una matriz de 22 por 22 y desplace la plantilla original por 8 a lo largo de la cota de fila y 6 a lo largo de la cota 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 plantillas originales y desplazadas en la GPU utilizando objetos.gpuArray

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

Calcule la correlación cruzada en la GPU.

cc = xcorr2(offsetTemplate,template);

Devuelva el resultado al espacio de trabajo de MATLAB® utilizando.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

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

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

Más acerca de

contraer todo

Correlación cruzada 2-D

La correlación cruzada 2-D de una-por-matriz, y a-por-Matrix,, 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 más denota una 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 izquierdos de las columnas de.H

  • Un índice de fila positivo corresponde a un desplazamiento descendente 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 en el área 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 definitoria, que utiliza la indexación basada en cero.C(1,1)CC Para calcular el elemento, desplace dos filas hacia arriba y una columna a la izquierda.C(1,1)H En consecuencia, el único producto en la suma de la correlación cruzada es.X(1,1)*H(3,2) = 6 Utilizando la ecuación definitoria, obtendrá

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