使用直方图及其部分空间特性的模糊对比

来源:互联网 发布:卖淘宝号的网站 编辑:程序博客网 时间:2024/06/07 23:31
#coding=<coding=utf-8>from PIL import Imagedef calculate(image1,image2):g = image1.histogram()s = image2.histogram()assert len(g) == len(s),"error"data = []for index in range(0,len(g)):if g[index] != s[index]:data.append(1 - abs(g[index] - s[index])/max(g[index],s[index]) )else:data.append(1)return (1.0*sum(data))/(1.0*len(g))def split_imgae(image,part_size):pw,ph = part_sizew,h = image.sizesub_image_list = []assert w % pw == h % ph == 0,"error"for i in range(0,w,pw):for j in range(0,h,ph):sub_image = image.crop((i,j,i+pw,j+ph)).copy()sub_image_list.append(sub_image)return sub_image_listdef classfiy_histogram_with_split(image1,image2,size = (256,256),part_size=(64,64)):image1 = image1.resize(size).convert("RGB")sub_image1 = split_imgae(image1,part_size)  #第一幅图像的特征向量image2 = image2.resize(size).convert("RGB")sub_image2 = split_imgae(image2,part_size)   #第二幅图像的特征向量sub_data = 0;for im1,im2 in zip(sub_image1,sub_image2):sub_data += calculate(im1, im2)x = size[0]/part_size[0]y = size[1]/part_size[1]pre = round((sub_data/(x*y) ),3)return  preif __name__ == "__main__":image1 = Image.open("001.png")image2 = Image.open("010.png")pre = classfiy_histogram_with_split(image1,image2,(256, 256), (64, 64))print("Hello python !!!")print pre