当前位置: 首页 > article >正文

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

工业视觉踩坑实录十拼出来的图变形了尺寸测量全废——高精度拼接测量的那些坑摘要一个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的定位误差在普通检测里可能无所谓但在精密测量里就是灾难。标定板拼接这个方案我后来在几个类似项目里都用上了效果一直很稳定。如果你也遇到需要拼接做精密测量的场景强烈建议直接走标定板这条路。特征匹配拼接不是不好只是不适合这个场景。作者头帕王子系列专栏工业视觉踩坑实录如果觉得有用点赞关注不迷路 如果你也在做类似的工业视觉项目希望这篇文章能帮你少走些弯路。有问题欢迎留言或加我好友讨论。相关专栏工业视觉踩坑实录

相关文章:

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

工业视觉踩坑实录(十):拼出来的图变形了,尺寸测量全废——高精度拼接测量的那些坑 摘要:一个10厘米的圆形金属零件,要测它的半径、直径、同心度,精度要求极高。听起来很简单是吧?放个…...

别再花冤枉钱拍视频了!我用Google Flow AI,30分钟搞定玩具产品宣传片(附完整提示词)

零成本打造爆款产品视频:Google Flow AI实战指南与高效创作公式 在电商与社交媒体营销的激烈竞争中,视频内容已成为转化率最高的媒介形式。但传统视频制作的高昂成本(动辄上万元的拍摄预算)和漫长周期(平均2-4周的制作…...

什么是蜘蛛池?一个让SEOer又爱又恨的工具

先直接说结论:蜘蛛池是一组被专门搭建起来用于吸引搜索引擎蜘蛛(爬虫)的网站集群。通俗理解你可以把蜘蛛池想象成一个“蜘蛛招待所”。普通网站就像街边的店铺,等着搜索引擎蜘蛛偶然路过进来看看。而蜘蛛池是一个专门建出来的小区…...

使用Java代码,httpclient调用彩云天气接口-token版本

彩云API参考链接&#xff1a;https://docs.caiyunapp.com/weather-api/v2/v2.6/1-realtime.html 本文为token版本&#xff0c;若需要Appkey&AppSecret认证版本请参考V3API认证与鉴权 一、引入 Maven 依赖 <!-- httpclient --> <dependency><groupId>o…...

下载数据集

在 Ubuntu 上下载 Hugging Face 数据集&#xff0c;我推荐使用 huggingface-cli 这个官方工具&#xff0c;它稳定且支持断点续传。国内用户配置 hf-mirror.com 镜像站后&#xff0c;下载速度会快很多。下面是完整的命令步骤&#xff0c;你可以逐条复制执行。### &#x1f427; …...

视频智能分析工具终极指南:如何用AI自动理解视频内容

视频智能分析工具终极指南&#xff1a;如何用AI自动理解视频内容 【免费下载链接】video-analyzer Analyze videos using LLMs, Computer Vision and Automatic Speech Recognition 项目地址: https://gitcode.com/gh_mirrors/vi/video-analyzer 在视频内容爆炸式增长的…...

终极指南:Switch NAND管理工具NxNandManager的10个核心功能解析

终极指南&#xff1a;Switch NAND管理工具NxNandManager的10个核心功能解析 【免费下载链接】NxNandManager Nintendo Switch NAND management tool : explore, backup, restore, mount, resize, create emunand, etc. (Windows) 项目地址: https://gitcode.com/gh_mirrors/n…...

算网融合,互联无界:丰润达亮相第三届AI算力产业大会

丰润达亮相第三届AI算力产业大会&#xff0c;带来一场关于算力落地的不同思考。 2026年4月9日&#xff0c;深圳福田会展中心&#xff0c;第三届AI算力产业大会如期开幕。华为、百度、阿里、腾讯、浪潮等科技巨头悉数亮相&#xff0c;在众多厂商展示更强算力集群的同时&#xf…...

LongMemEval 基准实测!Awareness 长时记忆能力登顶

长时交互记忆是 AI 智能体从 “玩具” 走向 “生产力工具” 的核心门槛。LongMemEval 作为 ICLR 2025 收录的权威基准&#xff0c;专注评估多会话、跨时序、知识更新等五大记忆能力。本文基于 LongMemEval 完整测试集&#xff0c;对 Awareness 进行全维度 Benchmark&#xff0c…...

内容资产化治理:轻量化中台驱动企业矩阵运营提质增效

摘要在企业全域矩阵运营规模化推进过程中&#xff0c;内容资产无序、运营流程碎片化、数据无法贯通已成为制约运营效率的核心问题。相较于重型中台高昂的部署与运维成本&#xff0c;基于云原生、低代码设计的轻量化内容中台&#xff0c;更适配中小微企业的数字化需求。本文从内…...

全体技术人做好随时涨薪的准备吧!

大家都在说行业寒冬&#xff0c;降薪裁员不断……但为什么还有人薪资翻倍、Offer拿到手软&#xff1f;&#xff01;&#x1f447;&#x1f3fb;DeepSeek 开出154万年薪抢大模型工程师&#xff1b;腾讯、字节大模型岗位涨幅普遍超过30%各大厂开放招聘技术岗&#xff0c;80%与AI相…...

史上最强模型Claude Opus 4.7发布!一大批公司要倒闭了

4月16日&#xff0c;Anthropic正式发布Claude Opus 4.7。这是目前最强的公开可用大模型&#xff0c;重点升级了三件事&#xff1a;复杂任务执行能力、视觉理解能力、长链路工作流稳定性。简单来说&#xff0c;它能自主完成更复杂的任务&#xff0c;不需要你盯着它&#xff1b;它…...

2026奇点大会AIAPI代码生成性能基准测试全解析,TensorRT-LLM vs vLLM vs 自研推理引擎的毫秒级差距

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AIAPI代码生成 2026奇点智能技术大会(https://ml-summit.org) 核心能力演进 本届大会首次公开AIAPI——一种融合语义理解、类型推导与上下文感知的新型代码生成协议。它不再依赖传统LLM的纯文本补全&#xff0c;而是以结构…...

CTF系列--WP--靶机16--flick

WP Flick 1(1).pdfhttps://www.yuque.com/attachments/yuque/0/2026/pdf/64604138/1774599785497-5449f6c0-7b7a-42cf-b308-9694ce33c363.pdf 此WP中我只看懂了部分&#xff0c;小白新手可以看笔者的&#xff0c;若是大佬们感觉我写的过于简单&#xff0c;可以去看这个WP。同时…...

Matlab图形属性深度联动:除了xlim,你还需要了解这些控制坐标轴的‘隐藏’属性

Matlab图形属性深度联动&#xff1a;坐标轴控制的底层逻辑与高阶技巧 第一次用xlim([0 10])时&#xff0c;我天真地以为这行代码只是简单地截取了图形的一部分。直到某天深夜调试GUI时&#xff0c;偶然发现修改XTick属性竟然触发了XLim的自动调整&#xff0c;才意识到Matlab的图…...

ESP32驱动0.96寸OLED屏,从C51代码移植到ESP-IDF的保姆级避坑指南

ESP32驱动0.96寸OLED屏&#xff1a;从C51到ESP-IDF的完整移植指南 当我们需要在ESP32项目中使用0.96寸OLED显示屏时&#xff0c;往往会遇到一个常见问题&#xff1a;手头只有基于C51单片机的驱动代码&#xff08;比如淘宝卖家提供的例程&#xff09;&#xff0c;如何将其移植到…...

Python3 WebSocket实战:从基础连接到异步高并发,主流模块选型指南

1. WebSocket基础与Python模块选型指南 第一次接触WebSocket时&#xff0c;我被它和HTTP的长轮询对比惊艳到了。想象一下咖啡馆里两个朋友的对话&#xff1a;HTTP就像每次问"有新消息吗&#xff1f;"都要重新打招呼&#xff0c;而WebSocket则是一次握手后就能持续聊天…...

SelectDB Enterprise 4.0.5:强化安全与治理,构建企业级实时分析与 AI 数据底座

在实时分析领域&#xff0c;Apache Doris 已经成为一款被广泛采用的开源 OLAP 数据库。凭借高性能查询引擎与一体化架构&#xff0c;Doris 在实时数仓、日志分析等场景中持续发挥重要作用&#xff0c;并在近几个版本中不断向 AI 与搜索能力演进。 在此基础上&#xff0c;Selec…...

中国油车的新技术,挖到日本汽车的根,双管齐下真要命!

今年以来在国内市场电车攻势凌厉之下&#xff0c;传统油车企业却大举发布节油混动&#xff08;HEV&#xff09;技术&#xff0c;这不仅是为了与电车竞争&#xff0c;更是为了走向国际市场&#xff0c;对日本汽车最后的命根下手&#xff0c;进一步增强中国汽车的国际市场竞争力。…...

直播回顾 | 测试智能体与智能化测试平台分享

在本次课程中&#xff0c;思寒老师系统性地分享了智能体&#xff08;Agent&#xff09;的完整知识体系&#xff0c;并重点探讨了如何将其应用于软件测试领域&#xff0c;构建专属的测试智能体平台。课程内容涵盖了智能体的基本概念、发展历程、核心架构、技术栈、平台设计以及行…...

日本汽车的恐惧,又一个市场被中国汽车破局了,死亡螺旋开始了

日前第四十七届曼谷国际车展公布的预定量数据&#xff0c;中国汽车整体预定量超过日本汽车&#xff0c;前十大品牌中有七家是中国品牌&#xff0c;如果说订单还只是预期&#xff0c;而2025年的数据则显示中国汽车不仅是在泰国而且是整个东南亚市场都是高歌猛进。泰国市场是中国…...

测试人员如何养虾提高测试效率

最近养虾很火&#xff0c;我自己也尝试了一下&#xff0c;确实很方便&#xff0c;只需要在企微发一句话就能执行任务&#xff0c;完全不用再打开各个网页&#xff0c;真的很方便。下面给大家分享一下我的一些使用经历&#xff08;以workbuddy为例&#xff09;&#xff1a; 一、…...

不只是创建工具坐标:用RobotStudio自定义工具完成一个真实的涂胶轨迹编程

不只是创建工具坐标&#xff1a;用RobotStudio自定义工具完成真实的涂胶轨迹编程 在工业机器人应用领域&#xff0c;工具坐标系的创建从来都不是终点&#xff0c;而是工艺实现的起点。当我们面对一把非标设计的涂胶枪时&#xff0c;如何让它从冰冷的3D模型变成机器人手中灵活的…...

别再用老教程了!手把手教你用Proteus 8.13和8086+8255搭建一个真能用的投票器(附完整汇编源码)

从零构建80868255投票器&#xff1a;Proteus 8.13实战避坑指南 在微机原理实验课上&#xff0c;最令人沮丧的莫过于按照网络教程一步步操作&#xff0c;最后却发现电路根本无法运行。特别是当使用老旧的Proteus版本教程搭配新版软件时&#xff0c;各种兼容性问题会让初学者寸步…...

PyTorch网络构建:Sequential、ModuleList与ModuleDict的实战选择指南

1. PyTorch网络构建的三种核心容器 当你开始用PyTorch搭建神经网络时&#xff0c;很快就会遇到一个关键问题&#xff1a;如何组织网络中的各个层&#xff1f;就像建筑师需要决定用钢筋、混凝土还是玻璃幕墙来构建大楼的不同部分一样&#xff0c;我们需要选择合适的容器来管理网…...

SourceGit深度解析:3大创新功能重塑现代Git工作流

SourceGit深度解析&#xff1a;3大创新功能重塑现代Git工作流 【免费下载链接】sourcegit Windows/macOS/Linux GUI client for GIT users 项目地址: https://gitcode.com/gh_mirrors/so/sourcegit 在当今软件开发领域&#xff0c;高效的版本控制工具已成为团队协作的基…...

从 0 到 1 用 Python 写一个最小可用 LangGraph 系统

从 0 到 1 用 Python 写一个最小可用 LangGraph 系统 关键词 LangGraph, LangChain, 状态机, 多Agent系统, 图结构, LLM应用, Python实现 摘要 在这篇技术博客中,我们将深入探讨LangGraph的核心概念,并从零开始构建一个最小可用的LangGraph系统。LangGraph是LangChain生态…...

如何用AI视频分析工具快速理解视频内容:完整指南

如何用AI视频分析工具快速理解视频内容&#xff1a;完整指南 【免费下载链接】video-analyzer Analyze videos using LLMs, Computer Vision and Automatic Speech Recognition 项目地址: https://gitcode.com/gh_mirrors/vi/video-analyzer 在信息爆炸的数字时代&#…...

html如何修改备注

<p>HTML中没有“备注”&#xff0c;只有<!-- -->注释&#xff1b;它不显示、不可见、无法被JS选择器获取&#xff0c;仅用于源码说明&#xff0c;语法严格&#xff0c;不可嵌套或缺失字符&#xff0c;生产环境常被压缩移除。</p>HTML 里没有“备注”这个东西…...

Android车机蓝牙开发避坑指南:如何正确配置A2DP Sink与HFP Client模式(附源码修改点)

Android车机蓝牙音频接收端开发实战&#xff1a;A2DP Sink与HFP Client模式深度配置 在智能座舱和车载娱乐系统快速发展的今天&#xff0c;蓝牙音频接收功能已成为车机系统的标配能力。不同于手机作为音源端的常规场景&#xff0c;车机需要作为接收端&#xff08;Sink&#xff…...