我有两个矩阵,我已经转换成灰度图像,我想找到它们之间的平均SSIM值(python)

我有两个矩阵,我已经转换成灰度图像,我想找到它们之间的平均SSIM值(python),python,numpy,grayscale,ssim,Python,Numpy,Grayscale,Ssim,例如,我有: X = [[1,2,3],[4,5,6]] Y = [[1,4,7],[5,5,1]] a=np.array(X) grayA=(a-np.amin(a))/(np.amax(a)-np.amin(a)) b=np.array(Y) grayB=(b-np.amin(b))/(np.amax(b)-np.amin(b)) 然而,当我 compare_ssim(grayA, grayB) 我得到了错误 ValueError: win_size exceeds image ex

例如,我有:

X = [[1,2,3],[4,5,6]]
Y = [[1,4,7],[5,5,1]]

a=np.array(X)
grayA=(a-np.amin(a))/(np.amax(a)-np.amin(a))

b=np.array(Y)
grayB=(b-np.amin(b))/(np.amax(b)-np.amin(b))
然而,当我

compare_ssim(grayA, grayB)
我得到了错误

ValueError: win_size exceeds image extent.  If the input is a multichannel (color) image, set multichannel=True.
我试过了

compare_ssim(grayA, grayB, multichannel = True)

但是我仍然得到相同的错误。

产生错误是因为win_size的默认值是7和

np.any((np.asarray(grayA.shape)-win\u size)<0)
要解决此问题,应将
win_size
定义为奇数,并小于任何图像尺寸。因此,在您的示例中,它应该是
win\u size=1

但是,当win_size等于1时,您需要设置
use_sample_convariance=False
,因为如果不是,代码需要除以0。因此,您的示例可以使用

compare\u ssim(灰度A、灰度B、win\u size=1、use\u sample\u convariance=False)
如果您的图像是7x7或更大,问题就会消失。例如:

X=np.random.rand(7,7)
Y=np.rand.rand(7,7)
比较_ssim(X,Y)