什么是模板匹配?
  所谓模板匹配就是给出一个模板图片和一个搜索图片,在搜索图片中找到与模板图片最为相似的部分。
怎么实现?
  简单来说,就是让模板图片在搜索图片上滑动,以像素点为单位,计算每一个位置上的相似度,最终得到相似度最高的像素点的位置,以该像素点为原定,模板图片为大小,对应在搜索图片上的位置即为匹配度最高的部分。
有哪些匹配算法?
  在opencv中 可以通过函数matchTemplate实现模板匹配,同时有六种相关的匹配算法
  T(x,y)T(x,y)T(x,y) 用来表示我们的模板。I(x,y)I(x,y)I(x,y) 是我们的目标图像 , R(x,y)R(x,y)R(x,y) 是用来描述相似度的函数。

  1. 平方差匹配 method=CV_TM_SQDIFF
     这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.
         R(x,y)=∑x′,y′(T(x′,y′)−I(x+x′,y+y′))2R(x,y)= \sum _{x',y'} (T(x',y')-I(x+x',y+y'))^2R(x,y)=∑x′,y′​(T(x′,y′)−I(x+x′,y+y′))2

  2. 标准平方差匹配 method=CV_TM_SQDIFF_NORMED
      这个方法其实和平方差匹配算法是类似的。只不过对图像和模板进行了标准化操作。
         R(x,y)=∑x′,y′(T(x′,y′)−I(x+x′,y+y′))2∑x′,y′T(x′,y′)2⋅∑x′,y′I(x+x′,y+y′)2R(x,y)= \frac{\sum_{x',y'} (T(x',y')-I(x+x',y+y'))^2}{\sqrt{\sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}R(x,y)=∑x′,y′​T(x′,y′)2⋅∑x′,y′​I(x+x′,y+y′)2​∑x′,y′​(T(x′,y′)−I(x+x′,y+y′))2​

  3. 相关匹配 method=CV_TM_CCORR
     这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.
         R(x,y)=∑x′,y′(T(x′,y′)⋅I(x+x′,y+y′))R(x,y)= \sum _{x',y'} (T(x',y') \cdot I(x+x',y+y'))R(x,y)=∑x′,y′​(T(x′,y′)⋅I(x+x′,y+y′))

  4. 标准相关匹配 method=CV_TM_CCORR_NORMED
     这个方法和 标准化差值平方和匹配 类似,都是去除了亮度线性变化对相似度计算的影响。可以保证图像和模板同时变亮或变暗k倍时结果不变。
         R(x,y)=∑x′,y′(T(x′,y′)⋅I′(x+x′,y+y′))∑x′,y′T(x′,y′)2⋅∑x′,y′I(x+x′,y+y′)2R(x,y)= \frac{\sum_{x',y'} (T(x',y') \cdot I'(x+x',y+y'))}{\sqrt{\sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}R(x,y)=∑x′,y′​T(x′,y′)2⋅∑x′,y′​I(x+x′,y+y′)2​∑x′,y′​(T(x′,y′)⋅I′(x+x′,y+y′))​

  5. 相关匹配 method=CV_TM_CCOEFF
      这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).
         R(x,y)=∑x′,y′(T′(x′,y′)⋅I(x+x′,y+y′))R(x,y)= \sum _{x',y'} (T'(x',y') \cdot I(x+x',y+y'))R(x,y)=∑x′,y′​(T′(x′,y′)⋅I(x+x′,y+y′))
      在这里
        T′(x′,y′)=T(x′,y′)−1/(w⋅h)⋅∑x′′,y′′T(x′′,y′′)I′(x+x′,y+y′)=I(x+x′,y+y′)−1/(w⋅h)⋅∑x′′,y′′I(x+x′′,y+y′′)\begin{array}{l} T'(x',y')=T(x',y') - 1/(w \cdot h) \cdot \sum _{x'',y''} T(x'',y'') \\ I'(x+x',y+y')=I(x+x',y+y') - 1/(w \cdot h) \cdot \sum _{x'',y''} I(x+x'',y+y'') \end{array}T′(x′,y′)=T(x′,y′)−1/(w⋅h)⋅∑x′′,y′′​T(x′′,y′′)I′(x+x′,y+y′)=I(x+x′,y+y′)−1/(w⋅h)⋅∑x′′,y′′​I(x+x′′,y+y′′)​

  6. 标准相关匹配 method=CV_TM_CCOEFF_NORMED
      这是 OpenCV 支持的最复杂的一种相似度算法。这里的相关运算就是数理统计学科的相关系数计算方法。具体的说,就是在减去了各自的平均值之外,还要各自除以各自的方差。经过减去平均值和除以方差这么两步操作之后,无论是我们的待检图像还是模板都被标准化了,这样可以保证图像和模板分别改变光照亮不影响计算结果。计算出的相关系数被限制在了 -1 到 1 之间,1 表示完全相同,-1 表示两幅图像的亮度正好相反,0 表示两幅图像之间没有线性关系。
         R(x,y)=∑x′,y′(T′(x′,y′)⋅I′(x+x′,y+y′))∑x′,y′T′(x′,y′)2⋅∑x′,y′I′(x+x′,y+y′)2R(x,y)= \frac{ \sum_{x',y'} (T'(x',y') \cdot I'(x+x',y+y')) }{ \sqrt{\sum_{x',y'}T'(x',y')^2 \cdot \sum_{x',y'} I'(x+x',y+y')^2} }R(x,y)=∑x′,y′​T′(x′,y′)2⋅∑x′,y′​I′(x+x′,y+y′)2​∑x′,y′​(T′(x′,y′)⋅I′(x+x′,y+y′))​
      通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价). 最好的办法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案.

代码实现:
模板图片

搜索图片

代码:

import cv2
import numpy as np
def model_match(search_image, model_image, threshold):search_img = cv2.imread(search_image)model_img_gray = cv2.imread(model_image, 0)#读取模板图片的灰度图search_img_gray = cv2.cvtColor(search_img, cv2.COLOR_BGR2GRAY)#将搜索图片转化为灰度图h, w = model_img_gray.shaperes = cv2.matchTemplate(search_img_gray, model_img_gray, cv2.TM_CCOEFF_NORMED)#采用标准相关匹配 方法度量相似度print(res.shape)loc = np.where(res>threshold)#返回每一个维度的坐标值, 比如返回值为[1, 2, 3],[1, 2, 4] 表明(1, 1)(2, 2)(3, 4)这三个坐标点的相似度大于阈值print(loc)for pt in zip(*loc):#zip(*loc)反解析为坐标值print(pt)cv2.rectangle(search_img, pt[::-1], (pt[1] + w, pt[0] + h), (7,249,151), 2) #在搜索图片上绘制矩形框cv2.imshow('Detected',search_img) cv2.waitKey(0) cv2.destroyAllWindows()
if __name__ == "__main__":search_image = './data/car.jpg'model_image = './data/car_model.jpg'threshold = 0.95model_match(search_image, model_image, threshold)

最终效果

图片相似度计算-模板匹配相关推荐

  1. python 图像识别_python图像识别之图片相似度计算

    作者 | a1131825850疯子 来源 | Python爬虫scrapy 原文 | python图像识别---------图片相似度计算 1.背景 要识别两张图片是否相似,首先我们可能会区分这两张 ...

  2. halcon 相似度_halcon模板匹配

    在机器视觉应用中,经常需要对图像进行仿射变换. 1.在基于参考的视觉检测中,由于待检图像与参考图像或多或少都会存在几何变化(平移.旋转.缩放等),所以在做比较之前一般都要对待检图像进行仿射变换以对齐图 ...

  3. 图片相似度计算:深入理解DCT变换以及感知哈希

    缘起 Android上硬件编解码一直是个老大难问题,就解码来说,硬解码本身并不困难,只要按照MediaCodec的流程开发即可.但由于系统碎片化,硬件规格不一致,硬件解码会到黑屏,花屏,绿屏之类的显示 ...

  4. 【python 以图搜图】三种图片相似度计算融合算法

    目标:在一个文件夹找出相似度较高的图片,达到以图搜图的目的. 我找了十组,都是高度相似的图片. 核心算法: 1.分别自定义三种计算图片相似度算法,计算图片相似度算法ORB算法,以及局部敏感哈希phas ...

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

    1.背景 要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等......对应的风景照是蓝天还是大海......做一系列的分类. 从机器学习的的角度来说,首先要提取图片的特征,将这 ...

  6. 连连看不一样的玩法,利用python进行图片相似度计算

    先放制作好的游戏视频链接:(纯粹是兴趣分享) 连连看不一样的玩法-图像相似度识别-python_单机游戏热门视频 https://www.ixigua.com/7076826558106698253? ...

  7. python图像识别之图片相似度计算

    作者 | a1131825850疯子  来源 | Python爬虫scrapy 1.背景 要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等-对应的风景照是蓝天还是大海-做一系列 ...

  8. python相册图片处理_Python实现图片相似度计算

    图片相似度 _ 概述 今天在用一个软件清理手机时,看到了一个比较好的功能:相似图片删除.软件识别出相册中类似的图片,删除相似图片,进而释放手机存储. 上网查了这个功能的基本实现算法,有挺多算法求图片相 ...

  9. python图片相似度计算_python Opencv计算图像相似度过程解析

    这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.相关概念 一般我们人区分谁是谁 ...

  10. android 图片特征提取比对_计算机视觉 OpenCV Android | 基本特征检测 之 模板匹配...

    模板匹配的 概述 以及 使用简介模板匹配是最简单的模式识别算法之一, 其在图像处理中经常用于从一副未知图像中, 根据预先定义好的模板图像来寻找与模板图像相同或者高度相似的子图像区域. 所以模板匹配需要 ...

最新文章

  1. 2022-2028年中国无菌手套产业发展动态及投资趋势预测报告
  2. android百度api配置,Android Studio 配置使用百度api (附带简单样例)(示例代码)
  3. python的深拷贝与浅拷贝
  4. 详解CPU漏洞对机器学习的影响:几乎所有卷积层都受影响,QR分解降速37%
  5. 还不知道BeanFactory和ApplicationContext的区别?
  6. 美国计算机专业录取率,美国留学高录取率院校计算机专业申请条件是什么? 爱问知识人...
  7. JVM中GC小对象配置
  8. liteIDE配置环境变量
  9. JUC多线程:线程池的创建及工作原理 和 Executor 框架
  10. metasploit终端命令大全 MSF
  11. php strtotime month bug,处理PHP strtotime的BUG
  12. 【AI视野·今日NLP 自然语言处理论文速览 第二十一期】Fri, 24 Sep 2021
  13. 关于用隐藏文字(图片替换文字)的更好的可用性方法
  14. 7、Java格式注意要点
  15. XML约束——Schema约束
  16. UML图各类符号含义
  17. php 源代码 即时通讯,php开源免费即时通讯源码-目前有哪些完全的开源的PHP,商城代码...
  18. PL/0词法分析程序
  19. linux ubuntu 五笔输入法,ubuntu下安装fcitx五笔输入法
  20. 2018新版个税计算器---Python实现

热门文章

  1. linux如何解除密码锁屏图案大全,忘记锁屏图案密码的六种解决办法
  2. 一键配置以太网IP脚本
  3. CSS世界-第一、二章
  4. 猿辅导(实习800/天)面试算法题详解
  5. 易语言高级表格如何右击选择当前项,再弹出右击菜单?
  6. OpenGL 渲染 YUYV(YUV422)
  7. 苹果电脑上不错的svn客户端
  8. 电子签章(Electronic Signature)在C#中的实现方法
  9. 基于内容推荐算法的java,协同过滤推荐算法Java-DEMO
  10. sliksvn下载与安装