2016-01-13 73 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

相关问题