首页 > 解决方案 > 用于图像比较的 SSIM:图像形状问题

问题描述

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

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

标签: pythonimageimage-processingscikit-image

解决方案


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

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


推荐阅读