2016-01-13 129 views
1

我想比較兩個圖像塊,如果它們完全相同,結果必須是1,如果它們匹配60%,則答案必須爲0.6。使用相關係數在Python中的兩幅圖像之間的百分比差異

在Matlab中,我可以使用corr2命令來做到這一點,但在Python中我找不到方法。我試過numpy.corrcoef,但它返回一個矩陣,並且scipy.signal.correlate2d返回相同。

這是我曾嘗試:

import numpy as np 
import matplotlib.pyplot as plt 
from skimage.filter import threshold_otsu 
import matplotlib.cm as cm 
import Image 
import scipy 
from PIL import Image as im 
fname = 'testi.jpg' 
image = Image.open(fname).convert("L") 
arr = np.asarray(image) 
global_thresh = threshold_otsu(arr) 

global_otsu = arr >= global_thresh 
global_otsu = np.invert(global_otsu).astype(int) 
a1 = global_otsu[80:150,1350:1350+160] 
fname1 = 'testi2.jpg' 
image1 = Image.open(fname1).convert("L") 
arr1 = np.asarray(image1) 
global_thresh1 = threshold_otsu(arr1) 

global_otsu1 = arr1 >= global_thresh1 
global_otsu1 = np.invert(global_otsu1).astype(int) 
a2 = global_otsu1[80:150,1350:1350+160] 

co = scipy.signal.correlate2d(a1,a2) 

plt.gray() 
plt.subplot(121) 
plt.imshow(a1) 
plt.subplot(122) 
plt.imshow(a2) 

plt.show() 

,其結果是:

[[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
..., 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0]] 

這些都是我要比較的圖像:

images that i want to compare

+0

將是大小相同的圖片嗎? – EvilTak

+0

是的,他們將是相同的大小。 –

+0

@EvilTak圖像的尺寸相同 –

回答

1

由於您想要逐個像素進行比較,您可以在展平的i上執行關聯法師,:

cm = np.corrcoef(a1.flat, a2.flat) 

cm包含對稱相關矩陣,其中的非對角元素是相關係數。您可以通過

r = cm[0, 1] 

編輯得到它: 有使用相關比較圖像的問題。如果它們中的任何一個完全平坦(所有像素都是相同的值),則相關性是不確定的。

如果圖像是二進制的,你可以而不是簡單地計算出相同的像素percantage:

agreement = np.sum(a == b)/a.size 
+0

真棒兄弟你讓我的一天非常感謝。 –

+0

好聽。我已經添加了一些信息給你可能會覺得有用的答案。 – kazemakase

相關問題