Как сделать матрицу сравнения изображений, показывающую различия между изображениями - PullRequest
0 голосов
/ 23 октября 2019

У меня есть 5 изображений, которые я хочу создать матрицу, которая сравнивает разные изображения друг с другом. Я хочу визуализировать разницу между изображениями. (или другая функция). Так что это может выглядеть так ...

Есть ли в пакете функция, которая может это уже делать. Я ничего не могу найти на нем.

Image Compare Matrix


Код для рабочего примера - нужно загрузить откуда-то 5 изображений. Я предполагаю, что просто спрашиваю, находится ли этот процесс уже в функции.

import matplotlib.pyplot as plt
from skimage import data
import numpy as np
import cv2
import os
import re

# Read in images
images = []
dir = "C:/PATH/shipsnet/"
for type in os.listdir(dir):
    img_file = dir + "/" + type + "/image_1.png"
    images.append(data.imread(img_file, pilmode="RGB"))


# create a dict containing the index and diffed image
diff_table = {}
size = np.arange(0,5)
combos = np.array(np.meshgrid(size, size)).T.reshape(-1,2)
for combo in combos:
    image_1 = images[combo[0]]
    image_2 = images[combo[1]]
    diff_table[str(combo)] = cv2.absdiff(image_1, image_2)


# plot the table
f, axarr = plt.subplots(6, 6, figsize=(10, 10))

for row in diff_table:
    location = list(map(int, re.findall(r'\d+',row)))
    row = location[0]
    col = location[1]
    key = "["+str(row)+" "+str(col)+"]"
    axarr[row + 1, col + 1].imshow(diff_table[key], interpolation='nearest')

for i,image in enumerate(images):
    axarr[i + 1, 0].imshow(images[i], interpolation='nearest')
    axarr[0, i + 1].imshow(images[i], interpolation='nearest')

[axi.set_axis_off() for axi in axarr.ravel()]
plt.tight_layout()
plt.show()

с выводом, являющимся ....

coded example

...