1. 为什么我们需要给形状图“开美颜”?
大家好,我是老张,在工业视觉这个行当里摸爬滚打了十几年,从最早的2D检测玩到现在的3D、2.5D,各种算法和硬件都折腾过不少。今天想跟大家聊一个特别具体、也特别“接地气”的问题:怎么给那些看起来“糊成一团”的形状图,做一次精准的“局部美颜”。
咱们先说说背景。在工业检测里,尤其是看那些带点反光但又不够“亮闪闪”的物件,比如某些哑光金属表面、带涂层的零件、或者经过特殊处理的塑料外壳,PMD(相位偏折术)是个好帮手。它本质上是通过分析投射到物体表面的编码条纹发生了怎样的扭曲,来反推出物体的三维形状,生成一张“形状图”。这技术精度高,听起来很美好,对吧?
但理想很丰满,现实很骨感。我遇到过太多这样的情况了:产线环境的光线忽明忽暗,物体表面本身有点粗糙或者有细微的纹理,导致相机拍回来的条纹图质量很差——条纹模糊、对比度低、断断续续的。用这些条纹图算出来的相位信息,噪声一大堆,最后生成的原始形状图,就像一张没对上焦的照片,该有的棱角、凹坑、划痕这些关键特征,全都“藏”在了噪声里,若隐若现,根本没法用来做可靠的缺陷判断。
这问题不解决,再好的算法也是白搭。你不能指望产线工人天天在理想实验室环境下干活。所以,核心矛盾就来了:我们既要把这些被噪声淹没的局部细节特征给“放大”出来,又得保证这个过程计算量不能太大,最好能跟上产线“线扫”的节奏,还不能把噪声也给放大了,或者把真实的特征给“P”变形了。这就是“形状图的局部特征增强”要干的活儿。它不是对整个图进行无差别的暴力处理,而是像一位经验丰富的修图师,知道哪里该提亮,哪里该锐化,精准地还原物体表面的真实面貌。
2. 从模糊条纹到清晰形状:核心流程拆解
要理解局部增强,咱们得先看看一张清晰的形状图是怎么“炼”成的。整个过程就像一条流水线,任何一个环节出问题,最终产品都会有瑕疵。
2.1 第一步:相移法——从条纹中“抠”出相位
PMD最常用的方法是相移法。简单说,就是向物体表面投射一组(通常是四幅)明暗规律变化的条纹。物体表面的高低起伏,会导致这些条纹发生扭曲和偏移。咱们通过计算这四幅图,就能得到一个包裹相位图。
我举个生活化的例子:这就像你看水波。平静的水面,波纹是规整的。但你扔一块石头,波纹的形态就变了。相移法就是通过在不同时间点“看”这组波纹,来精确计算出石头造成的影响(即相位变化)。公式并不复杂,对于四步相移,相位 φ 可以通过四个强度图像 I1, I2, I3, I4 计算:
import numpy as np
# 假设 I1, I2, I3, I4 是四幅相移条纹图
numerator = I4 - I2
denominator = I1 - I3
# 计算包裹相位,值在 [-π, π] 之间
wrapped_phase = np.arctan2(numerator, denominator)
这段代码跑出来的 wrapped_phase,就是包裹相位图。但这里有个大坑:arctan2 函数算出的相位值是被“包裹”在 -π 到 π 之间的,图像上会呈现明暗跳变的不连续条纹。这还不是我们最终要的高度信息。
2.2 第二步:相位解包裹——把“折叠”的相位展开
上一步得到的相位图是“折叠”起来的,就像一把卷尺,每量到一定长度就自动缩回去归零。相位解包裹,就是把这把卷尺完全拉直,得到一个连续的、真实的相位值。这个过程的难点在于,如果原始条纹图质量差,噪声大,解包裹算法很容易“跟丢”,在噪声点处发生跳变,

之形状图的局部特征增强&spm=1001.2101.3001.5002&articleId=149955698&d=1&t=3&u=8d5dd1c23c144ce186b7d46fe6744a5a)
410

被折叠的 条评论
为什么被折叠?



