做影视网站难吗,客户网站分析,嵌入式工程师要学什么,长春网站建设网诚传媒很早就想总结一下前段时间学习HALCON的心得#xff0c;但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习#xff0c;做了许多的练习和实验#xff0c;并对基于HDevelop的形状匹配算法的参数优化进行了研究#xff0c;写了一篇《基于HDevelop的形状匹配算法参数… 很早就想总结一下前段时间学习HALCON的心得但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习做了许多的练习和实验并对基于HDevelop的形状匹配算法的参数优化进行了研究写了一篇《基于HDevelop的形状匹配算法参数的优化研究》文章总结了在形状匹配过程中哪些参数影响到模板的搜索和匹配又如何来协调这些参数来加快匹配过程提高匹配的精度这篇paper放到了中国论文在线了需要可以去下载。 德国MVTec公司开发的HALCON机器视觉开发软件提供了许多的功能在这里我主要学习和研究了其中的形状匹配的算法和流程。HDevelop开发环境中提供的匹配的方法主要有三种即Component-Based、Gray-Value-Based、Shape-Based,分 别是基于组件或成分、元素的匹配基于灰度值的匹配和基于形状的匹配。这三种匹配的方法各具特点分别适用于不同的图像特征但都有创建模板和寻找模 板的相同过程。这三种方法里面我主要就第三种基于形状的匹配做了许多的实验因此也做了基于形状匹配的物体识别基于形状匹配的视频对象分割和基于 形状匹配的视频对象跟踪这些研究从中取得较好的效果简化了用其他工具比如VC来开发的过程。在VC下往往针对不同的图像格式就会弄的很头疼更不用说编写图像特征提取、模板建立和搜寻模板的代码呢我想其中间过程会很复杂效果也不一定会显著。下面我就具体地谈谈基于HALCON的形状匹配算法的研究和心得总结。 1. Shape-Based matching的基本流程 HALCON提 供的基于形状匹配的算法主要是针对感兴趣的小区域来建立模板对整个图像建立模板也可以但这样除非是对象在整个图像中所占比例很大比如像视频会议中人 体上半身这样的图像我在后面的视频对象跟踪实验中就是针对整个图像的这往往也是要牺牲匹配速度的这个后面再讲。基本流程是这样的如下所示 ⑴ 首先确定出ROI的矩形区域这里只需要确定矩形的左上点和右下点的坐标即可gen_rectangle1()这个函数就会帮助你生成一个矩形利用area_center()找到这个矩形的中心 ⑵ 然后需要从图像中获取这个矩形区域的图像reduce_domain()会得到这个ROI这之后就可以对这个矩形建立模板而在建立模板之前可以先对这个区域进行一些处理方便以后的建模比如阈值分割数学形态学的一些处理等等 ⑶ 接下来就可以利用create_shape_model()来创建模板了这个函数有许多参数其中金字塔的级数由Numlevels指定值越大则找到物体的时间越少AngleStart和AngleExtent决定可能的旋转范围AngleStep指定角度范围搜索的步长这里需要提醒的是在任何情况下模板应适合主内存搜索时间会缩短。对特别大的模板用Optimization来减少模板点的数量是很有用的MinConstrast将模板从图像的噪声中分离出来如果灰度值的波动范围是10则MinConstrast应当设为10Metric参数决定模板识别的条件如果设为’use_polarity’则图像中的物体和模板必须有相同的对比度创建好模板后这时还需要监视模板用inspect_shape_model()来完成它检查参数的适用性还能帮助找到合适的参数另外还需要获得这个模板的轮廓用于后面的匹配get_shape_model_contours()则会很容易的帮我们找到模板的轮廓 ⑷ 创建好模板后就可以打开另一幅图像来进行模板匹配了。这个过程也就是在新图像中寻找与模板匹配的图像部分这部分的工作就由函数find_shape_model()来承担了它也拥有许多的参数这些参数都影响着寻找模板的速度和精度。这个的功能就是在一幅图中找出最佳匹配的模板返回一个模板实例的长、宽和旋转角度。其中参数SubPixel决定是否精确到亚像素级设为’interpolation’则会精确到这个模式不会占用太多时间若需要更精确则可设为’least_square’,’lease_square_high’但这样会增加额外的时间因此这需要在时间和精度上作个折中需要和实际联系起来。比较重要的两个参数是MinSocre和Greediness前一个用来分析模板的旋转对称和它们之间的相似度值越大则越相似后一个是搜索贪婪度这个值在很大程度上影响着搜索速度若为0则为启发式搜索很耗时若为1则为不安全搜索但最快。在大多数情况下在能够匹配的情况下尽可能的增大其值。 ⑸ 找到之后还需要对其进行转化使之能够显示这两个函数vector_angle_to_rigid()和affine_trans_contour_xld()在这里就起这个作用。前一个是从一个点和角度计算一个刚体仿射变换这个函数从匹配函数的结果中对构造一个刚体仿射变换很有用把参考图像变为当前图像。 其详细的流程图和中间参数如下图所示无法上传 2. 基于形状匹配的参数关系与优化 在HALCON的说明资料里讲到了这些参数的作用以及关系在上面提到的文章中也作了介绍这里主要是重复说明一下这些参数的作用再强调一下它们影响匹配速度的程度 在为了提高速度而设置参数之前有必要找出那些在所有测试图像中匹配成功的设置这时需考虑以下情况 ① 必须保证物体在图像边缘处截断也就是保证轮廓的清晰这些可以通过形态学的一些方法来处理 ② 如果Greediness值设的太高就找不到其中一些可见物体这时最后将其设为0来执行完全搜索 ③ 物体是否有封闭区域如果要求物体在任何状态下都能被识别则应减小MinScore值 ④ 判断在金字塔最高级上的匹配是否失败可以通过find_shape_model减小NumLevels值来测试 ⑤ 物体是否具有较低的对比度如果要求物体在任何状态下都能被识别则应减小MinContrast值 ⑥ 判断是否全局地或者局部地转化对比度极性如果需要在任何状态下都能被识别则应给参数Metric设置一个合适的值 ⑦ 物体是否与物体的其他实例重叠如果需要在任何状态下都能识别物体则应增加MaxOverlap值 ⑧ 判断是否在相同物体上找到多个匹配值如果物体几乎是对称的则需要控制旋转范围 如何加快搜索匹配需要在这些参数中进行合理的搭配有以下方法可以参考 ① 只要匹配成功则尽可能增加参数MinScore的值 ② 增加Greediness值直到匹配失败同时在需要时减小MinScore值 ③ 如果有可能在创建模板时使用一个大的NumLevels即将图像多分几个金字塔级 ④ 限定允许的旋转范围和大小范围在调用find_shape_model时调整相应的参数 ⑤ 尽量限定搜索ROI的区域 除上面介绍的以外在保证能够匹配的情况下尽可能的增大Greediness的值因为在后面的实验中用模板匹配进行视频对象跟踪的过程中这个值在很大程度上影响到匹配的速度。 当然这些方法都需要跟实际联系起来不同图像在匹配过程中也会有不同的匹配效果在具体到某些应用不同的硬件设施也会对这个匹配算法提出新的要求所以需要不断地去尝试。在接下来我会结合自己做的具体的实验来如何利用HALCON来进行实验主要是在视频对象分割和视频对象的跟踪方面。