Python_基于PHash(感知哈希)与ORB的图像识别算法
当我们需要对某一张图片进行判定是否和另外的图片相似时,用的最多的便是感知哈希算法和ORB算法。
感知哈希算法的算法特点便是忽略图像中的细节,比如:地点、光照影响、内容等因素,而仅仅对图片中的特征进行比较,从而判断出两图片是否相似。
例如,我们有一张图片。此时,我们需要判断我们的图形库中是否具有与其相似或一样的图片,这个时候,我们将它的细节内容给祛除掉,这时候,我们可以用缩放的方式将细节内容给去除。
将图片给缩放成8*8格式之后,图片将会变成以下形式:
但是,由于我们的图片展示是由3原色(红、绿、蓝)构成,所以,未来我们计算的时候,也要考虑到3个像素之间彼此的关系,为了之后计算的简单性,我们将这张图片转成灰度图片:
排除了三原色的影响,我们再将灰度图片进行二值化操作(将低于平均灰度值的置位0,高于平均灰度值的置位1),排除光线等原因造成的图片灰度值不等的影响,得到最后的图片,一般来说,比值高于0.9以上,就可以认为是一张图片了。
至于ORB算法原理,有几位小哥的博客写的很清晰,在这里我就不班门弄斧了,附链接:
ORB算法原理
最后,附上源码:
#coding-utf-8
import cv2
import numpy as np
import os
import shutil
#存放图片目录
path = "D:\\untitled1\\photo"
#用户传输原图
imgPathSrc = "\\untitled1\\photo\\get1.jpg"
#相似比例值
simil = 0.85
#相似图片存入地址
saveFile = "C:\\Users\\EDZ\\Desktop\\test_consult\\"
def ORBImgSimilarity(imgPathSrc,imgPathCom):
"""
:param imgPathSrc: 原图路径
:param imgPathCom: 待比较图片路径
:return:图片相似度
"""
try:
#读取图片
imgSrc = cv2.imread(imgPathSrc,cv2.IMREAD_GRAYSCALE)
imgCom = cv2.imread(imgPathCom,cv2.IMREAD_GRAYSCALE)
#初始化ORB检测器
orb = cv2.ORB_create()
kpSrc,deSrc = orb.detectAndCompute(imgSrc