MATLAB corr2() 函式
本教程將討論使用 MATLAB 中的 corr2()
函式查詢兩個影象之間的相關性。
MATLAB corr2()
函式
MATLAB 的 corr2()
函式用於查詢兩個影象或陣列之間的相關性。相關性給出了關於兩個影象之間的相似性的資訊。
如果相關性為 1,則兩幅影象相同,如果該值小於或等於 0,則兩幅影象相反。大多數情況下,corr2()
函式會返回一個介於 0 到 1 之間的浮點值,該值表示兩個影象之間的相似性。
如果 corr2()
函式返回 0.5,則兩幅影象的相似度為 50%。
corr2()
函式的基本語法如下:
correlation_value = corr2(Image_1, Image_2)
上述語法將返回一個數值或相關係數,顯示兩個輸入影象或陣列之間的相關性。corr2()
函式的輸入應該是二維陣列或矩陣並且具有相同的大小。
例如,讓我們使用 MATLAB 中的 corr2()
函式來查詢兩個影象之間的相關性。請參閱下面的程式碼。
clc
clear
Image = imread('pout.tif');
Filtered_image = medfilt2(Image);
Correlation = corr2(Image,Filtered_image)
輸出:
Correlation =
0.9959
在上面的程式碼中,我們使用 imread()
函式讀取影象,然後使用 medfilt2()
函式對影象應用中值濾波器。我們使用 corr2()
函式來查詢輸入影象與其過濾版本之間的相關性,結果顯示在輸出中。
上面的程式碼表明這兩張圖片有 99% 的相似度。如果我們發現兩個相同影象之間的相關性,corr2()
函式將返回 1,這意味著這兩個影象是 100% 相似的。
現在,讓我們談談用於查詢兩幅影象之間相關性的演算法。該演算法比較兩個影象中存在的畫素的強度以找到相關性。
該演算法將從兩個影象中的第一個畫素開始並找到它們的差異,一直持續到最後一個畫素。然後取畫素強度中所有差異的平均值來找到相關性。
被比較的畫素在影象中的位置相同,這意味著第一張影象的第一個畫素只會與第二張影象的第一個畫素進行比較,依此類推。
下圖顯示了用於查詢兩個影象之間相關性的公式:
上式中,m
和 n
代表行和列;因為影象就像一個二維矩陣,我們必須使用行和列來獲取每個畫素。帶條的字元代表影象矩陣的平均值。
在 MATLAB 中,我們可以使用 sum()
和 mean2()
函式編寫此公式。請參閱下面的程式碼。
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)))
mean2()
函式用於查詢整個影象矩陣以及列和行的平均值。mean2()
函式等於 mean(mean())
函式。
如果我們使用單個 mean()
函式,它將找到每一列的平均值,並返回一個向量,該向量包含矩陣中存在的每一列的平均值。因此,我們必須再次使用 mean()
函式來找到整個影象矩陣的單個平均值。
sum()
函式用於求和。它也被使用了兩次,因為單個 sum()
函式只計算每一列的總和,但我們想要找到整個矩陣的總和。
sqrt()
函式用於求給定值的平方根。
我們也可以使用上面的公式代替 corr2()
函式來查詢兩個影象或陣列之間的相關性。例如,讓我們使用上面的公式來找到兩張影象之間的相關性。
請參閱下面的程式碼。
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)))
輸出:
correlation =
0.9983
我們可以在輸出中看到相關性大約等於 corr2()
函式返回的相關性。我們應該使用 corr2()
函式,因為它會檢查輸入檔案格式、大小和其他錯誤。
如果一張影象被旋轉或平移,我們不能使用 corr2()
函式來比較兩張影象,因為旋轉影象中的畫素位置會改變。如上所述,corr2()
函式比較兩個影象中相同位置的畫素;我們不能使用它來查詢畫素位置已更改的兩幅影象之間的相關性。
例如,讓我們使用 corr2()
函式查詢影象與其旋轉版本之間的相關性。請參閱下面的程式碼。
clc
clear
Image = imread('pout.tif');
flipped_image = flip(Image);
Correlation = corr2(Image,flipped_image)
輸出:
Correlation =
-0.1047
在上面的程式碼中,我們使用 flip()
函式來翻轉給定的影象。我們可以在上面的輸出中看到,相關性表明兩個輸入影象沒有任何相似之處。儘管如此,我們知道這兩個影象是相同的。唯一的區別是第二張影象被翻轉了。
因此,corr2()
函式不能用於比較兩個畫素位置已更改的影象。在這種情況下,存在其他方法來比較兩個影象,例如使用人工智慧。
檢視此連結以獲取有關 corr2()
函式的更多詳細資訊。