一、图像原图二、hash值三、模板匹配四、ssim值总结
一、图像原图
给定ground truth和实际拍摄图像,检测饮料瓶的数量,即给定模板图像与实际获取图像之间的相似度。
1. 图像hash值
2. 图像模板匹配
3. 图像ssim相似度比较
实际的图像如下所示:
一、图像hash值
1. hash值平均哈希,差异值哈希
均值哈希利用的是图片的低频信息对两张图片进行比较,低频信息如图像亮度变化较小的区域,高频信息如亮度变化剧烈的区域边缘等。
A: resize为(8, 8),灰度级的转化
B:mean和diff的计算, 去0和1的比较值
C: 组合hash值,即64位的整数
D:比较有多少不一样的,即汉明距离
2. 均值aver_hash代码如下
#均值哈希算法def aver_hash(img):img = cv2.resize(img,(8,8),interpolation=cv2.INTER_CUBIC)gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)sum = 0hash_str = ''#遍历累加求像素和for i in range(gray.shape[0]):for j in range(gray.shape[1]):sum = sum + gray[i,j]avg = sum / 64#灰度大于平均值为1相反为0生成图片的hash值for i in range(gray.shape[0]):for j in range(gray.shape[1]):if gray[i,j] >avg:hash_str = hash_str +'1'else:hash_str = hash_str +'0'return hash_str
二、图像模板匹配
1. 模板匹配方法
进行匹配窗口的滑动,寻找各个位置与模板的相似度。
2.匹配代码如下
#模板匹配def math_tmplate(gt_img, test_img):gt_gray = cv2.cvtColor(gt_img, cv2.COLOR_BGR2GRAY)test_gray = cv2.cvtColor(test_img, cv2.COLOR_BGR2GRAY)res = cv2.matchTemplate(test_gray, gt_gray, cv2.TM_SQDIFF_NORMED)#TM_CCOEFF_NORMEDreturn res[0][0]
三、图像ssim值
1. ssim的定义
从亮度,对比度和结构三个方面进行度量,高斯加权的均值、方差、协方差,计算对应block快的结构相似度。
2. 结构相似度code
#ssimdef math_sssim(gt_img, test_img):gt_gray = cv2.cvtColor(gt_img, cv2.COLOR_BGR2GRAY)test_gray = cv2.cvtColor(test_img, cv2.COLOR_BGR2GRAY)(score, diff) = compare_ssim(test_gray, gt_gray, full=True)return score
总结
计算数量, 无论选择hsv 或者rgb的色域处理, 总会找到与底部导轨类似的饮料。
不同的相似度计算如下, 最终选择模板匹配的方法进行相似度的计算, 检测饮料的瓶盖数量。
the diff is: [0.53125, 0.234375, 0.90625,1.0 ]
the aver is: [0.59375, 0.1875,0.92187,0.828125 ]
the tmp is: [0.70079243, 1.0, 0.30529,0.07561831 ]
the ssim is: [0.1359543696,-0.18731236, 0.75678,0.91473222 ]