SSIM для сравнения изображений: проблема с формой изображения - PullRequest
0 голосов
/ 12 марта 2020

Я рассчитываю индекс структурного сходства между двумя изображениями. Я не понимаю, какой должна быть размерность. Оба изображения (эталонное и целевое) являются изображениями 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

Какой из двух результатов правильный и почему? Документация ничего не говорит об этом, так как это, вероятно, концептуальная проблема.

1 Ответ

2 голосов
/ 12 марта 2020

Второй вариант правильный, если у вас есть изображение квадратной формы, а не очень длинное, тонкое.

SSIM учитывает соседние пиксели (для маскировки яркости и цветности, а также для идентификации структур). Изображения могут быть любой формы, но если вы скажете алгоритму, что ваша форма имеет размер 256 * 256 на 1 пиксель, то вертикальные структуры не будут учитываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...