分享一个OpenCV仿照Halcon的高性能形状模板匹配作品(基于Qt/OpenCV/SIMD指令集优化)

声明:本文非原创,转载自朋友(QQ:66557370)的博文。

https://blog.csdn.net/manuoo/article/details/131432061

exe体验地址:

https://github.com/mwwzbinf/mwwz-shape-match/releases

或者网盘:

https://pan.baidu.com/s/1G3Qk9wDZIrPeQOLxmaaU2w?pwd=aabb

参照halcon中的create_shape_model_xld算子,自己写了一个基于几何图形创建模板的函数,目前只支持圆形和矩形,圆形需要指定半径,矩形需要指定长宽。与从图像创建模板不同,特征点不能在图像中直接提取得到,而是需要从上一层金字塔下采样得到,方法也很简单,直接选择偶数行列的特征点即可。

圆形模板创建及匹配

矩形模板创建及匹配

        在实际应用中矩形会在行、列方向呈现不同的缩放尺度,圆形也会变成椭圆,所以需要将行方向和列方向的缩放尺度单独求出来,这也是halcon中的find_aniso_shape_model算子,俗称各向异性模板匹配,实现起来也不难,在find_scaled_shape_model的基础上改一下,执行效果如下。

        可见匹配效果很不错,这对于识别圆形、椭圆、矩形这些常见形状是很有用的。由于要分别求出行、列方向的缩放尺度,相比各向同性多出一个维度,匹配时间有所增加。后续我会考虑如何加速,以及加入更多的几何图形(或者是它们的组合),如果大家有什么好建议和其他需求,欢迎私信我。

---

原创作者的其它文章

基于形状的模板匹配之变形匹配—max_deformation

基于形状的模板匹配之候选点选择_模板匹配 顶层候选点怎么做_kitajimanu的博客-CSDN博客 

参考文献

SIMD(单指令流多数据流)文章收录 - 知乎

C++中使用SIMD的方法_c++ simd_9Kalikali的博客-CSDN博客

使用SIMD技术提高C++程序性能_lowtech的博客-CSDN博客


————————————————

声明:本文非原创,转载自朋友(QQ:66557370)的博文。
版权声明:本文为CSDN博主「kitajimanu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/manuoo/article/details/131432061

### Halcon 的底层实现、原理与机制 Halcon 是一种功能强大且高效的机器视觉库,其内部实现了许多复杂的算法优化技术。以下是关于 Halcon 底层实现及其工作原理的一些关键点: #### 1. 图像存储方式 在 Halcon 中,图像通常以 `HObject` 或者更具体的类型(如 `HImage`)来表示。这些对象本质上是一个二维数组结构,其中每个像素值可以是灰度值或者 RGB 值[^1]。 对于 OpenCV 来说,图像则通过 `cv::Mat` 类型进行存储,这是一种灵活的矩阵容器,支持多种数据类型的存储以及动态大小调整。两者都采用类似的内存布局策略——连续线性排列像素数据以便于快速访问。 #### 2. 核心计算引擎 Halcon 使用高度优化的核心计算引擎完成各种操作,比如滤波器应用、边缘检测等。该引擎利用现代 CPU 架构特性(例如 SIMD 指令集),从而显著提升性能效率[^3]。此外,部分复杂运算可能还会调用 GPU 加速模块进一步提高速度表现。 #### 3. 特征提取方法论 特征检测是指从输入图片里自动识别某些特定模式的过程;这构成了很多高级视觉任务的基础步骤之一。Halocn 支持广泛的特征描述符种类,包括但不限于SIFT/SURF/ORB等等。每种都有各自的优势所在:有的擅长旋转不变形保持能力更强些;另一些则侧重执行时间短等方面考虑更多一点。 #### 4. 模板匹配过程解析 模板匹配是一种常见但非常有效的目标定位手段,在已知待查找物体外观前提下尤为适用。基本思路就是将候选区域逐一与给定样本做相似度比较直到找到最佳位置为止。为了加快这一耗时环节的速度,Halcon 实现了一些巧妙技巧, 如金字塔降采样缩小搜索范围后再精确定位最终坐标点; 同时还引入了多尺度变换应对不同尺寸情况下的需求变化等问题. #### 5. 数学基础支撑体系构建 无论是上述提到的手眼标定还是后续涉及到的最大似然估计理论框架搭建都需要扎实深厚的数学功底作为依托才能顺利完成相应推导演算等工作内容。因此可以说整个系统背后隐藏着大量精密设计过的方程式组群共同协作才得以呈现出如此优异的表现效果出来给大家看到. ```python import cv2 as cv img = cv.imread('example.jpg') # 在OpenCV中的读取方式 print(type(img)) # 输出<class 'numpy.ndarray'> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值