用于图像比较的 SSIM:图像形状问题

SSIM for image comparison: issue with image shape

我正在计算两个图像之间的结构相似性指数。我不明白维度应该是什么。两个图像(参考和目标)都是 RGB 图像。

如果我将图像整形为 (256*256, 3),我得到:

    ref = Image.open('path1').convert("RGB")
    ref_array = np.array(ref).reshape(256*256, 3)
    print(ref_array.shape)    # (65536, 3)
    img = Image.open('path2').convert("RGB")
    img_array = np.array(img).reshape(256*256, 3)
    print(img_array.shape)    # (65536, 3)

    ssim = compare_ssim(ref_array,img_array,multichannel=True,data_range=255)

结果是0.0786

另一方面,如果我重塑为 (256, 256, 3):

    ref = Image.open('path1').convert("RGB")
    ref_array = np.array(ref)
    print(ref_array.shape)    # (256, 256, 3)
    img = Image.open('path2').convert("RGB")
    img_array = np.array(img)
    print(img_array.shape)    # (256, 256, 3)

    ssim = compare_ssim(ref_array, img_array, multichannel=True, data_range=255)

结果是0.0583

这两个结果中哪个是正确的,为什么?文档对此没有任何说明,因为这可能是一个概念性问题。

第二个是正确的,假设你有一个方形的图像而不是一个非常细长的图像。

SSIM 将相邻像素考虑在内(用于亮度和色度掩蔽和识别结构)。图像可以是任何形状,但如果你告诉算法你的形状是 256*256 x 1 像素的形状,那么垂直结构将不会被考虑在内。