Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用相关系数的python中两幅图像之间的百分比差异_Matlab_Python 2.7_Numpy_Image Processing_Scipy - Fatal编程技术网

Matlab 使用相关系数的python中两幅图像之间的百分比差异

Matlab 使用相关系数的python中两幅图像之间的百分比差异,matlab,python-2.7,numpy,image-processing,scipy,Matlab,Python 2.7,Numpy,Image Processing,Scipy,我想比较两个图像块,如果它们完全相同,结果必须是1,如果它们匹配60%,答案必须是0.6 在Matlab中,我可以使用corr2命令来实现这一点,但在python中我找不到方法。我尝试了numpy.corrcoef但它返回一个矩阵,而scipy.signal.correlate2d返回相同的矩阵 这就是我尝试过的: import numpy as np import matplotlib.pyplot as plt from skimage.filter import threshold_ots

我想比较两个图像块,如果它们完全相同,结果必须是1,如果它们匹配60%,答案必须是0.6

在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]]
以下是我要比较的图像:


由于要逐像素比较,可以对展平的图像执行相关:

cm = np.corrcoef(a1.flat, a2.flat)
cm
包含对称相关矩阵,其中非对角元素是相关系数。你能搞定吗

r = cm[0, 1]
编辑: 使用相关性比较图像时存在问题。如果其中任何一个完全平坦(所有像素值相同),则相关性未定义

如果图像是二进制的,您可以简单地计算相等像素的百分比:

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

图像的大小是否相同?是的,它们的大小将相同。@EvilTak图像的大小与图像中不相同的像素数的百分比差异相同?@EvilTak是的,因为corr2在Matlab中返回,这仍然适用于彩色图像吗?或者仅针对灰度或二进制?使用这种方法,您将获得所有图像通道的平均相关性。如果这就是定义彩色图像相关性的方式,那么它应该会起作用。