Fonction MATLAB corr2()
Ce tutoriel discutera de la recherche de la corrélation entre deux images à l’aide de la fonction corr2()
dans MATLAB.
Fonction MATLAB corr2()
La fonction corr2()
de MATLAB permet de trouver la corrélation entre deux images ou tableaux. La corrélation donne des informations sur la similarité entre deux images.
Si la corrélation vaut 1, les deux images sont identiques, et si la valeur est inférieure ou égale à zéro, les deux images sont opposées. La plupart du temps, la fonction corr2()
renverra une valeur à virgule flottante entre 0 et 1, et cette valeur montre la similitude entre les deux images.
Si la fonction corr2()
renvoie 0,5, les deux images ont 50 % de similitude.
La syntaxe de base de la fonction corr2()
est donnée ci-dessous :
correlation_value = corr2(Image_1, Image_2)
La syntaxe ci-dessus renverra une valeur numérique ou le coefficient de corrélation, montrant la corrélation entre les deux images ou tableaux d’entrée. Les entrées de la fonction corr2()
doivent être des tableaux ou des matrices 2D et avoir la même taille.
Par exemple, trouvons la corrélation entre deux images en utilisant la fonction corr2()
dans MATLAB. Voir le code ci-dessous.
clc
clear
Image = imread('pout.tif');
Filtered_image = medfilt2(Image);
Correlation = corr2(Image,Filtered_image)
Production:
Correlation =
0.9959
Dans le code ci-dessus, nous avons utilisé la fonction imread()
pour lire une image, puis nous avons utilisé la fonction medfilt2()
pour appliquer le filtre médian à l’image. Nous avons utilisé la fonction corr2()
pour trouver la corrélation entre l’image d’entrée et sa version filtrée, et le résultat est affiché dans la sortie.
Le code ci-dessus montre que les deux images sont similaires à 99 %. Si nous trouvons la corrélation entre deux images identiques, la fonction corr2()
renverra 1, ce qui signifie que les deux images sont similaires à 100 %.
Parlons maintenant de l’algorithme utilisé pour trouver la corrélation entre deux images. L’algorithme compare l’intensité des pixels présents dans les deux images pour trouver la corrélation.
L’algorithme commencera à partir du premier pixel des deux images et trouvera leur différence, en continuant jusqu’au dernier pixel. Ensuite, il prend la moyenne de toutes les différences d’intensité des pixels pour trouver la corrélation.
Les pixels comparés ont la même position dans l’image, ce qui signifie que le premier pixel de la première image ne sera comparé qu’au premier pixel de la deuxième image et ainsi de suite.
L’image ci-dessous montre la formule utilisée pour trouver la corrélation entre les deux images :
Dans la formule ci-dessus, m
et n
représentent les lignes et les colonnes ; parce qu’une image est comme une matrice 2D, nous devons utiliser les lignes et les colonnes pour obtenir chaque pixel. Les caractères avec des barres représentent la moyenne de la matrice de l’image.
Dans MATLAB, nous pouvons écrire cette formule en utilisant les fonctions sum()
et mean2()
. Voir le code ci-dessous.
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 fonction mean2()
est utilisée pour trouver la moyenne de toute la matrice de l’image avec les colonnes et les lignes. La fonction mean2()
est égale à la fonction mean(mean())
.
Si nous utilisons une seule fonction mean()
, elle trouvera la moyenne de chaque colonne et retournera un vecteur contenant les valeurs moyennes de chaque colonne présente dans une matrice. Nous devons donc utiliser à nouveau la fonction mean()
pour trouver une seule valeur moyenne pour toute la matrice de l’image.
La fonction sum()
est utilisée pour trouver la sommation. Elle est aussi utilisée deux fois car une seule fonction sum()
ne calcule que la somme de chaque colonne, mais on veut trouver la somme de toute la matrice.
La fonction sqrt()
est utilisée pour trouver la racine carrée de la valeur donnée.
Nous pouvons également utiliser la formule ci-dessus au lieu de la fonction corr2()
pour trouver la corrélation entre deux images ou tableaux. Par exemple, utilisons la formule ci-dessus pour trouver la corrélation entre deux images.
Voir le code ci-dessous.
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)))
Production:
correlation =
0.9983
Nous pouvons voir dans la sortie que la corrélation est approximativement égale à la corrélation renvoyée par la fonction corr2()
. Nous devrions utiliser la fonction corr2()
car elle vérifie les formats de fichier d’entrée, la taille et d’autres erreurs.
Si une image est pivotée ou translatée, nous ne pouvons pas utiliser la fonction corr2()
pour comparer deux images car l’emplacement des pixels dans l’image pivotée sera modifié. Comme discuté ci-dessus, la fonction corr2()
compare les pixels au même emplacement dans les deux images ; nous ne pouvons pas l’utiliser pour trouver la corrélation entre deux images dont les emplacements de pixels ont été modifiés.
Par exemple, trouvons la corrélation entre une image et sa version pivotée à l’aide de la fonction corr2()
. Voir le code ci-dessous.
clc
clear
Image = imread('pout.tif');
flipped_image = flip(Image);
Correlation = corr2(Image,flipped_image)
Production:
Correlation =
-0.1047
Dans le code ci-dessus, nous avons utilisé la fonction flip()
pour retourner l’image donnée. Nous pouvons voir dans la sortie ci-dessus que la corrélation montre que les deux images d’entrée n’ont aucune similitude. Pourtant, nous savons que les deux images sont les mêmes; la seule différence est que la deuxième image est inversée.
Ainsi, la fonction corr2()
ne peut pas être utilisée pour comparer deux images dans lesquelles les emplacements des pixels ont été modifiés. Dans ce cas, d’autres méthodes existent pour comparer deux images, comme utiliser l’intelligence artificielle.
Consultez ce lien pour plus de détails sur la fonction corr2()
.