OpenC++V于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS *** 作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。最新版本是3.3 ,2017年8月3日发布。
OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。
OpenCV 为Intel® Integrated Performance PrimiTIves (IPP) 提供了透明接口。 这意味着如果有为特定处理器优化的 IPP 库, OpenCV 将在运行时自动加载这些库。
OpenCV的集成芯片基板定位技术系统使用的CCD相机是型号为XC-ES50CE的SONY相机,有效像素为752×582,图像采集卡使用的是比利时Euresys公司的产品,型号为PicoloPro2。在整个系统中,最为关键的问题就是模板匹配
1基于灰度的模板匹配方法
本文主要比较了几种基于灰度的图像匹配算法:SSDA算法,金字塔算法,NCC算法等。
模板匹配的基本原理是通过相关函数的计算来找到它和被搜索图的坐标位置。如图3所示,设模板T(n×m像素点)叠放在搜索图S上移动,模板覆盖下的那块搜索图为子图Sij,i,j为这块子图的左上角像点在S图中的坐标。比较T和Sij的内容,若两
1.1SSDA算法
序贯相似性检测算法(即SSDA算法)是对传统模板匹配算法的改进。SSDA算法计算子图像和模
板图像之间的差值,求和时不需要计算所有像素,而是随机抽取某几点像素,只要其和超过设定的阈值,则说明当前位置不匹配,进行下个位置的计算。
但是该算法本身没有抗干扰性,如果在外界有噪声的情况下,算法的精确度不高。
1.2金字塔算法
金字塔算法也叫分层算法,是直接基于人眼的
视觉特点,先粗后细地观看事物,步骤如下:
(1)预处理。首先对模板和搜索图进行分层预处理。通过每2×2=4个像素平均为一个像素构成二级图像,然后将此图像再用同样的方法处理后得到一个分辨率更低的图像。如此反复,我们可以得到K个处理后的图像。
(2)先粗后细的匹配。先从低分辨率的图像Sk和TK开始进行匹配运算,找到粗匹配位置(xK,yK),然后在较高分辨率的图像Sk-1和Tk-1上的粗匹配位置进行搜索,如此下去,一直到最高分辨率的SO和TO上找到匹配位置为止。
1.3NCC算法
NCC算法就是归一化互相关匹配算法,是一个
经典的匹配算法,它是通过计算模板图像和待匹配图像的互相关值来决定匹配的程度,方法如下:
这种算法简单,适用于尺寸较小的图像匹配,且具有很强的抗白噪声能力,在灰度变化及几何畸变不大的情况下精度很高。
2基于OpenCV的模板匹配程序的实现2.1程序流程及其实现
程序的流程如图4所示,实验采用的算法是NCC算法,函数完成比较后,通过使用cvMinMaxLoc找全局最大值,然后将匹配结果在原图的对应位置标记出来(如图5所示)。
程序实现主要利用OpenCV函数库中的cvMatchTemplate函数,通过滑动过整个待匹配图像,用指定的NCC算法比较模板图像与待匹配图像尺寸为w×h的重叠区域,并且将比较结果保存起来
2.2OpenCV简介
开放源代码的计算机视觉类库OpenCV(IntelOpenSourceComputerVisionLibrary)由英特尔公司位于俄罗斯的研究实验室所基于IPL(IntelImageProcessingLibrary)开发,并与之兼容。具有良好的独立性、跨平台性、功能强大、处理速度快等特点。
3实验数据采用的是一张640×484的原图,以及一张64×74的模板图,实验用电脑CPU为IntelCeleronCPU4201.6GHz,内存为1G。经过实验得出,匹配的平均时间为100.128ms,且能找到准确位置,能够满足厂家提出的2,000个/小时的技术要求。
4结论综上所述,利用OpenCV开发的模板匹配程序,拥有匹配准确、执行效率较高等特点,对于个别处理器还进行了优化,适用于对实时性要求不太高的场合,能够满足该企业芯片基板的定位要求,目前该系统已在企业运行
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)