Very fast template matching(非常快的模板匹配)

  • Integral image
  • 代数矩的快速计算
  • 快速模板匹配
  • 算法步骤
  • 结果

主要讲述文章“Very Fast Template Matching” 中用到的特征和算法的基本思路。(用尽量少的公式)

Integral image

本文作者从2001 年人脸识别神作 “Robust Real-time Object Detection” 中提到的图片特征 integral image中得到启发,发现这个特征可以作为模板匹配的特征,并且通过快速计算图片某个位置对应的代数矩达到快速匹配的目的。假定 I ( x , y ) I(x,y) I(x,y)代表一张图片,则该图片中任意一个点 ( x , y ) (x,y) (x,y)对应的integral image的值是该点所在图片中左方和上方所有像素的和,如图:

Integral image的好处是,当一张图片的integral image已知,这张图片的任何一个区域的像素的总和可以以极快的速度计算出来。

例如,如果我们对图片 I ( x , y ) I(x,y) I(x,y)中的区域 D D D感兴趣,那么在integral image中我们通过计算点1,2,3,4对应的值就能得到图片 I ( x , y ) I(x,y) I(x,y)中的区域 D D D的像素的总和,也就是integral image中的: 4 + 1 − 3 − 2 4+1-3-2 4+1−3−2。

代数矩的快速计算

上一部分简要介绍了integral image的定义和在图片像素计算中的优点,这里以integral image为基础,介绍图片特定的点 ( x , y ) (x,y) (x,y)的代数矩的计算方式。这也是本文作者的创新点。
一个矩形区域 I I I 的代数矩定义为:
m p q = ∑ x = x a x b ∑ y = y a y b x p y q I ( x , y ) (1) m_{pq} = \sum_{x=x_a}^{x_b}\sum_{y = y_a}^{y_b}x^py^qI(x,y)\tag{1} mpq​=x=xa​∑xb​​y=ya​∑yb​​xpyqI(x,y)(1)
假设 x 0 , y 0 x_0,y_0 x0​,y0​代表该矩形的中心,定义这个矩形的中心距为:
u p q = ∑ x = x a x b ∑ y = y a y b ( x − x 0 ) p ( y − y 0 ) q I ( x , y ) (2) u_{pq} = \sum_{x=x_a}^{x_b}\sum_{y = y_a}^{y_b}{(x-x_0)}^p{(y-y_0)}^qI(x,y)\tag{2} upq​=x=xa​∑xb​​y=ya​∑yb​​(x−x0​)p(y−y0​)qI(x,y)(2)
中心距和代数矩满足展开式:
u 00 = m 00 u_{00} = m_{00} u00​=m00​
u 10 = m 10 − x 0 m 00 u_{10} = m_{10}-x_0m_{00} u10​=m10​−x0​m00​
u 01 = m 01 − y 0 m 00 u_{01} = m_{01}-y_0m_{00} u01​=m01​−y0​m00​
u 20 = m 20 − 2 x 0 m 10 + x 0 2 m 00 u_{20} = m_{20}-2x_0m_{10}+x_0^2m_{00} u20​=m20​−2x0​m10​+x02​m00​
u 11 = m 11 − x 0 m 01 − y 0 m 10 + x 0 y 0 m 00 u_{11} = m_{11}-x_0m_{01}-y_0m_{10}+x_0y_0m_{00} u11​=m11​−x0​m01​−y0​m10​+x0​y0​m00​
u 02 = m 02 − 2 y 0 m 01 + y 0 2 m 00 u_{02} = m_{02}-2y_0m_{01}+y_0^2m_{00} u02​=m02​−2y0​m01​+y02​m00​

计算代数矩和中心距的原因是,作者希望通过以中心距的一组值作为特征用于模板匹配。计算代数矩的速度类似于计算integral image, 在计算时能够对图像矩阵进行直接操作。

快速模板匹配

设模板匹配任务中的模板为 T T T图片为 I I I,像素值均表示为 f ( x , y ) f(x,y) f(x,y),一般选 p = 2 , q = 2 p=2,q=2 p=2,q=2
通过上述介绍,我们不难得到模板 T T T的中心距 U T = ( u 00 T , . . . , u p q T ) U_T = (u_{00}^T,...,u_{pq}^T) UT​=(u00T​,...,upqT​),定义
U I ( u , v ) = ( u 00 I , . . . , u p q I ) U_I(u,v) = (u_{00}^I,...,u_{pq}^I) UI​(u,v)=(u00I​,...,upqI​)为中心在 ( u , v ) (u,v) (u,v)的矩形的中心距。通过计算模板与图片中每一个点对应的中心距的“距离”,来判定模板匹配的位置。例如
h ( u , v ) = ∑ p , q u p q I ( u , v ) u p q t ( ∑ p , q ( u p q I ( u , v ) ) 2 ) (3) h(u,v) = \frac{\sum_{p,q} u_{pq}^I(u,v)u_{pq}^t}{\sqrt{(\sum_{p,q}(u_{pq}^I(u,v))^2)}}\tag{3} h(u,v)=(∑p,q​(upqI​(u,v))2) ​∑p,q​upqI​(u,v)upqt​​(3)
h ( u , v ) h(u,v) h(u,v)的值最大的点对应最准确的匹配点。

但是这样计算出的 h ( u , v ) h(u,v) h(u,v)对于噪声比较敏感,所以文章提供了另外一个思路:
在以归一化互相关为特征的模板匹配计算方式为:
h ( u , v ) = ∑ x , y I ( u + x , v + y ) T ( x , y ) ( ∑ x , y I 2 ( u + x , v + y ) (4) h(u,v) = \frac{\sum_{x,y} I(u+x,v+y)T(x,y)}{\sqrt{(\sum_{x,y} I^2(u+x,v+y)}}\tag{4} h(u,v)=(∑x,y​I2(u+x,v+y) ​∑x,y​I(u+x,v+y)T(x,y)​(4)
通过多项式 p p p对像素 I I I进行近似,将上式转变为:
h ( u , v ) = U I ′ ( u , v ) B − 1 U t U I ′ ( u , v ) B − 1 U I ( u , v ) (6) h(u,v) = \frac{U_{I}'(u,v)B^{-1}U_{t}}{\sqrt{U_{I}'(u,v)B^{-1}U_{I}(u,v)}}\tag{6} h(u,v)=UI′​(u,v)B−1UI​(u,v) ​UI′​(u,v)B−1Ut​​(6)
推导请移步 论文

算法步骤

1.计算出模板的中心距
2. 计算出图片的每一阶integral image
3. 计算出图片中每一个可能成为矩形中心的点中心距
4. 根据计算出的图片和模板的中心距计算特征
5. 得到特征最大的点,也就是模板匹配的结果。

结果

模板和图片如下:


我的matlab仿真结果:

代码移步:Matlab代码

Very fast template matching(非常快的模板匹配)相关推荐

  1. Python+OpenCV:模板匹配(Template Matching)

    Python+OpenCV:模板匹配(Template Matching) Template Matching with Single Objects ######################## ...

  2. Python+Opencv实现图像匹配——模板匹配

    1.原理 简单来说,模板匹配就是拿一个模板(图片)在目标图片上依次滑动,每次计算模板与模板下方的子图的相似度,最后就计算出了非常多的相似度: 如果只是单个目标的匹配,那只需要取相似度最大值所在的位置就 ...

  3. 模板匹配,特征点匹配-全

    cnn网络: superpoint 18年的, https://github.com/magicleap/SuperPointPretrainedNetwork cnn图像匹配:权重5m torch ...

  4. OpenCV中使用 cv2.matchTemplate()、 cv2.minMaxLoc()、 cv2.rectangle()进行模板匹配

    一.函数介绍   1.cv2.matchTemplate(src, template, method) 参数: src: 原图像图像格式为 uint8 或 float32.当传入函数时应 用中括号 [] ...

  5. 通过模板匹配先定位检测的对象再检测圆形零件和孔针02

    图中红色区域的孔和针的检测 如果相机像素很大,直接找很慢,可以通过深度学习的方式或模板匹配定位,然后再做检测 1 images/HoleTemplate.jpg  NeedleTemplate.jpg ...

  6. Fast Affine Template Matching over Galois Field仿射模板匹配数据测试问题

    Fast Affine Template Matching over Galois Field http://cvhost.scv.cis.iwate-u.ac.jp/research/project ...

  7. OpenCV模板匹配Template Matching

    OpenCV模板匹配Template Matching 模板匹配Template Matching 目标 理论 什么是模板匹配? OpenCV提供哪些匹配方法? 代码 解释 结果 模板匹配Templa ...

  8. halcon模板匹配学习(一) Matching 初印象

    什么是模板匹配呢?简单而言,就是在图像中寻找目标图像(模板),或者说,就是在图像中寻找与模板图像相似部分的一种图像处理技术.依赖于选择的方法不同,模板匹配可以处理各种情形下的变换,如照明.杂点.大小. ...

  9. Halcon 第五章『模板匹配Matching』◆第5节:基于组件的模板匹配|Component-Based

    一.介绍 基于组件的模板匹配是基于形状匹配的一种应用,也可以说是基于形状的模板匹配的加强版,加强的地方在于,这种方法允许模板中包含多个目标,并且允许目标之间存在相对运动(位移和旋转).区别在于基于形状 ...

最新文章

  1. 验证环境中的program为什么必须是automatic
  2. 树形DP——Codeforces Choosing Capital for Treeland
  3. OpenGL Vertex Array
  4. TCP/IP / IP 头
  5. python图像增强_Python图像的增强处理操作示例【基于ImageEnhance类】
  6. 4.3英寸屏双核 LG Prada K2通过FCC认证
  7. 对话系统答非所问?快试试这篇ACL'21的连贯性评估大法
  8. oracle分页的三种方式,oracle 使用rownum的三种分页方式
  9. 在plc中用c语言实现电梯控制程序,三菱FX2N PLC电梯运行控制程序设计
  10. 强大的Mockito测试框架
  11. 【软考10】计算机网络基础知识拾遗
  12. mysql与oracle存储过程_5分钟学会oracle与mysql存储过程insertinto
  13. GD32F103读写内部FLASH
  14. 2022杭州华为OD面试经历
  15. 使用管理员权限强制删除文件夹
  16. android中adb是什么意思,adb是什么意思?安卓系统常用adb命令怎么用?
  17. my.资料__2017暑假
  18. 百度砸120W年薪,只要这个专业,应届生也行!
  19. 在win7系统 Keil 开发环境下 Jlink 仿真器连不上解决办法
  20. 2019年小白学习web前端路线图及学习攻略

热门文章

  1. bzoj2259 [Oibh]新型计算机
  2. PyTorch - autograd - One of the differentiated Tensors appears to not have been used in the graph
  3. int类型相除保留两位小数
  4. 以ear结尾的单词(ChatGPT4写作)
  5. c语言计算机图形来画八分画圆,【计算机图形学】基本图形元素:圆的生成算法...
  6. 优秀互联网产品经理必备的10张业务图谱
  7. “九韶杯”河科院程序设计协会第一届程序设计竞赛题解
  8. 手把手告诉你如何安装多个版本的node,妈妈再也不用担心版本高低引发的一系列后遗症(非常详细,非常实用)
  9. word如何给论文加引用文献
  10. 平面设计软件都有哪些?推荐这7款