工业视觉踩坑实录(十):拼出来的图变形了,尺寸测量全废——高精度拼接测量的那些坑

news2026/4/29 3:54:47
工业视觉踩坑实录十拼出来的图变形了尺寸测量全废——高精度拼接测量的那些坑摘要一个10厘米的圆形金属零件要测它的半径、直径、同心度精度要求极高。听起来很简单是吧放个大倍率镜头拍一张跑个轮廓提取算法几行代码的事。问题是精度要求高到单张拍不下来。关于作者我接触视觉整整10年。机器视觉、烟草、煤矿等行业都有深度开发经验。从硬件选型、算法开发、模型训练到上位机开发及部署都在一线磨过。之前是多家公司人工智能团队的技术负责人。现在自己创业了还在继续做视觉落地这件事。作者说尺寸测量这个事它和缺陷检测有根本性的区别。缺陷检测只关心有没有——这个零件上有划痕吗有裂纹吗有就报警没有就放行。像素级精度对它来说不是刚需。尺寸测量不一样。它关心的是多少——这个半径到底是多少毫米精度要求可能是±0.01mm甚至更高。这意味着你对像素和物理尺寸之间的映射关系要有非常精确的把控。但凡做过精密测量的人都知道这里面的坑比你想的多得多。镜头畸变、标定精度、光源均匀性每一个环节都在蚕食你的精度余量。而今天这篇要讲的是一个更隐蔽的坑——图像拼接带来的尺寸变形。一个零件单张拍不全得多拍几张拼起来。拼是拼上了可测出来的尺寸不对了。这个问题搞了我将近两周。小零件、大精度背光下的尺寸测量先交代一下场景。被测物是一个圆形的金属零件大概10厘米×10厘米的样子。要测的是半径、直径这类的尺寸精度要求很高——具体数字不方便说但总之不是那种差不多就行的级别。光源用的是背光。背光的好处是能把零件的轮廓打得很清晰边缘锐利轮廓提取算法跑起来效果很好。金属零件放在背光板上光从底下透上来零件本体挡住光成像就是一个清晰的黑色轮廓套在白色背景上。对于尺寸测量来说这种光路几乎是理想配置。边缘清晰信噪比高二值化阈值不敏感。那为什么不直接一张拍完呢因为精度。要达到目标精度每个像素对应的物理尺寸必须足够小。你可以理解为——你拿一把尺子量东西刻度越细越准。像素就是这个刻度。10厘米的零件如果用大倍率镜头拍单个视场可能只有3厘米×3厘米拍不全整个零件。那如果把镜头换小、工作距离拉远让整个10厘米都进画面呢行是行但每个像素代表的实际尺寸变大了精度直接往下掉。这就是尺寸测量里的经典矛盾拍得全和测得准天然是对立的。单张拍不全那就多拍几张拼成一张大图在大图上做尺寸测量。思路很清晰。但这条路上有一个致命的坑我也是踩进去之后才明白的。两个电机、九宫格拼接方案的诞生既然要多拍就得让相机动起来。方案是两台电机一台走X方向一台走Y方向。相机装在XY运动平台上每个方向走3个位置3×39个位置每个位置拍一张。九宫格。跟手机全景拍照差不多思路只不过是工业级的精度要求。每张图的视场大概是4厘米×3厘米左右。9张图拼在一起覆盖面积超过12厘米×9厘米足以包住整个10厘米的零件边缘还有余量。相邻两张图之间有大约25%的重合区域。重合区域是拼接的胶水——算法需要通过重合区域的特征来对齐两张图。方案看起来没什么问题。但真正跑起来第一个坑就来了——电机精度。丝杠不够用一开始用的是步进电机加丝杠传动的方案。丝杠导程5mm步进电机200步/转做16细分之后理论分辨率是0.0015mm/步。听起来很精细了对吧实际跑起来发现重复定位误差在±0.05mm左右。0.05mm。在像素空间里如果单像素是0.015mm大约这个量级那0.05mm的误差就是3到4个像素的偏差。你想想看两张图在重合区域对齐的时候差了3到4个像素拼出来的大图在接缝处就会有明显的错位。做尺寸测量别想了。一开始以为是安装的问题重新调了导轨、紧了螺丝改善不大。后来查了丝杠的参数——丝杠本身有螺距误差和回程间隙步进电机又没有反馈跑多了以后位置漂移是正常的。最后换了方案步进电机换成伺服电机加编码器做闭环控制。丝杠也换了精度更高的一档。重复定位精度做到了±0.01mm以内在像素空间里不到1个像素的偏差这才勉强够用。我自己的感受是很多人做视觉项目的时候会觉得拼接嘛算法能补偿。对算法确实能补偿一部分。但机械精度是基础基础不行算法再怎么折腾都是在给一个歪的地基做精装修。你装修得再漂亮房子还是歪的。背光也有坑另外顺便说一个光源的坑。背光源的均匀性在整个运动范围内必须一致。相机在9个位置分别拍照如果不同位置的背光亮度不一样拼出来的大图就会有明暗条纹。对于轮廓提取来说亮度不一致会影响二值化阈值进而影响边缘位置的判断。一开始用的背光源在中心位置亮度很好但到边缘稍微暗了一点。别小看这一点——暗了百分之几边缘可能就会偏移零点几个像素。对精密测量来说零点几个像素的边缘偏移就是几丝的误差完全不能忍。后来换了一块更高均匀性的背光板这个问题才算解决。拼接让图变形了尺寸测量失去意义电机的问题解决了拼接算法跑起来了9张图拼成一张大图。图是拼上了看起来也还算整齐。但跑尺寸测量的时候数据不对。测出来的半径跟单张拍局部区域测出来的半径差了将近0.5%。0.5%。在10厘米的零件上这就是0.5mm。对于精密测量来说这个误差完全不可接受。一开始怀疑是标定的问题。重新做标定换了标定板多角度拍了20多张精度提升了一点但0.5%的偏差还在。又怀疑是镜头畸变校正不够。重新优化了畸变模型的参数边缘的残差从0.5个像素降到了0.2个像素偏差还是在。折腾了好几天。最后才想明白——问题出在拼接本身。特征匹配在偷偷变形你的图我们用的拼接方式是经典的特征匹配拼接提取相邻两张图重合区域的特征点算出一个变换矩阵仿射变换或者透视变换然后把其中一张图变换到另一张的坐标系下。这个过程在缺陷检测里完全没问题。拼接之后的图可能有一点点变形、一点点拉伸但人的眼睛看不出来检测算法也不在乎。缺陷是圆的还是椭圆的划痕是直的还是弯的这些信息在微小的变形之后依然能保留。但尺寸测量不行。仿射变换和透视变换会引入缩放。哪怕只有0.3%的缩放——你的图就被放大或缩小了0.3%。用这张被缩放过的图去测尺寸结果自然就不准。而且这种缩放不是全局一致的。因为9张图的拼接是逐对进行的每对之间的变换都不一样。拼接的路径越长比如第一张到第九张中间要经过5次变换累积的缩放误差就越大。大图的中心可能变形很小但边缘可能已经被拉伸或压缩了好几次。你用一张局部有变形的大图去做尺寸测量测出来的结果自然是不可信的。怎么说呢这个坑的本质是特征匹配拼接的设计目标是对齐图像不是保持尺寸。它关心的是两张图看起来接上了而不是接上之后每个像素代表的物理尺寸没有变。对于检测类应用这是没问题的。对于测量类应用这是致命的。标定板拼接康耐视的解法想明白问题之后我开始找解决方案。核心诉求很明确拼接之后不能引入变形。后来在康耐视VisionPro的文档里找到了一个方案——标定板拼接。这个方案的思路和特征匹配拼接完全不同。原理VisionPro的图像拼接工具有三种方式CopyRegionTool——直接硬拷贝。两张图的位置是固定的知道偏移量就直接像素对像素拷过去。简单粗暴但不处理重叠区域的融合。PatMax特征匹配——就是前面说的特征匹配方案。通过PatMax在重合区域做高精度定位然后无缝拼接。标定板拼接——这个是关键。标定板拼接的做法是这样的第一步放一块标定板。标定板固定不动大小要能覆盖整个相机运动范围。比如相机要扫3×3的九宫格那标定板就得比这个九宫格的总面积还大。第二步相机在9个位置分别对标定板拍照。每张照片上都能看到标定板的棋盘格图案。第三步对每张照片做CheckBoard标定。标定的结果是什么呢是这张图像上每个像素对应标定板坐标系下的哪个物理坐标。关键就在这。做完标定之后每张图的输出坐标系都是标定板的物理坐标系。不是图像坐标系是带真实物理单位毫米的坐标系。第四步用CogImageStitch工具做拼接。先调用AllocateBlendingBuffer指定统一的大图坐标系——就是标定板坐标系。然后逐张调用BlendImageIntoBuffer把每个位置的图像写入大图的对应位置。这里的核心是图像的对齐是靠标定板坐标系完成的而不是靠特征匹配。标定板坐标系是物理坐标系它不会对图像做仿射变换或透视变换只是把每个像素放到它应该在的物理位置上。没有特征匹配就没有匹配误差。没有变换就没有变形。图像在拼接过程中保持原始的像素密度每个像素对应的物理尺寸和标定时完全一致。这才是一个适合尺寸测量的拼接方案。踩坑细节原理听起来很完美。实际做的时候也有不少坑。标定板必须固定好。整个拍摄过程中标定板不能有丝毫移动或形变。哪怕偏了0.1mm后面的所有标定结果都会受影响。我们用了机械固定的方式标定板直接用螺丝锁在底座上不允许任何松动。标定板的打印精度要够。标定板上棋盘格的角点位置精度直接决定标定精度。普通的打印标定板角点位置误差可能有好几十微米。对于高精度测量来说几十微米的标定板误差会直接传递到测量结果里。后来换了一块高精度加工的玻璃标定板角点精度做到了微米级标定残差从0.5个像素降到了0.2个像素以内。拍摄过程不能有振动。相机到位之后要等振动衰减再拍照。有些运动平台在到位之后会有残余振荡虽然肉眼看不出来但在像素级别已经能影响到标定板的角点提取精度了。标定板要覆盖整个运动范围。这个很多人容易忽略。标定板太小的话边缘的几个位置可能拍不到标定板的角点标定就没法做。所以标定板的尺寸要留足余量比实际运动范围大一些。不止康耐视说实话标定板拼接这个思路不是康耐视的专利。其他做机器视觉软件的厂商也有类似的功能核心逻辑都是一样的——用标定板把所有子图像统一到一个物理坐标系下避免图像变换引入的尺寸误差。如果你手头用的软件没有现成的标定板拼接工具理论上也可以自己实现。流程就是在9个位置分别对标定板做相机标定拿到每张图的单应性矩阵图像坐标→标定板坐标然后用反向映射把所有像素放到统一的大图上。OpenCV里有一整套相关的函数可以用。不过自己做的话工作量不小而且有些细节处理不到位的话效果可能还不如商业软件。有现成的工具就直接用吧别重复造轮子。回头看这个项目最大的教训是——拼接方案的选择不能只看图能不能拼上还要看拼完之后尺寸变没变。缺陷检测和尺寸测量对拼接的要求是截然不同的。检测要的是视觉连续性拼接缝看不见就行。测量要的是几何保真度每个像素代表的物理尺寸不能变。如果一开始就从尺寸测量这个需求出发去选拼接方案可能就不会走特征匹配那条弯路了。还有一个教训运动机构的精度要和算法的精度匹配。不是算法能力强就能弥补机械的不足。±0.05mm的定位误差在普通检测里可能无所谓但在精密测量里就是灾难。标定板拼接这个方案我后来在几个类似项目里都用上了效果一直很稳定。如果你也遇到需要拼接做精密测量的场景强烈建议直接走标定板这条路。特征匹配拼接不是不好只是不适合这个场景。作者头帕王子系列专栏工业视觉踩坑实录如果觉得有用点赞关注不迷路 如果你也在做类似的工业视觉项目希望这篇文章能帮你少走些弯路。有问题欢迎留言或加我好友讨论。相关专栏工业视觉踩坑实录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2528582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…