图片相似度
_
概述
今天在用一个软件清理手机时,看到了一个比较好的功能:相似图片删除。软件识别出相册中类似的图片,删除相似图片,进而释放手机存储。
上网查了这个功能的基本实现算法,有挺多算法求图片相似度的,常见的有均值哈希算法、差值感知算法、感知哈希算法、单通道直方图等等,网上有具体实现的算法,此处我只演示单通道直方图。
本推文提到的所有图片均拍摄于武汉市。祝福武汉,祝福湖北,祝福中国。
项目总述
导入一个已知图片,计算各个图片与已知图片的相似度,并输出相似度。
具体计算策略为:导入图片、计算图片的直方图、图片归一化处理、利用compareHist()进行比较相似度。
最后打印相似度,然后输出直方图值,其中图像的x轴是指的图片的0~255之间的像素变化,y轴指的是在这0~255像素所占的比列。
_
项目实现
1、导入图片
# 读取函数,用来读取文件夹中的所有函数,输入参数是文件名def read_directory(directory_name):for filename in os.listdir(directory_name):strDic = directory_name + \"//\" + filenameimageList.append(strDic)
2、图片处理
# 读取函数,用来读取文件夹中的所有函数,输入参数是文件名def read_directory(directory_name):for filename in os.listdir(directory_name):strDic = directory_name + \"//\" + filenameimageList.append(strDic)
3、打印结果
for i in range(0, len(similar)):print(similar[i])lab = \'img\' + str(i)plt.plot(pilex[i], label=lab)_
结果展示
1、相似度结果
2、相似图片(相似度0.89)
3、直方图展示