MATLAB corr2()-Funktion
In diesem Tutorial wird erläutert, wie Sie die Korrelation zwischen zwei Bildern mithilfe der Funktion corr2()
in MATLAB finden.
MATLAB-Funktion corr2()
Die Funktion corr2()
von MATLAB wird verwendet, um die Korrelation zwischen zwei Bildern oder Arrays zu finden. Die Korrelation gibt Auskunft über die Ähnlichkeit zwischen zwei Bildern.
Wenn die Korrelation 1 ist, sind die beiden Bilder identisch, und wenn der Wert kleiner oder gleich Null ist, sind die beiden Bilder entgegengesetzt. Meistens gibt die Funktion corr2()
einen Gleitkommawert zwischen 0 und 1 zurück, und dieser Wert zeigt die Ähnlichkeit zwischen den beiden Bildern.
Liefert die Funktion corr2()
0.5 zurück, sind die beiden Bilder zu 50 Prozent ähnlich.
Die grundlegende Syntax der Funktion corr2()
ist unten angegeben:
correlation_value = corr2(Image_1, Image_2)
Die obige Syntax gibt einen numerischen Wert oder den Korrelationskoeffizienten zurück, der die Korrelation zwischen den beiden Eingabebildern oder Arrays zeigt. Eingänge der Funktion corr2()
sollten 2D-Arrays oder Matrizen sein und die gleiche Grösse haben.
Lassen Sie uns zum Beispiel die Korrelation zwischen zwei Bildern mit der Funktion corr2()
in MATLAB finden. Siehe Code unten.
clc
clear
Image = imread('pout.tif');
Filtered_image = medfilt2(Image);
Correlation = corr2(Image,Filtered_image)
Ausgabe:
Correlation =
0.9959
Im obigen Code haben wir die Funktion imread()
verwendet, um ein Bild zu lesen, und dann haben wir die Funktion medfilt2()
verwendet, um den Medianfilter auf das Bild anzuwenden. Wir haben die Funktion corr2()
verwendet, um die Korrelation zwischen dem Eingabebild und seiner gefilterten Version zu finden, und das Ergebnis wird in der Ausgabe angezeigt.
Der obige Code zeigt, dass die beiden Bilder zu 99 Prozent ähnlich sind. Wenn wir die Korrelation zwischen zwei gleichen Bildern finden, gibt die Funktion corr2()
1 zurück, was bedeutet, dass die beiden Bilder zu 100 Prozent ähnlich sind.
Lassen Sie uns nun über den Algorithmus sprechen, der verwendet wird, um die Korrelation zwischen zwei Bildern zu finden. Der Algorithmus vergleicht die Intensität der in den beiden Bildern vorhandenen Pixel, um die Korrelation zu finden.
Der Algorithmus beginnt beim ersten Pixel in beiden Bildern und findet ihren Unterschied, bis zum letzten Pixel. Dann nimmt es den Mittelwert aller Unterschiede in den Pixelintensitäten, um die Korrelation zu finden.
Die zu vergleichenden Pixel haben die gleiche Position im Bild, was bedeutet, dass das erste Pixel des ersten Bildes nur mit dem ersten Pixel des zweiten Bildes verglichen wird und so weiter.
Das folgende Bild zeigt die Formel, die verwendet wird, um die Korrelation zwischen den beiden Bildern zu finden:
In der obigen Formel stehen m
und n
für die Zeilen und Spalten; Da ein Bild wie eine 2D-Matrix ist, müssen wir die Zeilen und Spalten verwenden, um jedes Pixel zu erhalten. Die Zeichen mit Balken repräsentieren den Mittelwert der Bildmatrix.
In MATLAB können wir diese Formel mit den Funktionen sum()
und mean2()
schreiben. Siehe Code unten.
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)))
Die Funktion mean2()
wird verwendet, um den Mittelwert der gesamten Bildmatrix zusammen mit Spalten und Zeilen zu finden. Die Funktion mean2()
ist gleich der Funktion mean(mean())
.
Wenn wir eine einzelne mean()
-Funktion verwenden, findet sie den Mittelwert jeder Spalte und gibt einen Vektor zurück, der die Mittelwerte jeder Spalte enthält, die in einer Matrix vorhanden ist. Wir müssen also wieder die Funktion mean()
verwenden, um einen einzigen Mittelwert für die gesamte Bildmatrix zu finden.
Die Funktion sum()
wird verwendet, um die Summe zu finden. Es wird auch zweimal verwendet, weil eine einzige sum()
-Funktion nur die Summe in jeder Spalte berechnet, wir aber die Summe der gesamten Matrix finden wollen.
Die Funktion sqrt()
wird verwendet, um die Quadratwurzel des angegebenen Werts zu finden.
Wir können auch die obige Formel anstelle der Funktion corr2()
verwenden, um die Korrelation zwischen zwei Bildern oder Arrays zu finden. Lassen Sie uns zum Beispiel die obige Formel verwenden, um die Korrelation zwischen zwei Bildern zu finden.
Siehe Code unten.
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)))
Ausgabe:
correlation =
0.9983
Wir können in der Ausgabe sehen, dass die Korrelation ungefähr gleich der Korrelation ist, die von der Funktion corr2()
zurückgegeben wird. Wir sollten die Funktion corr2()
verwenden, da diese Eingabedateiformate, -größe und andere Fehler überprüft.
Wenn ein Bild gedreht oder verschoben wird, können wir die Funktion corr2()
nicht verwenden, um zwei Bilder zu vergleichen, da die Pixelposition im gedrehten Bild geändert wird. Wie oben besprochen, vergleicht die Funktion corr2()
Pixel an derselben Stelle in beiden Bildern; Wir können es nicht verwenden, um die Korrelation zwischen zwei Bildern zu finden, deren Pixelpositionen geändert wurden.
Lassen Sie uns zum Beispiel die Korrelation zwischen einem Bild und seiner gedrehten Version mit der Funktion corr2()
finden. Siehe Code unten.
clc
clear
Image = imread('pout.tif');
flipped_image = flip(Image);
Correlation = corr2(Image,flipped_image)
Ausgabe:
Correlation =
-0.1047
Im obigen Code haben wir die Funktion flip()
verwendet, um das angegebene Bild zu spiegeln. Wir können in der obigen Ausgabe sehen, dass die Korrelation zeigt, dass die beiden Eingabebilder keine Ähnlichkeiten aufweisen. Dennoch wissen wir, dass beide Bilder gleich sind; Der einzige Unterschied besteht darin, dass das zweite Bild gespiegelt ist.
Daher kann die Funktion corr2()
nicht verwendet werden, um zwei Bilder zu vergleichen, in denen die Pixelpositionen geändert wurden. In diesem Fall gibt es andere Methoden, um zwei Bilder zu vergleichen, z. B. die Verwendung künstlicher Intelligenz.
Überprüfen Sie diesen Link für weitere Details über die Funktion corr2()
.