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.
Correlación cruzada 2-D
Cree dos matrices y .M1
M2
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.M1
M2
En términos de retrasos, la matriz resultante es
Por ejemplo, calcule el elemento C(3,5)
M2
Alinee las dos matrices para que sus elementos coincidan.(1,1)
Esta colocación corresponde a M2
Ahora está en la parte superior de la matriz .M2
M1(1:3,3:5)
Calcular los productos elemento por elemento y sumarlos. La respuesta debe ser
[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
Y
Llamar es equivalente a este procedimiento para matrices complejas generales de tamaño arbitrario.xcorr2
Crear dos matrices complejas,
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
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
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
a
, b
— Matrices de entradagpuArray
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)xcorr2
gpuArray
(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))
Objeto.gpuArray
Tipos de datos: single
| double
Soporte de números complejos: Sí
c
— Matriz de correlación cruzada o autocorrelación 2-DgpuArray
Matriz de correlación cruzada o autocorrelación 2-D, devuelta como una matriz o un objeto.gpuArray
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
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
con todos los demás términos en la suma doble igual a cero.
Esta función es totalmente compatible con matrices de GPU. Para obtener más información, consulte .Run MATLAB Functions on a GPU (Parallel Computing Toolbox)
Existe una versión modificada de este ejemplo en su sistema. ¿Prefiere abrir esta versión?
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.