ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

海康VM教育版免加密狗实战:视觉定位从畸变矫正到九点标定

海康VM教育版免加密狗实战:视觉定位从畸变矫正到九点标定 机器视觉这行有个很现实的门槛软件授权。很多新手或者小团队想入门视觉定位一打听正版软件的价格就劝退了更别提还要配加密狗。海康VM的教育版算是给了一条活路功能上做了裁剪但做基础的视觉定位项目完全够用。我最近用教育版完整跑了一个定位项目从畸变矫正到九点标定再到输出坐标全程没碰加密狗踩了一些坑也总结了一些经验。这篇内容就是把这个过程完整拆开讲一遍适合零基础想入门视觉定位的朋友也适合手上有教育版但不知道怎么把项目跑通的人。核心关键词就几个海康VM、视觉定位、免加密狗、畸变矫正、九点标定我会围绕这几个点把整个流程讲透。1. 项目整体设计与方案选型1.1 为什么选海康VM教育版而不是其他方案做视觉定位摆在面前的选择其实不少。开源方案有OpenCV加自己写标定和定位算法商业方案有各种品牌的视觉软件。我选海康VM教育版理由很直接图形化流程搭建不需要从零写代码标定和定位的算子都是现成的教育版免加密狗就能跑学习成本低。OpenCV方案灵活度最高但你要自己实现相机标定、畸变矫正、模板匹配、坐标转换这一整套东西。光是九点标定的矩阵求解和坐标映射就够写一阵子调试起来也麻烦。对于想快速验证方案或者教学演示的场景性价比不高。商业视觉软件里海康VM的生态比较完整算子丰富文档和教程也多。教育版虽然有些高级功能受限比如某些深度学习算子用不了但做传统的视觉定位——模板匹配加标定——完全没问题。而且教育版和正式版的界面、操作逻辑一致学会了教育版后面换正式版几乎零成本迁移。注意教育版有功能限制具体哪些算子可用需要以你拿到的版本为准。建议先确认你的项目所需算子是否在可用列表里避免做到一半发现关键算子用不了。1.2 视觉定位项目的核心链路拆解一个完整的视觉定位项目链路可以拆成这么几段图像采集、畸变矫正、标定像素坐标到物理坐标的映射、目标定位模板匹配或特征匹配、坐标输出。图像采集是源头相机和镜头的选型直接决定了后面标定和定位的精度上限。畸变矫正解决的是镜头带来的图像变形问题尤其是短焦镜头畸变不矫正的话标定精度会大打折扣。标定是建立像素坐标系和物理坐标系之间的对应关系九点标定是最常用的方法。目标定位是在图像里找到你要的那个特征输出它的像素坐标。坐标输出是把像素坐标通过标定关系转换成物理坐标发给下游设备。这个链路里畸变矫正和九点标定是两个最容易出问题的环节。畸变矫正的参数没调好标定出来的映射关系就是错的。九点标定的点位选取和顺序如果不对解出来的矩阵也是错的。后面我会重点讲这两个部分。1.3 免加密狗方案的实际限制与应对教育版免加密狗这是它最大的卖点但也要清楚它的限制。根据我的实际使用教育版在算子数量、运行时长、分辨率支持上可能有约束。比如某些高精度匹配算子可能不可用或者连续运行一段时间后会提示。这些限制对于学习和做demo够用但如果要上产线还是得考虑正式版。应对策略上我建议把项目拆成“验证”和“部署”两个阶段。验证阶段用教育版把流程跑通确认算法方案可行。部署阶段如果教育版限制影响了生产再考虑升级。这样前期投入最小风险也最低。另外教育版的工程文件格式和正式版是兼容的验证阶段搭好的流程可以直接迁移不用重做。这一点很关键意味着你的学习成本不会白费。2. 核心细节解析与实操要点2.1 畸变矫正为什么必须先做这一步镜头畸变是光学系统的固有特性主要表现为桶形畸变和枕形畸变。短焦镜头畸变尤其明显图像边缘的直线会变成弧线。如果你不做畸变矫正直接标定标定出来的映射关系只在标定点附近准确离标定点越远误差越大。畸变矫正的原理是建立畸变模型用一组参数描述畸变程度然后对图像做反向映射把畸变图像还原成理想图像。海康VM里畸变矫正通常有两种方式一种是用标定板做相机标定同时解出内参和畸变系数另一种是直接用畸变矫正算子手动输入畸变参数。我推荐用标定板做相机标定来获取畸变系数因为这样同时能得到相机内参后面做手眼标定或者精确测量都用得上。标定板建议用圆点标定板或者棋盘格标定板海康VM对这两种都有对应的标定算子。实操要点标定板要平整不能有翘曲否则解出来的畸变系数不准。拍摄标定板图像时标定板要覆盖整个视野包括边缘区域这样畸变系数才能在全视野内准确。拍摄多张不同位姿的标定板图像一般10到20张位姿要有变化不能都是同一个角度。标定完成后要看重投影误差误差大的话要检查标定板图像质量或者重新拍摄。提示畸变矫正会引入一定的图像插值误差对于极高精度的应用需要在精度和矫正之间做权衡。一般工业定位场景畸变矫正带来的精度提升远大于插值误差。2.2 九点标定像素坐标到物理坐标的桥梁九点标定是视觉定位里最常用的标定方法核心思想是在物理坐标系里取九个已知点在图像里找到这九个点对应的像素坐标然后解出一个变换矩阵把像素坐标映射到物理坐标。为什么是九个点而不是三个点或者四个点三个点可以解仿射变换四个点可以解透视变换但九个点可以做最小二乘拟合对噪声和点位误差有更好的鲁棒性。实际项目中点位提取总会有误差九个点做最小二乘能把这些误差平均掉得到更稳定的变换矩阵。九点标定的实操流程制作标定板或者在物理平面上标记九个点九个点要覆盖整个工作区域通常排成3x3的网格。用相机拍摄包含这九个点的图像。在图像里提取这九个点的像素坐标。可以用模板匹配也可以用Blob分析看你的标定点特征。把物理坐标和像素坐标一一对应输入标定算子解出变换矩阵。验证标定精度用未参与标定的点做验证看映射误差。标定点提取的精度直接决定了标定精度。如果标定点是圆点用Blob分析提取圆心精度可以到亚像素。如果标定点是角点用角点提取算子。海康VM里对应的算子都有选哪个看你的标定点特征。2.3 标定板标定和九点标定的区别这两个概念经常被混淆我一开始也搞混过。简单说标定板标定解决的是相机内参和畸变系数的问题九点标定解决的是像素坐标到物理坐标的映射问题。两者目的不同不能互相替代。标定板标定用的是标准标定板标定板上的图案间距是已知的通过拍摄多张不同位姿的标定板图像解出相机的内参矩阵和畸变系数。这个过程不需要物理坐标系纯粹是相机自身的参数标定。九点标定用的是工作平面上的九个已知物理坐标的点通过图像里提取的像素坐标和已知的物理坐标解出像素到物理的变换关系。这个过程假设图像已经经过畸变矫正或者畸变很小可以忽略。正确的顺序是先做标定板标定得到畸变系数做畸变矫正然后再做九点标定。如果顺序反了九点标定的时候图像还有畸变标定出来的映射关系就是错的。对比项标定板标定九点标定目的求相机内参和畸变系数求像素到物理坐标的映射输入多张标定板图像九个点的像素坐标和物理坐标输出内参矩阵、畸变系数变换矩阵依赖标定板精度点提取精度和物理坐标精度顺序先做后做2.4 模板匹配做定位的关键参数目标定位我用的是模板匹配。海康VM的模板匹配算子有几个关键参数需要调匹配分数阈值、角度搜索范围、尺度搜索范围、匹配个数。匹配分数阈值决定了什么样的匹配结果算合格。设太高稍微有点光照变化或者遮挡就匹配不上设太低容易误匹配。一般从0.7开始试根据实际图像调整。角度搜索范围决定了模板能匹配多大旋转角度的目标。如果你的目标可能旋转这个范围要设够。但范围设太大匹配时间会增加而且误匹配风险也高。建议根据实际工况设定比如目标旋转不超过正负30度就设正负30度。尺度搜索范围用于目标可能有缩放的情况。如果相机高度固定目标尺寸不变这个范围可以设很小甚至不设能提高匹配速度和稳定性。匹配个数决定了一幅图里最多找几个目标。单目标定位设1多目标定位设实际最大个数。提示模板图像的质量很关键。模板要从实际图像里截取包含足够的特征避免选那些纹理单一或者容易受光照影响的区域。3. 实操过程与核心环节实现3.1 环境搭建与工程创建先说环境。相机我用的是海康的工业相机千兆网口配合海康VM的相机驱动直接就能连。镜头用的是8mm焦距的定焦镜头工作距离大概300mm视野大概200mm乘150mm。这个配置对于一般的定位项目够用了。海康VM教育版安装没什么特别的按默认流程走就行。安装完成后打开软件新建一个方案。方案里可以建多个流程我习惯把标定和定位分成两个流程标定流程负责畸变矫正和九点标定定位流程负责实际的目标定位和坐标输出。这样结构清晰调试的时候也方便。工程创建后第一步是添加相机。在流程里添加图像源选择相机设置相机参数。曝光时间和增益是两个关键参数。曝光时间太短图像暗太长图像过曝。增益太大会引入噪声。我一般先把增益设到最小然后调曝光时间让图像亮度适中背景和目标的对比度明显。3.2 畸变矫正的完整操作畸变矫正我用的是标定板标定法。标定板用的是海康配套的圆点标定板间距是已知的。操作步骤如下第一步把标定板放在工作平面上确保平整。然后移动标定板拍摄多张图像。我拍了15张标定板的位置和角度都有变化覆盖了整个视野。第二步在VM里添加相机标定算子选择标定板类型输入标定板的参数比如圆点间距、圆点个数。然后把拍摄的标定板图像导入算子会自动提取标定板上的圆点。第三步运行标定算子解出内参和畸变系数。标定完成后看重投影误差我的结果是0.08像素这个精度可以接受。如果误差超过0.3像素建议检查标定板图像质量或者重新拍摄。第四步添加畸变矫正算子把标定得到的内参和畸变系数输入对图像做矫正。矫正后的图像直线恢复成直线边缘的弧线消失。注意畸变矫正算子会改变图像的像素坐标所以九点标定必须在畸变矫正之后做标定点提取也要在矫正后的图像上做。3.3 九点标定的完整操作九点标定我是在畸变矫正后的图像上做的。标定点用的是工作平面上的九个标记点物理坐标用游标卡尺测量精度到0.01mm。第一步在工作平面上布置九个标记点排成3x3网格间距50mm。九个点覆盖了大概150mm乘150mm的区域基本覆盖了工作视野。第二步用相机拍摄包含九个点的图像。确保九个点都在图像里而且清晰。第三步在VM里添加Blob分析算子提取九个点的像素坐标。Blob分析的参数需要调主要是阈值和面积范围。阈值决定什么样的区域算目标面积范围过滤掉太小或太大的干扰。第四步把九个点的物理坐标和提取的像素坐标一一对应输入九点标定算子。这里要注意顺序物理坐标的顺序和像素坐标的顺序必须一致否则解出来的矩阵是错的。第五步运行标定算子解出变换矩阵。然后用一个未参与标定的点做验证看映射误差。我的验证结果是0.05mm满足项目要求。标定点序号物理坐标X(mm)物理坐标Y(mm)像素坐标X(px)像素坐标Y(px)100312.5245.82500512.3246.131000712.1246.54050312.8445.655050512.6445.9610050712.4446.370100313.1645.4850100512.9645.79100100712.7646.13.4 目标定位与坐标输出的实现标定完成后定位流程就简单了。在定位流程里先做畸变矫正然后用模板匹配找目标提取目标的像素坐标最后用九点标定得到的变换矩阵把像素坐标转换成物理坐标。模板匹配的模板我从实际图像里截取选了一个特征明显的区域。匹配分数阈值设0.75角度范围设正负30度尺度范围不设。实测下来匹配稳定没有误匹配。坐标输出我用的是VM的脚本算子把变换矩阵和像素坐标代入算出物理坐标。脚本很简单就是矩阵乘法。算出来的物理坐标通过通信接口发给下游设备我用的是TCPVM里配置好IP和端口就行。提示坐标输出的坐标系要明确。九点标定得到的变换矩阵是基于标定时的物理坐标系的输出坐标的时候要确认下游设备用的是同一个坐标系否则会有偏移。4. 常见问题与排查技巧实录4.1 畸变矫正后图像反而更模糊这个问题我遇到过。畸变矫正会做图像插值如果插值算法选得不好或者矫正参数不准图像会变模糊。排查思路先看矫正参数是不是标定得到的如果手动输入的参数不准矫正效果肯定差。再看插值算法VM里一般有双线性和双三次可选双三次质量更好但速度慢。如果参数没问题图像还是模糊可能是标定板图像质量不够重新拍标定板图像。4.2 九点标定精度不够九点标定精度不够最常见的原因是标定点提取不准。排查思路先看Blob分析提取的像素坐标稳不稳定连续拍多张图看坐标波动。如果波动大检查图像质量和Blob参数。再看物理坐标测量准不准游标卡尺的测量误差也会影响标定精度。最后看九个点的分布如果九个点太集中标定精度也会受影响建议九个点尽量分散覆盖整个工作区域。4.3 模板匹配找不到目标模板匹配找不到目标先看匹配分数阈值是不是设太高了。把阈值降到0.5试试如果能找到说明阈值设高了。再看角度范围是不是不够如果目标旋转角度超出了设定范围也找不到。还有可能是光照变化太大模板和实际图像差异大这时候可以考虑用光照不变的匹配算子或者重新截取模板。4.4 坐标输出有偏移坐标输出有偏移先检查九点标定的变换矩阵是不是对的用一个已知点验证一下。再看坐标输出的脚本矩阵乘法的顺序对不对。还有可能是坐标系不一致标定用的物理坐标系和下游设备用的坐标系不一样需要做坐标转换。问题可能原因排查方法解决方法矫正后图像模糊参数不准或插值算法差检查矫正参数和插值算法重新标定或换插值算法九点标定精度不够点提取不准或点分布集中检查像素坐标稳定性和点分布优化Blob参数或重新布点模板匹配找不到目标阈值高或角度范围不够降低阈值或扩大角度范围调整参数或重新截模板坐标输出偏移矩阵错误或坐标系不一致验证矩阵和坐标系修正矩阵或做坐标转换4.5 教育版运行限制的应对教育版在连续运行或者处理高分辨率图像时可能会有提示。我的应对方法是把图像分辨率降到满足精度要求的最低值减少计算量。另外把不必要的算子禁用减少运行负担。如果还是不行考虑分段运行把标定和定位分开跑。提示教育版的限制是为了引导用户升级正式版学习阶段够用。如果项目要上产线建议提前评估正式版的成本避免中途换软件影响进度。5. 实操心得与避坑经验5.1 标定顺序不能乱标定顺序是畸变矫正在前九点标定在后。这个顺序不能乱乱了标定结果就是错的。我一开始就是先做了九点标定后来发现图像有畸变又回头做畸变矫正结果九点标定白做了得重来。所以一定要先把畸变矫正做扎实再做九点标定。5.2 标定点提取要稳标定点提取的稳定性直接决定标定精度。我的经验是标定点用圆点比用角点稳因为圆点的质心提取对噪声不敏感。Blob分析的阈值要调好确保每次提取的坐标波动在0.1像素以内。如果波动大考虑用亚像素提取算子。5.3 模板要选好模板匹配的模板选择很关键。模板要包含足够的特征避免选纹理单一的区域。模板的大小也要合适太小特征不够太大匹配速度慢。我一般选目标上特征最明显的区域大小控制在图像尺寸的十分之一左右。5.4 验证环节不能省标定完成后一定要做验证用未参与标定的点验证映射精度。验证点要选在工作区域的不同位置看误差分布。如果误差在工作区域边缘变大说明标定点分布不够或者畸变矫正不彻底。5.5 工程文件要备份VM的工程文件建议定期备份尤其是标定参数调好之后。标定参数重新调一遍很费时间备份能省很多事。我一般标定完成后就把工程文件复制一份标注好日期和参数。5.6 光照要稳定视觉定位对光照敏感光照变化会直接影响模板匹配和Blob分析的稳定性。建议用稳定的光源避免环境光干扰。如果环境光不可控考虑加遮光罩或者用主动光源。5.7 相机参数要固定相机参数一旦调好就不要随便改。曝光时间、增益、焦距这些参数改了标定关系可能就变了需要重新标定。我一般把相机参数记录下来换镜头或者调参数后重新标定。5.8 坐标输出要验证坐标输出后用实际测量验证一下。比如让下游设备移动到输出的坐标位置看实际位置和预期位置的偏差。如果偏差大检查标定和坐标转换环节。5.9 教育版功能限制要提前确认教育版的功能限制因版本而异建议在项目开始前就确认所需算子是否可用。如果关键算子不可用及早换方案避免做到一半卡住。5.10 多测试不同工况视觉定位项目在实际工况下可能会有各种变化比如目标表面反光、背景干扰、目标姿态变化等。建议在实验室里多测试不同工况提前发现问题。我测试的时候模拟了光照变化、目标旋转、部分遮挡等情况发现模板匹配在目标旋转超过40度时就不稳定了后来调整了角度范围才解决。这个项目做下来最大的体会是标定环节最费时间但也最重要。畸变矫正和九点标定这两步做扎实了后面的定位和坐标输出就是水到渠成。教育版虽然有限制但用来学习和验证方案完全够用免加密狗这一点对于新手来说太友好了。如果你也在用教育版做视觉定位希望这些经验能帮你少走点弯路。
返回列表