使用OpenCV实现Halcon算法(2)形状匹配开源项目,shape_based_matching

声明:本篇仅仅是分享网上的开源项目,算法非本人原创。

目前市面上的商业软件,VisionPro的PatMax算法,Halcon的形状匹配算法都是基于边缘的模版匹配。

1、GeoMatch,Edge-Based-Template-Matching

这是一个印度小哥写的开源项目(★★★重点推荐★★★)

OpenCV实现边缘模板匹配算法

干货 | OpenCV实现边缘模板匹配算法 - 云+社区 - 腾讯云

匹配相似度的计算公式:

用opencv编写的形状匹配算法,但不具旋转和缩放功能。

Edge Based Template Matching - CodeProject

https://www.codeproject.com/KB/graphics/Edge_Based_template_match/GeoMatch_src.zip

Edge-Based-Template-Matching: Edge Based Template Matching

GeoMatch_src(VS2015+OpenCv3.3版)_shape_based_matching-C++代码类资源-CSDN下载 GeoMatch_src(VS2015+OpenCv3.3版)

2、shape_based_matching

上海交通大学机器人所(★★★重点推荐★★★)

尝试实现基于halcon形状的匹配,请参阅halcon工程师编写的《机器视觉算法和应用》,第317 3.11.5页,

try to implement halcon shape based matching, refer to machine vision algorithms and applications, page 317 3.11.5, written by halcon engineers

https://github.com/meiqua/shape_based_matching ++ 没趣啊 - 知乎

https://github.com/daxiaHuang/shape_based_matching_subpixel

https://github.com/wangyuou/QVision 第三方作者使用Qt调用这个Shape Match库

基于形状的匹配与opencv linemod算法有相似之处。但是与opencv linemod src相比,我们从6个方面进行了改进:

  • 删除深度模态,因此我们不需要虚拟功能,这可能会加快速度
  • opencv linemod不能使用超过63个功能。现在最多可以有8191个
  • 用于旋转和缩放img的简单代码,以进行培训。有关示例,请参见test.cpp
  • nms用于精确的边缘选择
  • 一个通道的方向提取可节省时间,灰色img的速度稍快
  • MIPP用于多个平台SIMD,例如x86 SSE AVX,arm neon。为了获得更好的性能,我们将MIPP扩展到uint8_t以获得一些说明(否则我们只能使用半个特征点来避免int8_t溢出)
  • 直接旋转特征以加快模板提取;selectScatteredFeatures更均匀;详尽选择所有功能(如果不够),而不是中止模板(但功能<= 4会中止)

opencv自带linemod算子
https://github.com/opencv/opencv_contrib/blob/4.x/modules/rgbd/src/linemod.cpp
https://github.com/opencv/opencv_contrib/blob/4.x/modules/rgbd/samples/linemod.cpp

3、其他相关的博文

基于边界的模板匹配的原理及算法实现

基于边界的模板匹配的原理及算法实现_小新识图的博客-CSDN博客_halcon模板匹配原理 基于边界的模板匹配的原理及算法实现,文章很火

基于边界的模板匹配的原理及算法实现C++_模板匹配算法原理,c++模板匹配算法-C++代码类资源-CSDN下载

原创:突破halcon核心技术--模板匹配算法_pww71的专栏-CSDN博客_halcon模板匹配原理 原创:突破halcon核心技术--模板匹配算法

一种基于边缘的模版匹配算法

一种基于边缘的模版匹配算法_e1ki0lp-CSDN博客_patmax算法

opencv实现基于边缘的形状匹配算法

https://github.com/zhouqun92/ShapeMatch

https://github.com/dmccskylove/ShapeMatch

linemod形状匹配算法

https://github.com/cuijianzhu/linemod

https://github.com/wg-perception/linemod

linemod算法小结_朱铭德的博客-CSDN博客_linemod

4、图像匹配算法分为3类:

基于灰度的匹配算法、基于特征的匹配算法、基于关系的匹配算法

(1)基于灰度的模板匹配算法:模板匹配(Blocking Matching)是根据已知模板图像到另一幅图像中寻找与模板图像相似的子图像。基于灰度的匹配算法也称作相关匹配算法,用空间二维滑动模板进行匹配,不同匹配算法主要体现在相关准则的选择方面,常见的基于模板的匹配算法可以参考下面的链接:

参考:基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法

【图像配准】基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法_hujingshuang-CSDN博客_ncc匹配

(2)基于特征的匹配算法:(也叫图像配准,Image Registration

首先提取图像的特征,再生成特征描述子,最后根据描述子的相似程度对两幅图像的特征之间进行匹配。图像的特征主要可以分为点、线(边缘)、区域(面)等特征,也可以分为局部特征和全局特征。

区域(面)特征提取比较麻烦,耗时,因此主要用点特征和边缘特征。

点特征包括:Harris 、Moravec、KLT、SIFT、SURF 、BRIEF、SUSAN、FAST、CENSUS、FREAK(点击打开链接)、BRISK(点击打开链接)、ORB、光流法(点击打开链接)、A-KAZE等。

边缘特征包括:LoG算子、Robert算子、Sobel算子、Prewitt算子、Canny算子等。

对于所有类型的几何变换,SIFT和BRISK的总体精度最高,SIFT被认为是最精确的算法。定量比较表明,特征检测描述器检测大量特征的能力的一般顺序为:

ORB>BRISK>SURF>SIFT>AKAZE>KAZE

特征检测描述器的整体图像匹配速度顺序为:

ORB (1000) >BRISK (1000) >AKAZE>KAZE>SURF (64D)>SIFT>ORB>BRISK>SURF (128D)

经典的特征匹配算法有SIFT、SURF、ORB等,这三种方法在OpenCV里面都已实现。SURF基本就是SIFT的全面升级版,
有SURF基本就不用考虑SIFT,而ORB的强点在于计算时间,以下具体比较:

计算速度:ORB>>SURF>>SIFT(各差一个量级)
旋转鲁棒性:SURF>ORB~SIFT(~表示差不多)
模糊鲁棒性:SURF>ORB~SIFT
尺度变换鲁棒性:SURF>SIFT>ORB(ORB并不具备尺度变换性)

所以结论就是,如果对计算实时性要求非常高,可选用ORB算法,但基本要保证正对拍摄;如果对稳定性要求稍高,可以选择SURF;基本不用SIFT。
此外补充一点,自从OpenCV3.x开始,受到SIFT跟SURF专利授权的影响,OpenCV正式的发布版本中已经移除了SIFT跟SURF算法。
ORB特征提取算法是基于FAST跟BRIEF算法改进的组合算法,其中FAST实现关键点/特征点的检测,在此基础上基于几何矩添加方向属性,
BRIEF实现描述子生成,添加旋转不变性支持。

ORB特征匹配速度快的一个原因之一就是使用字符串向量的描述子,避免了浮点数计算。字符串描述子匹配上可以采用汉明距离或者LSH改进算法实现,
相比浮点数计算L2距离进一步降低了计算量。所以在一般情况下建议使用ORB特征匹配,如果效果不好再尝试AKAZE/SURF/SIFT等其它特征匹配算法。

(3)基于关系的匹配算法:建立语义的网络,是人工智能领域在图像处理中的应用,但还没有突破性的进展。

---

参考文献,摘自知乎:计算机视觉中,目前有哪些成熟的匹配定位算法?

1、可以看一下主流的商业机器视觉库,比如Halcon,康耐视的VisionPro及它的PatMax专利算法,OpenVision里的Match和Find模块,这些商业库里的匹配算法都占有很高的篇幅和重要性,而它们的鲁棒性也不是一般算法可以比拟的。

再推荐一本书,《机器视觉算法及应用 Machine vision algorithm and Application》,是Halcon的资深研发人员写的,有一章,模版匹配,里有介绍Halcon里实现的匹配算法的实现原理。这本书里面没有代码,也没有公式验证,有少量必要的公式罗列。

http://product.dangdang.com/1511962373.html

http://product.dangdang.com/1521862365.html

2、可以用一些工具 (在Github上搜索Find-Object或者Template matching) 实际看看

3、GMS了解一下;要求实时(精度也不差): orb+GMS;要求精度: A-SIFT+GMS;相同程度匹配,速度精度比RANSAC效果好

4、sift/surf+flann+ransac,一般情况都好使

SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT)

SURF,(SpeededUpRobustFeatures),是对SIFT的一种改进,主要特点是快速。

Sift算法的优点是特征稳定,对旋转、尺度变换、亮度保持不变性,对视角变换、噪声也有一定程度的稳定性;缺点是实时性不高,并且对于边缘光滑目标的特征点提取能力较弱。
Surf(Speeded Up Robust Features)改进了特征的提取和描述方式,用一种更为高效的方式完成特征的提取和描述。

5、Face Detection,Template Matching , SURF , SIFT to detect features and keypoints in images .

https://github.com/vishalgolcha/ImageMatching

OpenCV开发笔记(六十七):红胖子8分钟带你深入了解特征点暴力匹配(图文并茂+浅显易懂+程序源码)_长沙红胖子Qt C++ Linux Arm-CSDN博客  cv::BFMatcher暴力匹配

6、opencv+python实现图像匹配----模板匹配、特征点匹配

opencv+python实现图像匹配----模板匹配、特征点匹配_GaoSimin-CSDN博客_python 图像匹配

Python 使用Opencv实现图像特征检测与匹配

Python 使用Opencv实现图像特征检测与匹配_Xy-Huang的博客-CSDN博客_python图像特征提取与匹配

自动驾驶汽车视觉- 图像特征提取与匹配技术

自动驾驶汽车视觉- 图像特征提取与匹配技术 - 知乎

https://github.com/williamhyin/SFND_2D_Feature_Tracking

7、一步一步实现多尺度多角度的形状匹配算法(C++版本)

一步一步实现多尺度多角度的形状匹配算法(C++版本)_楷尘·极客-CSDN博客_形状匹配算法

8、Boyer-Moore 精确匹配算法实现(C/C++)

Boyer-Moore 精确匹配算法实现(C/C++)_牛晨光的博客-CSDN博客

Boyer Moore 算法的C++实现以及一些独特的感受_u014085000的专栏-CSDN博客

### 回答1: 很抱歉,我是一名语言模型AI,无法提供代码实现。但是,我可以告诉您,OpenCVHalcon都是计算机视觉领域的常用工具,可以用于图像处理、目标检测、图像识别等方面。如果您想使用OpenCV实现Halcon算法,可以先了解Halcon算法的原理和实现方式,然后使用OpenCV的相关函数和库进行编程实现。同时,也可以参考一些相关的教程和案例,加深对OpenCVHalcon的理解和应用。 ### 回答2: Halcon算法是一种被广泛应用的机器视觉算法,其在工业视觉、医学影像等领域都有广泛的应用。而OpenCV是一款开源的计算机视觉库,提供了丰富的图像处理和分析工具。因此,将Halcon算法应用于OpenCV中,不仅可以充分利用OpenCV的图像处理能力,还可以拥有Halcon算法的强大功能,实现更高效、精准的图像处理。 要实现Halcon算法,需要对于Halcon算法的相关知识有一定的了解。首先,需要了解Halcon算法的特点和主要应用。其次,需要了解OpenCV的基本操作方法和常用函数,如图像读取、图像处理、滤波等操作。然后,需要将Halcon算法OpenCV进行结合,根据具体的应用场景,选择合适的Halcon算法进行调用,实现图像处理和分析。 具体实现过程可以分为以下几步: 1. 首先,使用OpenCV读取图像,将图像数据存储在CV::Mat数据结构中。然后,将CV::Mat数据结构转换为Halcon图像数据结构。 2. 在Halcon中进行图像处理和分析。根据需求选择合适的Halcon算法进行调用,如形状匹配、特征提取、图像分类等。 3. 将Halcon处理结果返回到OpenCV中。可以将Halcon结果存储为CV::Mat数据结构,以便后续OpenCV操作使用。 4. 最后,根据具体需求,使用OpenCV对处理结果进行后续处理和分析。 需要注意的是,在使用Halcon算法的同时,要考虑到Halcon算法的复杂性和计算量。在实际应用中,应该根据具体情况灵活选择算法并调整参数,以保证算法的高效和准确性。 综上所述,使用OpenCV实现Halcon算法可以充分发挥两者的优势,实现高效、准确的图像处理和分析,适用于各种机器视觉和图像分析领域的应用。 ### 回答3: OpenCVHalcon都是图像处理领域广泛使用的开源软件库,它们都提供了一系列的算法实现各种图像处理任务,例如图像滤波、边缘检测、物体识别等。 HACON是一款针对工业领域图像处理的软件,而OpenCV则更加通用。在工业领域,Halcon有其不可替代的优势,因此有时候需要使用Halcon提供的算法,但是由于Halcon本身是商业软件,需要购买授权才能使用,因此很多人会选择使用OpenCV实现Halcon中的一些算法实现Halcon算法的一个常见做法是使用OpenCV的C++接口,通过编写一些桥接代码来转换Halcon算法OpenCV的数据格式,使得OpenCV能够调用Halcon算法进行处理。具体来说,我们需要在OpenCV中为每一个Halcon算法编写一个相应的函数或类,以便OpenCV能够以类似于调用OpenCV函数的方式来使用Halcon算法。 例如,我们要实现Halcon中的模板匹配算法。首先,我们需要将Halcon中的模板图像和待匹配图像转换为OpenCV的Mat类型(即OpenCV中的图像数据存储格式)。同时,我们也需要将Halcon中的参数转换为对应的OpenCV参数。然后,我们可以调用Halcon提供的模板匹配函数进行处理,之后再将Halcon的结果转换为OpenCV的数据类型,并返回给OpenCV调用者。 需要注意的是,使用OpenCV实现Halcon算法需要对两个库都非常熟悉,并具有深厚的图像处理经验。由于HalconOpenCV的设计思路和接口不同,因此在实现Halcon算法时需要考虑到数据类型的转换、参数的正确性以及算法流程的实现等细节。因此,使用OpenCV实现Halcon算法需要有一定的技术储备和实践经验。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值