1. SSIM(结构相似性度量)
这是一种全参考的图像质量评价指标,分别从亮度、对比度、结构三个方面度量图像相似性。
SSIM取值范围[0, 1],值越大,表示图像失真越小。
在实际应用中,可以利用滑动窗将图像分块,令分块总数为N,考虑到窗口形状对分块的影响,采用高斯加权计算每一窗口的均值、方差以及协方差,然后计算对应块的结构相似度SSIM,最后将平均值作为两图像的结构相似性度量,即平均结构相似性SSIM。
from skimage.measure import compare_ssim
from scipy.misc import imread
import numpy as np
img1 = imread('1.jpg')
img2 = imread('2.jpg')
img2 = np.resize(img2, (img1.shape[0], img1.shape[1], img1.shape[2]))
print(img2.shape)
print(img1.shape)
ssim = compare_ssim(img1, img2, multichannel=True)
print(ssim)
计算出来SSIM为0.343769017234
该方法通常用来衡量一张图片压缩后的失真度,比较少的用来计算两图的相似度。
2. cosin相似度(余弦相似度)
把图片表示成一个向量,通过计算向量之间的余弦距离来表征两张图片的相似度。
from PIL import Image
from numpy import average, linalg, dot
def get_thumbnail(image, size=(1200, 750), greyscale=False):
image = image.resize(size, Image.ANTIALIAS)
if greyscale:
image = image.convert('L')
return image
def image_similarity_vectors_via_numpy(image1, image2):
image1 = get_thumbnail(image1)
image2 = get_thumbnail(image2)
images = [image1, image2]
vectors = []
norms = []
for image in images:
vector = []
for pixel_tuple in image.getdata():
vector.append(average(pixel_tuple))
vectors.append(vector)
norms.append(linalg.norm(vector, 2))
a, b = v