Python计算两图相似性-直方图

发布时间 2023-12-19 17:55:09作者: 莲(LIT)

1、简介

利用直方图计算图片的相似度时,是按照颜色的全局分布情况来看待的,

无法对局部的色彩进行分析,同一张图片如果转化成为灰度图时,在计算其直方图时差距就更大了。

对于灰度图可以将图片进行等分,然后在计算图片的相似度。

 

2、代码

from PIL import Image

# 将图片转化为RGB
def make_regalur_image(img, size=(64, 64)):
    gray_image = img.resize(size).convert('RGB')
    return gray_image

# 计算直方图
def hist_similar(lh, rh):
    assert len(lh) == len(rh)
    hist = sum(1 - (0 if l == r else float(abs(l - r)) / max(l, r)) for l, r in zip(lh, rh)) / len(lh)
    return hist

# 计算相似度
def calc_similar(li, ri):
    calc_sim = hist_similar(li.histogram(), ri.histogram())
    return calc_sim

if __name__ == '__main__':
    image_cp1 = Image.open('WD1.png')
    image_cp1 = make_regalur_image(image_cp1)
    image_cp2 = Image.open('WD2.png')
    image_cp2 = make_regalur_image(image_cp2)
    print("图片间的相似度为", calc_similar(image_cp1, image_cp2))