我想在比较python中的两个图像时获得SSIM

2024-09-27 09:22:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用“compare_ssim”函数。我现在有两个x,y坐标的2xN矩阵,第一行是所有的x坐标,第二行是所有的y坐标。如何计算这两幅图像的SSIM(如果有方法的话)

例如,我有:

X = np.array([[1,2,3], [4,5,6]])
Y = np.array([[3,4,5],[5,6,7]])

compare_ssim(X,Y)

但是我得到了错误

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

我不确定我是否缺少一个参数,或者我是否应该以这样一种方式转换矩阵,以使这个函数工作。或者如果有一种方法,我应该把我的坐标转换成灰度矩阵?对于函数参数的矩阵应该是什么样子,我有点困惑。我知道它们应该是ndarray,但是类型(Y)和类型(Y)都是numpy.ndarray


Tags: 方法函数图像image类型错误np矩阵
1条回答
网友
1楼 · 发布于 2024-09-27 09:22:25

因为您没有提到您正在使用的框架/库,所以我假设您正在使用skimage的compare_ssim

问题中的错误是由于输入的形状造成的。您可以找到更多详细信息here

TL;DR:compare_ssim希望图像具有(H、W、C)维度,但您的输入图像具有(2、3)维度。因此,函数混淆了将哪个维度视为通道维度。当multichannel=True时,最后一个维度被视为通道维度

您的代码有3个关键问题

  1. 比较\u图像需要图像作为输入。所以你们的X和Y矩阵应该是(H,W,C)维而不是(2,3)

  2. 它们应该是浮点数据类型

下面我展示了一些演示代码(注意:自skimage v1.7以来,compare_ssim已移至skimage.metrics.structural_similarity)


import numpy as np  
from skimage.metrics import structural_similarity

img1 = np.random.randint(0, 255, size=(200, 200, 3)).astype(np.float32)
img2 = np.random.randint(0, 255, size=(200, 200, 3)).astype(np.float32)

ssim_score = structural_similarity(img1, img2, multichannel=True) #score: 0.0018769083894301646

ssim_score = structural_similarity(img1, img1, multichannel=True) #score: 1.0

相关问题 更多 >

    热门问题