一、简介
在工业生产中,经常需要对某个设备或者物体进行缺陷识别,包括物体的变形、破损、损坏等进行识别,但是因为这种情况的发生往往时间周期较长,且形变微妙,难以直接对异常图像进行缺陷识别,因为有人提出了通过与标准图像进行模板匹配并进行相似度对比进行图像设备的变形处理,OpenCV进行图像相似度对比的有以下几种办法,
1、直方图方法
方法描述:有两幅图像patch(当然也可是整幅图像),分别计算两幅图像的直方图,并将直方图进行归一化,然后按照某种距离度量的标准进行相似度的测量。
2、图像模板匹配
一般而言,源图像与模板图像patch尺寸一样的话,可以直接使用上面介绍的图像相似度测量的方法;如果源图像与模板图像尺寸不一样,通常需要进行滑动匹配窗口,扫面个整幅图像获得最好的匹配patch。
3、感知哈希算法
感知哈希算法(perceptual hash algorithm),它的作用是对每张图像生成一个“指纹”(fingerprint)字符串,然后比较不同图像的指纹。结果越接近,就说明图像越相似。
二、感知哈希算法
感知哈希算法(Preceptatual hash algorithm) ,它的作用是对每一张图生成一个64位哈希值,之后比较不同图片的哈希值,结果越接近,说明图片越相似。
1、缩小尺寸。
将图片缩小到8x8的尺寸,总共64个像素,这一步的作用是去除图片的细节,仅仅保留结构等基本信息,忽略不同尺寸、比例带来的图片差异。
2、简化色彩,进行灰度处理
将缩小的图片,转换成64级灰度,也就是说,所有的像素点总共只有64中颜色。
3、计算平均值
计算所有64个像素的灰度平均值。
4、比较像素灰度。
将每个像素的灰度,与平均值进行比较,大于或者等于平均值,即为1,小于平均值为0。
5、计算哈希值
将上一步的比较结果,组合在一起,就构成了一个64位的整数,组合顺序不重要,只要保证所有的图片都是采用同样的次序就行。
三、实验
1、数据集
以易拉罐正常和变形图像模拟设备的鼓包和变形情况。通过采集变形前后图像进行相似度对比结果如下:
(1) cans1.jpg (2) cans2.jpg (3) cans3.jpg
2、代码
from time import *
begin_time = time()
import cv2
import numpy as np
import os
def pHash(image):
image = cv2.resize(image,(32,32), interpolation=cv2.INTER_CUBIC)
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
dct = cv2.dct(np.float32(image))
dct_roi = dct[0:8,0:8]
avreage = np.mean(dct_roi)
hash = []
for i in range(dct_roi.shape[0]):
for j in range(dct_roi.shape[1]):
if dct_roi[i,j] > avreage:
hash.append(1)
else:
hash.append(0)
return hash
def Hamming_distance(hash1,hash2):
num = 0
for index in range(len(hash1)):
if hash1[index] != hash2[index]:
num += 1
return num
if __name__ == "__main__":
image_file1 = './images/cans3.jpg'
image_file2 = './images/cans2.jpg'
img1 = cv2.imread(image_file1)
img2 = cv2.imread(image_file2)
hash1 = pHash(img1)
hash2 = pHash(img2)
dist = Hamming_distance(hash1, hash2)
similarity = 1 - dist * 1.0 / 64
print(dist)
print(similarity)
end_time = time()
run_time = end_time-begin_time
print ('该程序运行时间:',run_time)
3、结果分析
序号 | 对比方式 | 相似度 |
---|
1 | cans1.jpg对比cans1.jpg | 1 | 2 | cans1.jpg对比cans2.jpg | 0.843 | 3 | cans1.jpg对比cans3.jpg | 0.859 | 4 | cans2.jpg对比cans3.jpg | 0.922 |
设cans1.jpg图像为标准无异常的模板图像,cans2.jpg和cans3.jpg为在变形后的采集的图像。经过图像相似度对比,设置相似度阈值为0.9,图像相似度0.9以下为与初始模板图像之间存在差异,设备存在鼓包或者变形缺陷。
四、参考
1、https://blog.csdn.net/fengbingchun/article/details/42153261 2、https://blog.csdn.net/zchang81/article/details/73275155
|