学图像处理的人,几乎都被像素值折磨过。同一个场景,为什么换了个光源颜色就全偏了?为什么暗部随便拉亮一下全是噪点?为什么拍屏幕总出现一圈一圈的彩虹纹?这些问题追到根子上,全是图像形成物理在作怪——你得先搞清楚一幅图像到底是怎么从光子变成数字矩阵的,才能明白后续那些滤波、分割、特征提取的算法为什么这么设计。
所以看到《图像处理、分析与机器视觉》第四版里“图像形成物理”这一章时,我特别认真地把笔记整理了一遍。这一章篇幅不算长,但它是整本书的地基:讲清楚了从光源辐射、场景反射、透镜成像到传感器采样、量化、颜色形成的完整链路。我刚入行时跳过了这章直接学算法,后面做机器视觉项目反复踩坑,回头补课才发现真香。这篇笔记就是基于原书第四章的思路,再加入我自己做视觉检测项目的实操体会和补充案例。适合正在啃教材的初学者、刚接触相机的算法工程师,以及做视觉系统时需要选型打光的朋友。
1. 成像物理全景图:一条链路看懂图像从哪来
1.1 从光子到像素的四个关键环节
图像形成物理这一章,本质是在回答一个很朴素的问题:相机里的那个二维数字矩阵,到底是怎么“记住”三维场景的?原书把答案拆成了四条环节,我用大白话重新捋一遍。
第一条是光源。所有图像都从光开始,没有光就没有图像。光源要么是自己发光的(比如灯、太阳),要么是反射光的(场景里的大部分物体)。这里要分清楚两个概念:光源发出的光是直接辐射,而物体反射出来再进入相机的光,才是真正决定图像内容的那个“信号”。
第二条是光与物体表面的相互作用。光线打到物体上,一部分被吸收,一部分被反射。不同材质的表面反射特性不同,镜面反射和漫反射在成像上的表现完全不同。原书在这个位置引入了辐射度量学的概念,用来定量描述光的能量、方向分布;同时也提到BRDF(双向反射分布函数)这类描述表面反射特性的工具,虽然那一部分可以后面细看,但必须知道:图像记录的并不是物体本身,而是物体对光的反射响应。
第三条是几何成像。场景中反射出来的光,通过透镜系统被聚焦到传感器平面上。这里涉及到薄透镜方程、焦距、光圈、景深、像差等一整套几何光学内容。镜头决定了“哪些方向的光子能进来、进来之后落在哪里”。
第四条是采样与量化。传感器把聚焦在它表面上的光转换成电荷,电荷经过放大、模数转换变成数字量。这个环节决定了图像的灰度分辨率(位深)、空间分辨率(像素数)和噪声水平。很多初学者以为“像素越高画质越好”,看完这一章就会发现,采样密度只是众多因素之一。
把这四条链路连起来看,图像就是一个“光子流水线”的最终产物。光就像信使,带着场景的信息飞来;透镜是检票口,只放行特定方向的光子;传感器是收集袋,把光子点成电子;ADC是翻译官,把电子数量写成数字。任何一个环节出了问题,最终的数字图像就会有对应的缺陷。
1.2 为什么反复强调“物理模型”而不是直接讲算法
原书在章节开头给了一个很重要的观点:理解图像形成过程,是理解后续所有图像处理算法的前提。这个观点我特别认同,而且想多说一句:很多算法本质上都是在对成像物理过程做“逆运算”。
举个例子,图像去噪。为什么很多去噪算法假设噪声是高斯分布,而有些场景用泊松分布建模更准?因为光子到达传感器的事件天然服从泊松统计,当光子数量足够多时趋向高斯分布。你不懂这个物理背景,就不知道为什么同一个算法在白天有用、晚上就没用。
再比如相机标定。为什么鱼眼镜头图像不能直接用普通透视投影的公式去校正?因为镜头的物理结构决定了它的畸变模型不是线性的。如果不懂像差的来源,看到畸变图像只会瞎调参数。
我在实际项目里的体会是:做视觉检测的人,可以不会推导复杂的辐射度学公式,但一定要在脑子里建立这个物理模型。遇到一个成像异常,能快速判断问题出在光源、镜头、传感器还是算法哪一环。这是定位问题的“元能力”。
2. 光源与辐射度量:理解“光”必须先管住单位
2.1 五个辐射量到底在量什么
原书花了不小篇幅讲辐射度量学,很多初学者一看到单位符号就头大,觉得反正成像看像素值就行了。但实际不是这样——你后面做相机选型、光源选型、曝光设定,全部都要用这些量来沟通。
辐射度量学里有五个核心物理量,我建议用“水管模型”来记:辐射能(Q,单位焦耳)就是水桶里的总水量;辐射通量(Φ,单位瓦特)是水流的总流量,即单位时间内流过多少能量;辐射强度(I,单位W/sr)是某一个方向上的水流强度,可以理解成手持喷枪往某个方向喷水的力度;辐照度(E,单位W/m²)是单位面积上接到的功率,就像地板上单位面积溅到多少水;辐射亮度(L,单位W/(sr·m²))最复杂,它是单位面积、单位方向上发出的功率,可以理解成“从某个角度看上去,这块发光表面到底有多亮”。
为了直观,我直接把这五个量的物理意义和常见使用场景列成一张表:
| 辐射量 | 符号/单位 | 水管类比 | 常用场景 |
|---|---|---|---|
| 辐射能 | Q,J | 总水量 | 一次曝光传感器接收的总能量 |
| 辐射通量 | Φ,W | 水龙头流量 | 光源总功率 |
| 辐射强度 | I,W/sr | 某个方向喷水力度 | 点光源的方向特性 |
| 辐照度 | E,W/m² | 地板单位面积溅水量 | 传感器表面单位面积受光 |
| 辐射亮度 | L,W/(sr·m²) | 从某角度看发光面亮度 | 场景中物体表面“表现亮度” |
这里面最容易混淆的是辐照度和辐射亮度。很多初学者以为传感器上越亮的地方,是它接收到的辐照度越高——这话对也不对。传感器上一个像素的输出,其实与从场景对应方向进入镜头的那束光的辐射亮度有关,而不是简单等于某一点的辐照度。理解这个区别,对后续理解“为什么同一种材料在不同光照方向下拍出来亮度差异巨大”很有帮助。
原书在这里同时提到了光度学(photometry),也就是把人眼视觉灵敏度加权之后的度量系统:光通量(流明)、照度(勒克斯)、亮度(坎德拉/平方米)。这对摄影和显示有意义,但机器视觉中更多直接用辐射度量,因为相机传感器是物理设备,它不像人眼那样对550nm附近的黄绿光特别敏感。所以做机器视觉时,不要拿“流明”“勒克斯”去选工业相机,直接用辐照度、辐射亮度来联系曝光时间和高动态范围,方向才对。
2.2 最容易踩坑的“亮度”与“照度”
我见过不少做视觉项目的朋友,在需求阶段就吵起来:“这个场景亮度不够,加灯!”“亮度不够”这句话其实很含糊——是到达物体表面的光照不足,还是物体反射出来的光不足?还是传感器收集到的光不足?
这三个问题的解决方案完全不同。如果是辐照度不足,应该加光源功率或者调整光源距离;如果是物体表面反射率低(比如黑色橡胶件),那就算辐照度翻几倍,反射亮度也不一定够;如果是镜头通光量不够,那就得换大光圈镜头。把“亮度”这个词拆成辐射度量上的准确概念,比笼统地说“亮一点”要高效得多。
实际项目里还有一个关键问题:光源的空间角度分布。点光源产生硬阴影,面光源产生柔和阴影,平行光会让表面纹理更锐利。原书在讲辐射亮度时点到光源的方向性,但没有展开讲照明工程。我补充一下经验:视觉检测中,光源不是越亮越好,而是“方向、均匀性、稳定性”三者的综合。对于反光强烈的金属表面,用低角度环光比高角度直射光更稳;对于需要凸显凹凸缺陷的场景,低角度光反而能通过阴影放大特征。
还有一点很容易忽略——光源的衰减。辐照度按距离平方衰减(点光源近似),这意味着打光距离变化10厘米,亮度的变化可能很明显。夹具固定后,每次装夹光源位置必须可重复,否则图像亮度波动会干扰后续算法。
2.3 光源色温与光谱能量分布
原书讲到颜色形成时,必然会提到光源的光谱能量分布(SPD)。一个光源是什么颜色,不取决于它的温度,而是它发出不同波长光的相对强度。
显色指数与色温是两个常被混淆的概念。色温描述的是光源颜色“偏暖还是偏冷”,比如白炽灯约2700K,日光约5500K,阴天可能超过7000K。显色指数(CRI)描述的是这个光源让人眼或相机还原颜色的准确程度,和色温没有必然关系。一个高压钠灯色温可能接近2700K,但显色指数很低,拍出来的颜色失真严重。
做机器视觉选光源时,我强烈建议优先关注光谱稳定性和重复性。同一个型号的两支LED灯,如果驱动电流不同,色温和光强都会漂移。一致性问题比“白不白”更重要,因为算法里一旦有颜色聚类或阈值分割,光源漂移会导致批次间误判。
另外一个实用技巧:检测中如果环境光干扰严重(比如车间里有窗户),可以选择窄带单色光源配合相机前的窄带滤光片,把环境光中其他波长的成分滤掉。这样既保证了波长稳定性,又削弱了外界光的干扰。这个方案的原书没有直接提,但它是把“辐射亮度”和“光谱”概念转化成工程能力的好例子。
3. 透镜几何成像:控制光路的核心物理
3.1 薄透镜成像公式与焦距
原书的透镜部分是从几何光学开始的,核心公式就是薄透镜方程:
1/f = 1/u + 1/v
其中f是焦距,u是物距,v是像距。放大率m = v / u。
这个公式在工程上可以直接用来做粗算。比如一台相机镜头焦距35mm,工作距离300mm,那像距大概是多少?v ≈ 1 / (1/35 - 1/300) ≈ 39.6mm,放大率约0.13。也就是说,一个20mm宽的元件,在传感器上只有约2.6mm大小。如果你的传感器靶面宽度5.76mm,这个元件能占将近一半画面,选型时完全可以提前算清楚。
不过要注意,薄透镜模型是理想情况。实际镜头由多片镜片组成,薄透镜方程只能做一阶近似。工业镜头的实际成像还需要查它的光学设计参数,比如像方工作距离、畸变率、MTF曲线等。但在做选型估算时,用薄透镜公式已经足够避开很多离谱的错误。
焦距对视角的影响也值得记住:焦距越短,视场角越大,相同工作距离下看到的场景范围更大,但同样的像素误差在场景中代表的实际尺寸也更大。焦距越长,视角越窄,但能看清远处细节,而且透视变形更小。所以工业检测中拍小物体通常会选长焦或加接圈,而不是把镜头怼得很近。
3.2 光圈、曝光量与景深
光圈用f-number表示,比如f/1.8、f/8。它的定义是焦距与入射光瞳直径之比。关键规律是:光圈数值越大,实际通光孔径越小,到达传感器的光越少。
为什么f/1.4到f/2减小一档曝光?因为孔径面积和直径是平方关系,直径除以√2,面积就减一半。所以f-number序列是按√2倍递增的:f/1.0、f/1.4、f/2.0、f/2.8、f/4.0、f/5.6、f/8.0……相邻两档之间,到达传感器的光照量相差两倍。这个关系在做曝光调整时非常实用:想增亮一档,可以把光圈开大一档,或者把快门放慢一倍。
景深公式推导比较复杂,但结论非常好记:光圈越小(f-number越大),景深越大;焦距越短,景深越大;物距越远,景深越大。对于拍文档、电路板检测这类需要平面都清晰的任务,不能一味开大光圈。我踩过坑:某次给产品拍外观检测图像,为了增加进光量把光圈开到f/1.4,结果元件边缘因为景深太浅发虚,尺寸测量误差直接超了公差。后来收到f/8配合补光,问题立刻消失。
这里有个反直觉的点:光圈不是越小越好。当光圈小到一定程度,光的衍射效应会变得显著,成像反而变模糊。原书在像差部分讲到了衍射极限,实践中的意思就是:每个镜头有一个“最佳光圈”,一般在f/5.6到f/8之间,收得太小分辨率反而下降。工业检测里,找最佳光圈是打光调优的第一步。
3.3 像差与畸变:为什么镜头永远不完美
真实镜头不是理想透镜,会产生各种像差。原书把像差分了几类:球差、彗差、像散、场曲、畸变、色差。我不想把这几个都背一遍,但必须掌握三类最常见的。
色差是很多新手最直观感受到的问题:物体边缘出现红蓝紫边。原因是不同波长的光在透镜中的折射率不同,导致红光的焦点和蓝光的焦点不重合。用胶合透镜可以消色差,但完全消除很难。在做机器视觉时,色差会导致边缘定位偏差,特别是彩色相机拍黑白物体时,边缘会出现伪彩色。对策是尽量用消色差镜头,或者在算法里把彩色图的灰度化方式选好,避免边缘误判。
畸变则是直线变成曲线的问题。桶形畸变常见于广角镜头,枕形畸变常见于长焦镜头。畸变不影响清晰度,但严重影响测量精度。工业上常用的标定方法就是拍棋盘格,用角点映射来建立像素坐标到物理坐标的对应关系。原书在相机标定部分还会深入讲,但图像形成物理这一章就提前打下了理解畸变模型的基础。
这里想给一个避坑提示:不要依赖相机内部的“自动畸变校正”做高精度测量,因为内部校正往往是为了好看,而不是几何精确。测量场景一定要自己做标定,把校正矩阵固化到算法流程里,并且定期检查镜头是否松动。
4. 从光到数字量:传感器、采样与量化
4.1 CMOS传感器的工作过程与噪声来源
光经过透镜形成的光学图像,最终要被传感器转换成电荷。原书这部分讲的就是数码相机传感器(CCD/CMOS)的物理基础,其中CMOS是现在的绝对主流。
一个CMOS像素可以理解成一个小水桶:微透镜负责把光汇聚到感光区,光电二极管把光子变成电子,电子存储在“势阱”里,随后通过电路读出。有几个关键参数必须理解:
量子效率(QE)指入射光子中有多少比例能转换成电子,理想情况是100%,实际传感器不同波长响应不同,通常中心波长表现最好,紫外和红外响应差。井深(满阱容量FWC)是像素能存储的最大电子数,满了以后再多光子也不增加信号,这就是“过曝”的物理根源。
噪声来源也得分开记。散粒噪声是光子随机到达造成的,它随信号增大而增大,本质是泊松过程,标准差等于信号电子数的平方根。暗电流噪声来自传感器自身的热激发,与温度强相关,长时间曝光时尤其明显,所以科学相机要制冷。读噪声发生在电荷读出和放大的过程中,是电路噪声,与曝光时间无关。
这些噪声里,散粒噪声是物理极限,降低不了,只能靠增加光子数来改善信噪比——这就是为什么“加光”永远是提高图像质量的最直接手段。暗电流靠制冷、缩短曝光时间,读噪声靠好的电路设计。理解这些,再去优化高ISO噪点问题就非常有方向感。
4.2 曝光、ISO与增益:把信号放大不是白来的
曝光量近似等于到达传感器的辐照度乘以曝光时间,再乘以光圈面积带来的系数。ISO在数码相机里的本质是对信号的增益:ISO越高,放大倍数越大,但噪声也被放大了。
这里有一个很多教程没讲清楚的概念:模拟增益和数字增益的区别。模拟增益在模数转换之前放大电压信号,虽然也放大噪声,但至少没有信息丢失;数字增益是在ADC之后做一次数字乘法,说白了就是后期拉亮。如果你前期欠曝,再用后期软件拉高亮度,本质上就是在做数字增益,拉亮多少,噪声同步放大幅度就多大,有效信号位数还已经损失掉了。
我举个实际计算的例子:某个传感器满阱电子数约30000e⁻,12-bit ADC对应的满量程电压约为0.8V。如果一个像素只接收了300e⁻的光电子,信号电压只有0.008V,离ADC的最小量化步长已经很近。此时如果不加模拟增益,这300个电子发出的信号在量化后可能只剩下几个离散的数字级别,细节完全丢失。这时候把增益提上去,反而能让低信号得到更有效的量化。所以“高ISO噪点大”不能一棍子打死:高ISO会放大噪声,但在暗光环境下不增加增益导致的量化损失可能更大,关键是找平衡点。
不少工业相机支持手动设定增益而且提供“模拟增益优先”选项,建议调到优先模拟增益。同时快门时间超过一定范围后暗电流显著上升,长时间曝光也要谨慎。这些参数之间的取舍,原书物理部分虽然没直接给出完整表,但理解了机制之后就能灵活处理。
4.3 采样与混叠:莫尔条纹是怎么来的
原书在讲到图像采样时,把连续光学图像变成离散像素的过程,提醒了一个关键问题:采样频率必须足够高才能恢复原始信号,这就是奈奎斯特采样定理。
空间域的采样和时域一样:如果场景中的条纹频率高于传感器像素频率的一半,就会产生混叠(aliasing),表现为不存在的低频条纹或波纹。最经典的例子就是拍屏幕或拍条纹衬衫时出现的莫尔条纹。你看到的彩虹色环,其实不是物体真实的样子,而是高频信息“伪装”成低频信息混进了图像。
解决混叠有两个思路:一是在采样前就滤掉高频,比如相机里的光学低通滤镜(OLPF),这就是为什么专业相机在传感器前加那块看起来“糊糊”的玻璃;二是提高采样频率,即增加像素密度。工业视觉里如果被测物体具有周期性纹理,比如网格布、印刷网点,就要特别小心混叠,否则缺陷检测会出现莫名其妙的假阳性。
拍摄时的实际经验:如果发现图像里出现了不属于现场的结构条纹,先不要急着调算法。把相机稍微移动几毫米、改变拍摄角度、或者在镜头前加一个轻度低通滤镜,往往比写滤波代码更有效。物理层面的限制,算法只在有限范围内能救。
4.4 量化位深与动态范围
传感器输出的模拟信号经过ADC变成数字值。8-bit是256个灰度级,12-bit是4096级,14-bit是16384级。位深越高,亮度变化划分得越细,渐变区域越不容易出现肉眼可见的断层。
但高动态范围不只是位深的问题。动态范围的物理定义是满阱容量除以读出噪声(很多时候用dB或档位表示)。一个满阱30000e⁻、读出噪声约15e⁻的传感器,理想动态范围大约66dB,也就是11档左右。位深只是把这段动态范围“切”得细不细,真正决定能记录多宽亮度范围的还是传感器本身的物理特性。
这在实际项目中的影响是:如果场景中同时存在很亮的反光区域和很暗的阴影区域,单张8-bit图像往往无法同时保留两端细节,只能过曝高光或欠曝暗部。此时要么改用HDR合成(多帧不同曝光融合),要么使用高动态范围模式。原书只是把采样量化讲清楚了,工程上要延伸一步:当面对高反差场景,不要指望一个固定曝光能解决,要在算法流程里加曝光融合或者多尺度光照补偿。
另外,位深不足会导致直方图断层。以前调一张天空渐变的照片,发现色带一条一条,还以为镜头不好,后来才发现是8-bit JPEG的量化精度就这么点。凡是需要后期大幅度调整亮度的场景,尽量用RAW或者12bit以上的图像源。
5. 颜色形成与色彩管理:人眼才是最终裁判
5.1 颜色的本质:光谱反射与人眼三色感光
原书在图像形成物理最后一大部分花了很大力气讲颜色。颜色不是物体固有的属性,它是光源光谱、物体表面反射率、观测者三个因素共同作用的结果。
用公式的思路看:到达眼睛(或相机)的光谱功率分布 = 光源光谱分布 × 表面的光谱反射率。人的视网膜上有三种视锥细胞,分别对长、中、短波敏感,大脑根据三种细胞响应的比例来判断颜色。这个三色理论是颜色科学的地基,也是RGB彩色相机的设计依据:相机用红绿蓝三组滤色片分别模拟三种视锥细胞,然后合成彩色图像。
因此,同一种物体在不同光源下会呈现不同颜色。这听起来简单,但实际中很多人会忽略它的工程后果:在某生产线上用荧光灯照明调试好的颜色分类算法,过了几个月灯管老化变暗变黄,同一套程序突然误判率飙升。根源不是算法,而是光源的光谱漂移。
颜色系统里还有一个重要概念叫同色异谱。两种不同光谱分布的物体,可能在某些光源和人眼/相机下看起来颜色一样,但换一个光源就分开了。这就导致一个问题:我们用的RGB相机,拍到的实际是“模拟人眼”的响应;对于工业产品颜色质检来说,要准确判色,需要在特定光源下用经过标定的颜色测量设备,而不是直接依赖普通RGB相机,除非你的控制条件非常严格。
5.2 白平衡与色适应:为什么“白色”会偏
白平衡的本质是消除光源颜色对成像的影响,让白色物体在各种光源下都呈现为白色。相机内置自动白平衡(AWB)通常是基于“灰世界假设”——认为画面中整体颜色的平均偏向灰色,但遇到大面积单色物体时这个假设失效。
比如拍一块纯绿色草地时,自动白平衡会把“绿”误判为光源偏暖或偏冷造成的结果,然后强行拉回中性,结果绿色被改得灰暗。拍人脸特写时也会出现肤色漂移,这是因为画面大部分区域是皮肤色。原书从颜色恒常性出发讲了一部分,实操中知道这点,处理视觉系统时就不应该依赖相机自动白平衡,而是固定光源色温,手动设置白平衡参数。
更稳妥的做法是使用标准灰卡。在同样的光源环境下,拍一张包含灰卡的图,以灰卡区域为基准做白平衡校正。工业相机里通常可以设置一个固定的白平衡增益,或者在后期用灰卡区域自动计算RGB比例。我的个人习惯是每次调整光源或更换镜头后,都重新做一遍白平衡,绝不复用旧参数。
5.3 颜色模型转换与色彩管理实战
原书关于颜色模型的章节会把RGB、HSV、CIE XYZ、CIE Lab放一起讲。各个模型的适用场景不同,我实际项目里的用法大概是:
RGB适合显示和调试,但直接在里面做颜色阈值很容易受亮度变化影响。HSV把色相、饱和度、明度分开,做颜色检测时优先用H分量,抗光照变化的稳定性比RGB好不少。如果要做更严格的颜色差异评价,就得用CIE Lab,因为它的欧氏距离和人类感知颜色差异更接近。
在做产品颜色分级的案例里,我最初用RGB空间算参考色和实际色的欧氏距离,同一批次样本灯光明亮稍变,结果就忽高忽低。后来换成HSV,只对H和S做区间约束,V不参与判别,稳定性大大提升。再后面为了更准,直接用Lab空间中的ab分量做聚类,效果更稳定。
还要提一个工程细节:色彩管理的一致性。即使都是“白色LED”,不同厂商的LED光谱不同,拍出来的同一目标颜色也有差别;同一批LED也会随着电流、温度漂移。所以机器视觉项目的颜色检测,不但要固定光源型号,还要固定相机色彩矩阵,最好每隔一段时间做一次色卡校正。原书从物理层面解释了原因,工程上落实下去就是一套标定流程。
6. 常见问题与调试经验实录
6.1 画面偏色:先查白平衡还是先查光源
很多人在遇到偏色时第一反应是调白平衡参数,但我建议先检查光源。把一张白纸放在被测物旁边,直接看它在相机里RGB三个通道的响应是否接近。如果不接近,那基本是光源光谱的问题;如果白纸接近灰了但被测物颜色还是怪,才可能是白平衡参数不对或被测表面本身特殊。
在荧光灯环境下拍摄还有一个隐藏问题:工频闪烁。荧光灯和某些LED驱动存在100Hz或120Hz的亮度波动,如果曝光时间太短,不同帧之间的亮度会周期性变化,表现为曝光条带或闪烁。解决办法是用超过工频周期的曝光时间(比如1/60s以上),或者改用直流驱动的光源。这个坑在机器视觉里非常常见。
6.2 成像模糊:从物理层面逐项排查
模糊的先分三类:失焦、运动模糊、衍射极限。
失焦最直接,调整后焦距和光圈即可,注意用景深判断是否整体清晰。运动模糊有方向性,往往表现为特定方向的拖影,需要缩短曝光时间或增加补光。衍射极限最容易被误解:光圈收得太小,虽然景深大了,但因为衍射光斑变大,整体清晰度反而下降。所以检测项目中不要一味追求小光圈,先用f/5.6左右测试,再根据景深需求逐步收小,直到在清晰度和景深之间取得平衡。
另外,有些“模糊”其实不是镜头问题,而是传感器防尘玻璃或镜头表面有油污。用一个高反差靶纸检查一遍,能省很多怀疑人生时间。
6.3 暗部噪点严重:曝光三要素与照明改造
暗部噪点的根本原因是光子少信号弱,散粒噪声占比高。优先加光,这是我最推荐的方案。具体做法包括提升光源功率、缩短工作距离、增加光源面积。
其次加大光圈,让单位时间进光量更多。再次放慢快门,如果被测物静止的话。最后才考虑提高ISO增益。如果前面都到极限了还是暗,考虑换更大靶面的传感器,或者用多帧平均降噪。多帧平均本质上是利用散粒噪声的随机性:对N帧相同场景取平均,随机噪声的标准差约降为原来的1/√N,但只对静止场景有效。
6.4 成像异常排查速查表
下面这张表是这几年做视觉系统时陆陆续续整理的,按“现象-原因-检查项-对策”的路线用起来很顺手:
| 现象 | 可能原因 | 检查项 | 对策 |
|---|---|---|---|
| 整体偏黄/偏蓝 | 光源色温偏移或白平衡错误 | 用白纸看RGB响应 | 固定光源色温,重做白平衡 |
| 画面亮度周期性变化 | 荧光灯或劣质LED工频闪烁 | 连续拍多帧查均值变化 | 曝光时间拉长或改直流光源 |
| 边缘红蓝紫边 | 色差 | 看高反差边缘像素 | 换消色差镜头,或边缘校正算法 |
| 画面边缘直线弯曲 | 镜头畸变 | 拍棋盘格看角点位置 | 相机标定加畸变校正,不要靠目测 |
| 覆盖区域有条纹 | 混叠/莫尔纹 | 改变拍摄距离或低通滤镜 | 调整采样频率或加光学低通 |
| 暗部噪点多 | 信号弱导致散粒噪声占比高 | 检查像素灰度值分布 | 加光优先,其次大光圈、慢快门 |
| 高光区域一片死白 | 超出满阱容量 | 看直方图右侧溢出 | 减曝光时间、降低光照强度、或HDR合成 |
| 渐变区域出现色带断层 | 量化位深不足 | 看RAW直方图是否断层 | 改用更高位深存储,避免粗暴拉伸 |
| 同一产品颜色批次差异大 | 光源光谱随温度电流漂移 | 测光源色温和照度 | 固定电流、加温控、按时校正光源 |
很多时候有了这张表,一个图像异常能在半小时内定位到具体物理环节,而不是在算法参数里盲目试来试去。图像形成物理看起来是最“理论”的章节,但实际是视觉系统稳定性最实用的工具箱。
最后再分享一个小技巧:我每到一个新项目,第一件事不是调算法,而是拿一张棋盘格、一张白纸、一个灰卡,把镜头畸变、白平衡、光照均匀性、曝光线性四个项目快速测一遍。这个流程走一遍大概二十分钟,却能避免之后好几天拿算法去硬扛成像系统的毛病。物理层面的坑,在物理层面解决,永远比在代码层面绕过去更省力。