我正在嘗試計算相應影像之間的 SSIM。例如,ground truth 目錄中名為 106.tif 的影像對應于 fake 目錄中的“假”生成影像 106.jpg。
真實目錄絕對路徑是/home/pr/pm/zh_pix2pix/datasets/mousebrain/test/B
假目錄絕對路徑是/home/pr/pm/zh_pix2pix/output/fake_B
里面的圖片是一一對應的,如下圖:

結果
突出差異

相似度得分
圖片相似度 0.9639027981846681
差異蒙版

代碼
from skimage.metrics import structural_similarity
import cv2
import numpy as np
before = cv2.imread('5.jpg')
after = cv2.imread('6.jpg')
# Convert images to grayscale
before_gray = cv2.cvtColor(before, cv2.COLOR_BGR2GRAY)
after_gray = cv2.cvtColor(after, cv2.COLOR_BGR2GRAY)
# Compute SSIM between two images
(score, diff) = structural_similarity(before_gray, after_gray, full=True)
print("Image similarity", score)
# The diff image contains the actual image differences between the two images
# and is represented as a floating point data type in the range [0,1]
# so we must convert the array to 8-bit unsigned integers in the range
# [0,255] before we can use it with OpenCV
diff = (diff * 255).astype("uint8")
# Threshold the difference image, followed by finding contours to
# obtain the regions of the two input images that differ
thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]
mask = np.zeros(before.shape, dtype='uint8')
filled_after = after.copy()
for c in contours:
area = cv2.contourArea(c)
if area > 40:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(before, (x, y), (x w, y h), (36,255,12), 2)
cv2.rectangle(after, (x, y), (x w, y h), (36,255,12), 2)
cv2.drawContours(mask, [c], 0, (0,255,0), -1)
cv2.drawContours(filled_after, [c], 0, (0,255,0), -1)
cv2.imshow('before', before)
cv2.imshow('after', after)
cv2.imshow('diff',diff)
cv2.imshow('mask',mask)
cv2.imshow('filled after',filled_after)
cv2.waitKey(0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/447013.html
