Python图像识别,图片相似度计算!

1.背景

要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等......对应的风景照是蓝天还是大海......做一系列的分类。

从机器学习的的角度来说,首先要提取图片的特征,将这些特征进行分类处理,训练并建立模型,然后在进行识别。

但是让计算机去区分这些图片分别是哪一类是很不容易的,不过计算机可以知道图像的像素值的,因此,在图像识别过程中,通过颜色特征来识别是相似图片是我们常用的(当然还有其特征还有纹理特征、形状特征和空间关系特征等,这些有分为直方图,颜色集,颜色局,聚合向量,相关图等来计算颜色特征),

Python资源共享群:626017123

为了得到两张相似的图片,在这里通过以下几种简单的计算方式来计算图片的相似度:

  • 直方图计算图片的相似度
  • 通过哈希值,汉明距离计算
  • 通过图片的余弦距离计算
  • 通过图片结构度量计算

一、直方图计算图片的相似度

上三张图片,分别是img1.png, img2.jpg,img.png:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

可以看出上面这三张图是挺相似的,在颜色上是差不多的,最相似的是哪两张大家可以猜猜看,看和我们计算的是否一样。

在python中利用opencv中的calcHist()方法获取其直方图数据,返回的结果是一个列表:

  •  
# 计算图img1的直方图
H1 = cv2.calcHist([img1], [1], None, [256], [0, 256])
H1 = cv2.normalize(H1, H1, 0, 1, cv2.NORM_MINMAX, -1)  # 对图片进行归一化处理

先计算img1的直方图,在对其归一化,最后在分别对img2,img3计算,做归一化,然后在利用python自带的compareHist()进行相似度的比较:

  •  
 利用compareHist()进行比较相似度
similarity1 = cv2.compareHist(H1, H2, 0)

最后得到三张图片的直方图如下:

 

 

 

 

 

 

图像的x轴是指的图片的0~255之间的像素变化,y轴指的是在这0~255像素所占的比列。

我们可以明显的看出img2与img3的直方图的变化趋势是相符的有重合态的,运行结果如下:

 

 

 

 

 

 

通过运行结果知道img2和img3是值是最为相似的(代码calcImage.py)

上面的是直接调用opencv中的方法来实现的,下面还有自己写的方法:

首先是将图片转化为RGB格式,在这里是用的pillow中的Image来对图片做处理的:

  •  
# 将图片转化为RGB
def make_regalur_image(img, size=(64, 64)):
    gray_image = img.resize(size).convert('RGB')
    return gr
  • 5
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值