python图像识别之图片相似度计算( 三 )

最终的运行结果:
aHash:

python图像识别之图片相似度计算

文章插图
 
dhash:
python图像识别之图片相似度计算

文章插图
 
p_hsah:
python图像识别之图片相似度计算

文章插图
 
【python图像识别之图片相似度计算】通过上面运行的结果可以看出来,img1和img2的相似度高一些 。
三、余弦相似度(cosin)
把图片表示成一个向量,通过计算向量之间的余弦距离来表征两张图片的相似度 。
1. 对图片进行归一化处理
# 对图片进行统一化处理def get_thum(image, size=(64, 64), greyscale=False): # 利用image对图像大小重新设置, Image.ANTIALIAS为高质量的 image = image.resize(size, Image.ANTIALIAS) if greyscale: # 将图片转换为L模式,其为灰度图,其每个像素用8个bit表示 image = image.convert('L') return image2. 计算余弦距离
# 计算图片的余弦距离def image_similarity_vectors_via_numpy(image1, image2): image1 = get_thum(image1) image2 = get_thum(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) # linalg=linear(线性)+algebra(代数),norm则表示范数 # 求图片的范数?? norms.append(linalg.norm(vector, 2)) a, b = vectors a_norm, b_norm = norms # dot返回的是点积,对二维数组(矩阵)进行计算 res = dot(a / a_norm, b / b_norm)returnres最终运行结果:
python图像识别之图片相似度计算

文章插图
 
结果显示img1和img2的相似度高一些,和计算hash值的汉明距离得到的结果是相一致的 。
四、图片SSIM(结构相似度量)
SSIM是一种全参考的图像质量评价指标,分别从亮度、对比度、结构三个方面度量图像相似性 。SSIM取值范围[0, 1],值越大,表示图像失真越小 。在实际应用中,可以利用滑动窗将图像分块,令分块总数为N,考虑到窗口形状对分块的影响,采用高斯加权计算每一窗口的均值、方差以及协方差,然后计算对应块的结构相似度SSIM,最后将平均值作为两图像的结构相似性度量,即平均结构相似性SSIM 。
ssim1 = compare_ssim(img1, img2, multichannel=True)这个是scikit-image库自带的一种计算方法
运行结果:
python图像识别之图片相似度计算

文章插图
 
可以看到img1和img2的相似度高 。
好了,以上就是到目前为止我接触到的图片相似度的计算方法,肯定还有许多我没有接触到的计算方法,大家有需要的可以参考一下,有其他方法的大家可以留言一起探讨!!!




推荐阅读