在使用 SSIM + Python 比较各种图像时,我发现一些非常相似的图像具有非常低的 SSIM 比率。这是图像背景与执行计算必须进行的调整大小相互作用的结果。这个问题很重要,因为我正在比较数千张图像,并且许多不同的图像具有更高的相似比,而那些图像几乎是形态学相等的。
我的代码:
import cv2
import statistics
import numpy as np
from PIL import Image
import urllib.request
import matplotlib.pyplot as plt
from skimage.metrics import structural_similarity
class CompareImages_n():
def __init__(self, url_1, url_2):
self.img_url_1 = url_1
self.img_url_2 = url_2
def load_images(self, img_url, flag_color=False):
req = urllib.request.urlopen(img_url)
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
image = cv2.imdecode(arr, -1) # Load image as it is
if not flag_color:
return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Change color to greyscale
else:
return image
def main_process_ssmi(self):
ima1 = self.load_images(self.img_url_1)
ima2 = self.load_images(self.img_url_2)
(H, W) = ima1.shape
ima2 = cv2.resize(ima2, (W, H))
(score, diff) = structural_similarity(ima1, ima2, full=True)
return score
如何在调整大小过程之前比较消除背景的图像?还有什么其他的解决方案可以实施?(自动裁剪?)有可用的库吗?