NCC匹配

基于Normalized cross correlation(NCC)用来比较两幅图像的相似程度已经是一个常见的图像处理手段。在工业生产环节检测、监控领域对对象检测与识别均有应用。NCC算法可以有效降低光照对图像比较结果的影响。而且NCC最终结果在0到1之间,所以特别容易量化比较结果,只要给出一个阈值就可以判断结果的好与坏。传统的NCC比较方法比较耗时,虽然可以通过调整窗口大小和每次检测的步长矩形部分优化,但是对工业生产检测然后不能达到实时需求,通过积分图像实现预计算,比较模板图像与生产出电子版之间的细微差异,可以帮助企业提高产品质量,减少次品出厂率,把控质量。

一:NCC相关的数学知识

什么是NCC - (normalized cross correlation)归一化的交叉相关性,是数学上统计两组数据之间是否有关系的判断方法,貌似搞大数据分析比较流行相关性分析和计算。正常的计算公式如下:

mxn表示窗口大小,这样的计算复杂度就为O(m x n x M x N)。从上面公式就可以看出其中均值和平方和可以通过积分图预计算得到,对于模板和目标图像大小一致的应用场景来说

NCC的计算公式可以表示为如下:

 

其中根据积分图像可以提前计算出任意窗口大小和与平方和,这样就对

 

通过积分图像建立起来窗口下面的待检测图像与模板图像的和与平方和以及他们的交叉乘积五个积分图索引之后,这样就完成了整个预计算生成。依靠索引表查找计算结果,NCC就可以实现线性时间的复杂度计算,而且时间消耗近似常量跟窗口半径大小无关,完全可以满足实时对象检测工业环境工作条件。

二:算法步骤

1. 预计算模板图像和目标图像的积分图

2. 根据输入的窗口半径大小使用积分图完成NCC计算

3. 根据阈值得到匹配或者不匹配区域。

4. 输出结果

为了减小计算量,我们可以要把输入的图像转换为灰度图像,在灰度图像的基础上完成整个NCC计算检测。我们这个给出的基于RGB图像的NCC计算完整代码,读者可以在此基础上修改实现单通道图像检测。

三: 运行结果:

输入的模板图像与待检测图像,左边是模板图像,右边是待检测图像,左上角有明显污点。图像显示如下:

 

输入待检测图像与模板比较以及检测计算出NCC的图像显示如下:

 

 

相比传统的NCC计算方法,此方法的计算效率是传统方法几百倍提升,而且窗口越大效率提升越明显,有人对此作出的统计如下:

可见基于积分图快速NCC可以极大提升执行效率减少计算时间,实现窗口半径无关NCC比较。

 

 

1、NCC 在可以解决

◆  物体有轻微变形

◆  图像模糊、边缘不清的图片

◆  图片有纹理

2、特点
◆  快速、基于灰度的匹配

◆  鲁棒性

◆  模糊图像

◆  边缘变形图像

◆  有纹理的图像

◆ NCC 匹配支持光照变化的情况

3、NCC与形状匹配的比较

NCC 优点
◆  纹理
◆  对焦不清
◆  形状轻微变形
形状匹配优点
◆  精度高
◆  支持X/Y 方向缩放
◆  支持物体遮挡
◆  支持多模板
◆  支持非线性光照变化

4、NCC匹配相关函数

  创建
◆ create_ncc_model
  查找
◆ find_ncc_model
  读写
◆ read_ncc_model
◆ write_ncc_model
  内存清除
◆ clear_ncc_model
◆ clear_all_ncc_models

  其他
◆ get_ncc_model_params提取一个 NCC(归一化算法,快速匹配)模型的参数
◆ get_ncc_model_origin提取一个 NCC(归一化算法,快速匹配)模型的原点(参考点)
◆ set_ncc_model_origin设置一个 NCC(归一化算法,快速匹配)模型的原点(参考点)
◆ determine_ncc_model_params 制定 NCC(归一化算法,快速匹配)模型参数

 

create_ncc_model( Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Metric : ModelID )

函数作用:

创建NCC模板,参数AngleStart和AngleExtent决定可能的旋转范围

参数列表:

Template(in):单通道图像,它的区域可被创建为模板

NumLevels(in):金字塔的最大层级

AngleStart(in):模板的最小旋转

AngleExtent(in):旋转角度范围

AngleStep(in):角度步长

Metric(in):匹配标准

ModelID(out):模板句柄

可能前置项:

draw_region, reduce_domain, threshold

可能后置项:

find_ncc_model, get_ncc_model_params, clear_ncc_model, write_ncc_model, set_ncc_model_origin, set_ncc_model_param

可能替代项:

create_shape_model, create_scaled_shape_model, create_aniso_shape_model, create_template_rot

find_ncc_model( Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels : Row, Column, Angle, Score )

函数作用:

用于NCC模板匹配。

参数AngleStart和AngleExtent决定被搜寻模板的角度旋转范围。搜索的角度旋转范围不适用于模运算2*pi。

如果create_ncc_model使用AngleStart=-20和AngleExtent=40,而find_ncc_model用AngleStart=350和AngleExtent=20,该模板不会被找到,即使角度是重叠的(在模数运算法则内)。如果想要找到该模板,需将find_ncc_model的AngleStart置为-10。

参数MinScore决定被匹配到的实例最小分数,该值越大,算法速度越快。

参数NumMatches表示被找到的实例最大数,如果大于NumMatches的实例被找到,只有最佳的NumMatches个实例返回。如果小于NumMatches个的实例被找到,则找到几个就几个,因此MinScore的优先级大于NumMatches。

参数列表:

Image(in):单通道图像,它的区域可被创建为模板

ModelID(in):模板句柄

AngleStart(in):模板的最小旋转

AngleExtent(in):旋转角度范围

MinScore(in):被找到的模板最小分数

NumMatches(in):被找到的模板个数

MaxOverlap(in):被找到的模板实例最大重叠部分

SubPixel(in):亚像素级别标志,true,false

NumLevels(in):金字塔层级数

Row(out):被找到的模板实例行坐标

Column(out):被找到的模板实例列坐标

Angle(out):被找到的模板实例的旋转角度

Score(out):被找到的模板实例的分数

可能前置项:

create_ncc_model, read_ncc_model, set_ncc_model_origin

可能后置项:

clear_ncc_model

可能替代项:

find_shape_model, find_scaled_shape_model, find_aniso_shape_model, find_shape_models, find_scaled_shape_models, find_aniso_shape_models, best_match_rot_mg

halcon之NCC匹配的更多相关文章

  1. 基于HALCON的模板匹配方法总结

    注:很抱歉,忘记从转载链接了,作者莫怪.... 基于HALCON的模板匹配方法总结 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多 ...

  2. 转载:基于HALCON的模板匹配方法总结

    转载链接:     http://blog.csdn.net/b108074013/article/details/37657801 很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总 ...

  3. 基于HALCON的模板匹配方法总结 (转)

    很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化进行了研究,写了一篇& ...

  4. Halcon中模板匹配方法的总结归纳

    基于组件的模板匹配: 应用场合:组件匹配是形状匹配的扩展,但不支持大小缩放匹配,一般用于多个对象(工件)定位的场合. 算法步骤: 1.获取组件模型里的初始控件 gen_initial_componen ...

  5. halcon三种模板匹配方法

    halcon有三种模板匹配方法:即Component-Based.Gray-Value-Based.Shaped_based,分别是基于组件(或成分.元素)的匹配,基于灰度值的匹配和基于形状的匹配,此 ...

  6. halcon——缺陷检测常用方法总结(模板匹配(定位)+差分)

    引言 机器视觉中缺陷检测分为一下几种: blob分析+特征 模板匹配(定位)+差分 光度立体:halcon--缺陷检测常用方法总结(光度立体) - 唯有自己强大 - 博客园 (cnblogs.com) ...

  7. halcon应用案例探究

    14.1  Access 1. get_region_chain 功能:一个对象的轮廓(contour)作为链式码. 2. get_region_contour 功能:查询一个目标的轮廓(contou ...

  8. 双目立体匹配——归一化互相关(NCC)

    归一化相关性,normalization cross-correlation,因此简称NCC,下文中笔者将用NCC来代替这冗长的名称. NCC,顾名思义,就是用于归一化待匹配目标之间的相关程度,注意这 ...

  9. 超越OpenCV速度的MorphologyEx函数实现(特别是对于二值图,速度是CV的4倍左右)。

    最近研究了一下opencv的 MorphologyEx这个函数的替代功能, 他主要的特点是支持任意形状的腐蚀膨胀,对于灰度图,速度基本和CV的一致,但是 CV没有针对二值图做特殊处理,因此,这个函数对 ...

随机推荐

  1. BZOJ.3532.[SDOI2014]LIS(最小割ISAP 退流)

    BZOJ 洛谷 \(LIS\)..经典模型? 令\(f_i\)表示以\(i\)结尾的\(LIS\)长度. 如果\(f_i=1\),连边\((S,i,INF)\):如果\(f_i=\max\limits ...

  2. 英语口语练习系列-C33-露营-谈论日期-离思

    词汇-露营 Camping camping 露营 campground camping camper picnic bonfire backpack tent public campground co ...

  3. 潭州课堂25班:Ph201805201 django 项目 第八课 注册功能分析,图片验证码视图设计 (课堂笔记)

    1,用户名     是否已注册 2,手机号 是否被注册 3,图形验证码 4,短信验证码, 5,验证成功后,向后台提交数据:用户名,密码,手机号,短信验证 要写这五个视图, 获取图形验证码,请求方式:g ...

  4. 开车旅行 [NOIP 2012]

    Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi,城市 i ...

  5. 3ds max学习笔记-- 复合对象运算

    1,ProBoolean(超级布尔) 栗子: 新建一长方体,两个圆柱体,如下: 选择底部长方体,进入[复合对象],修改[操作],单击[拾取操作对象B],点击圆柱: 效果如下,线面较多: 高级布尔效果图 ...

  6. Celery框架

    在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式. 生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是 ...

  7. Java几种常见的编码方式

    几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言 ...

  8. 通过DCGAN进行生成花朵

    环境是你要安装Keras和Tensorflow 先来个network.py,里面定义了生成器网络和鉴别器网络: # -*- coding: UTF-8 -*- """ D ...

  9. oracle跨库连接查询

    一.授权(本地客户器端授权当前用户) grant create database link to szfile 第一种连接方法:配置本地数据库服务器的tnsnames.ora文件 SZFILE = ( ...

  10. JSAP107

    JSAP107 1.目标 2. 需要考虑的问题: 案例:图片随着鼠标飞兼容性代码 <!DOCTYPE html> <html lang="en"> < ...