Función corr2() de MATLAB

Ammar Ali 15 febrero 2024
Función corr2() de MATLAB

Este tutorial discutirá cómo encontrar la correlación entre dos imágenes usando la función corr2() en MATLAB.

Función corr2() de MATLAB

La función corr2() de MATLAB se utiliza para encontrar la correlación entre dos imágenes o matrices. La correlación da información sobre la similitud entre dos imágenes.

Si la correlación es 1, las dos imágenes son idénticas, y si el valor es menor o igual a cero, las dos imágenes son opuestas. En su mayoría, la función corr2() devolverá un valor de coma flotante entre 0 y 1, y este valor muestra la similitud entre las dos imágenes.

Si la función corr2() devuelve 0,5, las dos imágenes tienen un 50 por ciento de similitud.

La sintaxis básica de la función corr2() se da a continuación:

correlation_value = corr2(Image_1, Image_2)

La sintaxis anterior devolverá un valor numérico o el coeficiente de correlación, que muestra la correlación entre las dos imágenes o matrices de entrada. Las entradas de la función corr2() deben ser arreglos o matrices 2D y tener el mismo tamaño.

Por ejemplo, encontremos la correlación entre dos imágenes usando la función corr2() en MATLAB. Vea el código a continuación.

clc
clear

Image = imread('pout.tif');
Filtered_image = medfilt2(Image);
Correlation = corr2(Image,Filtered_image)

Producción :

Correlation =

    0.9959

En el código anterior, usamos la función imread() para leer una imagen, y luego usamos la función medfilt2() para aplicar el filtro mediano a la imagen. Usamos la función corr2() para encontrar la correlación entre la imagen de entrada y su versión filtrada, y el resultado se muestra en la salida.

El código anterior muestra que las dos imágenes son 99 por ciento similares. Si encontramos la correlación entre dos imágenes iguales, la función corr2() devolverá 1, lo que significa que las dos imágenes son 100 por ciento similares.

Ahora, hablemos del algoritmo utilizado para encontrar la correlación entre dos imágenes. El algoritmo compara la intensidad de los píxeles presentes en las dos imágenes para encontrar la correlación.

El algoritmo comenzará desde el primer píxel en ambas imágenes y encontrará su diferencia, continuando hasta el píxel final. Luego toma la media de todas las diferencias en las intensidades de los píxeles para encontrar la correlación.

Los píxeles que se comparan tienen la misma posición en la imagen, lo que significa que el primer píxel de la primera imagen solo se comparará con el primer píxel de la segunda imagen y así sucesivamente.

La siguiente imagen muestra la fórmula que se utiliza para encontrar la correlación entre las dos imágenes:

Fórmula de correlación

En la fórmula anterior, m y n representan las filas y columnas; como una imagen es como una matriz 2D, tenemos que usar filas y columnas para obtener cada píxel. Los caracteres con barras representan la media de la matriz de la imagen.

En MATLAB, podemos escribir esta fórmula usando las funciones sum() y mean2(). Vea el código a continuación.

Image_a = Image_a - mean2(Image_a);
Image_b = Image_b - mean2(Image_b);
correlation = sum(sum(Image_a.*Image_b))/sqrt(sum(sum(Image_a.*Image_a))*sum(sum(Image_b.*Image_b)))

La función mean2() se usa para encontrar la media de toda la matriz de la imagen junto con columnas y filas. La función mean2() es igual a la función mean(mean()).

Si usamos una sola función mean(), encontrará la media de cada columna y devolverá un vector que contiene los valores medios de cada columna presente en una matriz. Entonces, tenemos que usar la función mean() nuevamente para encontrar un valor medio único para toda la matriz de la imagen.

La función sum() se utiliza para encontrar la sumatoria. También se usa dos veces porque una sola función sum() solo calcula la suma en cada columna, pero queremos encontrar la suma de toda la matriz.

La función sqrt() se usa para encontrar la raíz cuadrada del valor dado.

También podemos usar la fórmula anterior en lugar de la función corr2() para encontrar la correlación entre dos imágenes o matrices. Por ejemplo, usemos la fórmula anterior para encontrar la correlación entre dos imágenes.

Vea el código a continuación.

clc
clear

Image_a = imread('pout.tif');
Image_b = medfilt2(Image_a);
Image_a = Image_a - mean2(Image_a);
Image_b = Image_b - mean2(Image_b);
correlation = sum(sum(Image_a.*Image_b))/sqrt(sum(sum(Image_a.*Image_a))*sum(sum(Image_b.*Image_b)))

Producción :

correlation =

    0.9983

Podemos ver en la salida que la correlación es aproximadamente igual a la correlación devuelta por la función corr2(). Deberíamos usar la función corr2() porque verifica los formatos de archivo de entrada, el tamaño y otros errores.

Si una imagen se rota o se traslada, no podemos usar la función corr2() para comparar dos imágenes porque la ubicación de los píxeles en la imagen rotada cambiará. Como se discutió anteriormente, la función corr2() compara píxeles en la misma ubicación en ambas imágenes; no podemos usarlo para encontrar la correlación entre dos imágenes cuyas ubicaciones de píxeles se han cambiado.

Por ejemplo, encontremos la correlación entre una imagen y su versión rotada usando la función corr2(). Vea el código a continuación.

clc
clear

Image = imread('pout.tif');
flipped_image = flip(Image);
Correlation = corr2(Image,flipped_image)

Producción :

Correlation =

   -0.1047

En el código anterior, usamos la función flip() para voltear la imagen dada. Podemos ver en el resultado anterior que la correlación muestra que las dos imágenes de entrada no tienen similitudes. Aún así, sabemos que ambas imágenes son iguales; la única diferencia es que la segunda imagen está volteada.

Por lo tanto, la función corr2() no se puede utilizar para comparar dos imágenes en las que se han cambiado las ubicaciones de los píxeles. En este caso, existen otros métodos para comparar dos imágenes, como usar inteligencia artificial.

Consulte este enlace para obtener más detalles sobre la función corr2().

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artículo relacionado - MATLAB Image