☰
光学畸变与TV畸变:镜头规格书两个数字该怎么看
2026/9/25 2:54:40 网站建设 项目流程

镜头规格书上的两个畸变数字,经常把人看得一头雾水。前阵子有个做安防摄像机的朋友拿着两份镜头报告来找我,一份写“光学畸变 -5.8%”,另一份在同一个镜头栏里标着“TV畸变 -1.2%”。他当场就懵了:“同一个镜头,到底哪个才是真的畸变?我该拿哪个数字去跟客户谈?”这不是个例。我见过太多项目在畸变问题上扯皮:采购拿着光学畸变的数据去套整机要求,算法工程师拿着TV畸变去校验图像校正,双方说的根本不是一回事。今天就把这两个概念彻底讲清楚:它们各自定义什么、为什么数值差这么多、测试怎么测、设计时怎么控、看规格书时该信谁。

1. 光学畸变到底是什么:镜头“本身”的几何误差

1.1 从近轴像高说起

光学畸变的定义其实相当纯粹,它描述的是“镜头在理想成像平面上,实际像点高度偏离理论像点高度的相对误差”。这里的“理论像点”是指近轴光学计算出来的理想像高,也就是把镜头当成完美小孔成像模型时,一个视场角对应的像点应该落在离光轴多远的那个位置。

公式可以写成这样:

光学畸变率 = (Y实 - Y理) / Y理 × 100%

其中 Y实 是实际主光线打到像面上的高度,Y理 是近轴公式算出来的理想高度。

当 Y实 小于 Y理,畸变率为负,图像靠近中心的部分被压缩、边缘向外凸,这就是常说的桶形畸变;当 Y实 大于 Y理,畸变率为正,画面边缘向外拉伸、直线朝中心方向凹进去,这是枕形畸变。

这里有一个很容易被新手忽略的点:光学畸变是主光线决定的几何误差,和孔径大小(光圈)几乎无关。所以同一个镜头在F1.4和F8下,畸变曲线基本不变,因为决定畸变的不是光束粗细,而是主光线在像面上的落点。这也是为什么设计阶段可以直接用光线追迹的主光线来评价畸变,不需要复杂的光瞳积分。

1.2 光学畸变不伤害清晰度

还有一个反直觉的结论:畸变并不会让画面变模糊。它只是把像“推”到了错误的位置,但该位置上的成像依然可以是锐利的。很多刚入行的人拿到一个畸变很大的广角镜头,第一反应是“这镜头画质不行”,其实畸变大不等于分辨率差。鱼眼镜头的光学畸变能到 -40% 甚至更高,中心分辨率照样能跑到几百线对每毫米。

光学畸变的本质是“图像的几何位置的系统误差”,而像差里的球差、慧差、像散那些才是真正影响清晰度的东西。这个区分非常重要,尤其是在机器视觉测量场景:畸变会影响测量精度,但不影响对焦清晰度;而球差会影响清晰度,却不会让直线变弯。理解了这一点,后面理解光学畸变和TV畸变的关系就顺了。

1.3 光学畸变的实际数值规律

光学畸变曲线通常从视场中心(0%)出发,中心处为0,随着视场增大逐渐偏离。对于普通非球面校正镜头,常见走势是:在50%视场处畸变可能只有最大值的 1/8~1/4,到边缘视场才快速拉起来。

拿一支典型1/2.7英寸传感器、2.8mm焦距的广角镜头来说,实测光学畸变曲线可能长这样:

视场(相对像高)光学畸变率
0%0.00%
30%-0.15%
50%-0.60%
70%-1.50%
90%-3.20%
100%(画面角点)-5.80%

注意这个100%视场是指传感器对角线的角点位置。也就是说,光学畸变规格里的“最大畸变”,通常是画面四个角附近那个点的畸变值,它并不是整个画面普遍都这么大的畸变。这一点是后面理解TV畸变的关键。

2. TV畸变:图像“边框线”的弯曲程度,才是观感

2.1 TV畸变按画面边缘定义

TV畸变(全称Television Distortion,电视畸变)是站在“最终图像”这个角度来定义的。它不关心角点那个位置,而是看整幅图像的四条边线弯不弯。因为电视、显示器、监控画面都是矩形边框,人眼对画面边缘的直线度特别敏感——天花板线、门框线、地平线,一旦在屏幕边缘弯了,观感立刻就会露馅。

TV畸变的常见计算方式是:在图像的上下左右四条边附近,分别找到边缘中点相对“理想直线边框”的最大偏移量,再除以图像相应方向边长的一半(或全长,取决于厂商标准),换算成百分比。

TV畸变 = 边缘中点偏移量 / 半边长 × 100%

以水平方向为例:图像左边框因为桶形畸变向内弯成一条弧线,弧线的顶点相对理想竖直边框有一个水平方向的偏移量 d,图像的半宽为 W/2,那么这个方向的TV畸变就是 d / (W/2) × 100%。

2.2 为什么光学畸变5.8%,TV畸变只有1%多

这是最常被问的问题:“同一个镜头,怎么两个数差这么大?”

关键在于评价位置完全不同。光学畸变的值取的是对角线角点(100%像高处),但TV畸变取的是边框边的中点。对于1920×1080的16:9画面,上边框中点的位置对应到光学像面上,半径大约只有传感器半对角线的45%~55%,而不是100%。

我们再回头看上面那条畸变曲线。画面四角处的光学畸变是 -5.8%,但上边框中点那个位置,相对像高约在50%附近,畸变值大约只有 -0.6%~-1.5%(取决于畸变曲线被设计成什么形状)。用这个“边框中点偏移量”去除以半边长,出来的TV畸变自然就只剩一个多百分点。

用一句话总结:光学畸变描述的是“最极端位置的偏差”,TV畸变描述的是“用户最容易看到的边框位置的整体观感”。所以一支光学畸变标到 -6% 的广角镜头,其TV畸变在 -1% 上下是完全正常的,不代表数据打架。

2.3 两种TV畸变口径,别被厂商玩了文字游戏

行业内TV畸变的口径并没有全球统一。同样是TV畸变,不同厂商可能用不同基准:

标准/口径计算基准同一镜头的典型数值
传统TV畸变(SMPTE风格)边缘中点偏移 / 半边长约 -1.2%
TV畸变(按全长)边缘中点偏移 / 全长约 -0.6%
TV畸变2(取四边最大值)四边中点偏移最大值 / 边长略大于上面两者
厂商自定义(网格线法)最外层网格线的偏移 / 网格间距数值可能五花八门

所以在对规格书的时候,不能光看一个“TV畸变 ≤ 1%”的结论,还要追问一句:“这个1%是除以半边长还是全长?取的是单边还是四边最大?”同一个光学设计,用不同口径报出来的TV畸变能差两倍。我自己在写需求文档时就踩过这个坑,十年前接一个测绘项目,供应商报的TV畸变0.8%,实际测量下来网格线弯得厉害,最后发现对方用的是“对角线方向失真”而不是“边框中点失真”,完全是两套算法。

3. 选镜头和看规格书:这两个指标到底该信谁

3.1 消费电子、安防监控:优先看TV畸变

做人脸识别、视频会议、安防监控这类产品,画面是给人看的,或者做检测算法时依赖边缘直线结构(比如楼宇轮廓、车道线),这时候TV畸变才是决定体感的核心指标。一支光学畸变-5%的镜头可能在全景监控里完全没问题,只要TV畸变控制在 0.5% 以内,肉眼几乎看不出画面变形。

反过来,光学畸变大并不致命,因为现在主流监控相机的后端都会做畸变校正。摄像头芯片直接输出的raw图是桶形的,经过ISP里重映射校正后变成近似直线的图像。但注意,后端的校正只能解决TV畸变层面的直线观感,它会把图像边缘往内压或者往外拉,直接损失视场角。如果镜头本身TV畸变太大,校正后边缘区域的放大率变化会很剧烈,意味着边缘分辨率损失也很大。

3.2 机器视觉、测量类应用:优先看光学畸变

工业检测就不一样了。用远心镜头或常规工业镜头做尺寸测量时,你真正关心的是每个像素代表多少实际物理尺寸。畸变会直接导致同一条直线上的像素当量不一致,测出来就有误差。这时候看TV畸变意义不大,因为TV畸变只告诉你边框弯不弯,不告诉你角点位置偏了多少。

测量系统的验收逻辑是:先用棋盘格或者圆点阵标定板对相机做完整畸变标定,得到镜头的径向畸变系数和切向畸变系数,然后算整幅像面的最大重投影误差。这个过程用的本质上是“光学畸变”思想——每个点单独算实际位置和理想位置的偏差,而非只取四边。对于高精度测量,光学畸变目标通常要做到 0.1% 以内,甚至远心镜头出厂要求是 0.02%。

3.3 画幅裁切对TV畸变的影响,一个经常被忽视的问题

同一个镜头,放在4:3画幅的传感器上,和放在同一传感器的16:9裁切模式下,TV畸变数值是不同的。原因很简单:裁切后画面边框位置变了,16:9画幅的左右边离角点更近,上下边离中心更近,四边的像高位置发生变化,TV畸变自然跟着变。

这带来一个实际问题:镜头规格书给的TV畸变是“满画幅”值,如果你最终产品只使用中央16:9区域,实际TV畸变可能更小;如果你在4:3传感器上做16:9数码变焦裁切,边缘的TV畸变可能比满画幅的看起来更明显。严格的做法是让供应商提供不同画幅模式下的TV畸变实测值,而不是自己用满画幅数据拍脑袋。

3.4 一招读懂规格书的畸变栏

拿到镜头规格书,畸变那一栏通常会写两行:

  • Optical Distortion:一般指最大像高处的光学畸变率,是设计值,用Zemax的DIMX可以直接输出。
  • TV Distortion:指图像边框位置的畸变,通常是实测值,单位同样是%。

如果规格书里只给了一个畸变数,你就得警惕:没说清是光学畸变还是TV畸变、没说清测试靶标、没说清画幅比例的畸变值,都是雾里看花。

我自己的习惯是,在选型阶段让供应商提供三样东西:

  1. 完整的畸变曲线图(横轴像高mm,纵轴畸变%),而不是一个孤零零的数字;
  2. TV畸变的计算方法说明(半长还是全长,取最大还是平均);
  3. 实测的点阵图原图,确认边缘网格线形变程度是不是和数字匹配。

信息越透明,后期扯皮越少。

4. 从实拍到复算:TV畸变测试的完整链路

4.1 硬件准备与拍摄注意事项

TV畸变的实测比很多人想象中容易,但细节坑不少。

你需要一块高精度网点/棋盘格靶标,最好是玻璃基底、光刻工艺的,保证网格间距误差在微米级;还需要均匀平整的照明,避免靶标反光造成边缘亮度不均;最关键的是:相机光轴必须垂直于靶标平面,偏差哪怕1°,测出来的畸变就会叠加透视效应,得出的数字完全失真。

我见过很多人随便打印一张纸贴在墙上测畸变,测出来的结果和规格书差一截,最后发现是纸张不平整加上手机拍歪了。正确的做法是把靶标放在光学平台上,用激光水平仪先把相机光轴调到垂直,再用靶标本身的四条基准线框做对称性检查——画面里靶标外框左右对称、上下对称,才说明对准了。

拍摄时镜头光圈建议设在最佳光圈或标称光圈,用变焦头要注意焦距锁死,避免机械误差。

4.2 提取边缘中点偏移的计算过程

拿到一张标准的网格靶标原图后,TV畸变的计算流程可以分成这几步:

  1. 通过角点提取算法获得所有网格交点的像素坐标;
  2. 找到最外侧一圈的角点作为图像边框采样点;
  3. 分别对上下左右四组边缘点做直线拟合,得到理想边框直线;
  4. 计算每一条边上的点(尤其是边缘中点)到拟合直线的垂直距离;
  5. 取最大偏移量除以对应轴的半宽(或全长),得到TV畸变百分比。

这里要注意:用最小二乘拟合“理想直线”时,边缘点必须是对称取点,比如取一条边上均匀分布的9个点或者11个点。如果你的靶标偏心,导致一条边只采到4个点而另一条边采到8个点,拟合出的理想直线位置也会有偏差。

下面是我常用的一个简化版Python思路,基于OpenCV提取圆点阵后粗略计算TV畸变的核心片段:

import cv2 import numpy as np # 假设你已经拿到了靶标圆的圆心坐标列表 pts # pts 按行列排列,rows 行,cols 列 left_edge = pts[:, 0] # 最左列圆心 right_edge = pts[:, -1] # 最右列圆心 top_edge = pts[0, :] # 最上行圆心 bottom_edge = pts[-1, :] # 最下行圆心 def edge_mid_offset(points, axis): # axis=0 计算水平方向偏移;axis=1 计算垂直方向偏移 # 拟合一条直线:p(x) = kx+b 或 p(y) = ky+b coords = np.arange(len(points), dtype=np.float64) values = points[:, axis] k, b = np.polyfit(coords, values, 1) # 理想直线 fit_values = k * coords + b max_dev = np.max(np.abs(values - fit_values)) return max_dev, values, fit_values # 示例:左边框中点在水平方向的偏移量 max_dev_x, _, _ = edge_mid_offset(left_edge, axis=1) image_half_width = np.abs(left_edge[-1, 0] - left_edge[0, 0]) / 2 # 近似半宽 tv_dist_left = max_dev_x / image_half_width * 100

这段代码对于15个圆点以上的常规测试靶标够用,但注意它默认所有边缘圆点是严格等间距排列的,如果镜头畸变极大,圆心提取顺序会乱,需要提前做重投影校验。

4.3 相机标定得到的畸变系数,又对应哪个口径?

工业上最常见的还是张正友标定法,OpenCV的calibrateCamera会输出5个畸变系数(k1、k2、p1、p2、k3),这是基于多项式模型描述整幅图每个像素重投影偏差的“物理畸变模型”。它和光学畸变本质上是一套东西,只是用多项式近似。

但这套模型和厂商规格书里的光学畸变百分比不能直接划等号。规格书的光学畸变是主光线追迹算出来的理论值,标定反解出来的系数包含了传感器错位、镜片装配偏心、靶标不平整等所有系统误差。用于测量时,标定系数更实用,因为它能直接把图像校正成理想透视投影,而规格书的光学畸变只适合做设计评审。

所以我的建议是:采购阶段看规格书,验收阶段看实测标定,量产抽检看TV畸变曲线。三条链路各管一段,互相替代不了。

4.4 踩坑:畸变中心偏移造成的假TV畸变

有一个坑我在实际测试中碰到过好几次:镜头本身畸变曲线很漂亮,但装到模组上光轴和传感器中心不重合(或者传感器sensor贴片偏了),导致畸变中心不在图像中心。

这种情况下,光学畸变和TV畸变的“对称性”都会崩掉——画面上边框的中点可能没有明显偏移,但下边框却弯得厉害;左边框正常,右边框却歪出天际。如果测试时只看单一边的偏移,就会误判镜头不合格。

解决办法也很简单:拍摄靶标时,对称检查四条边的中点偏移是否方向一致、大小接近。如果四个方向的TV畸变数值不一致,优先怀疑的不是镜头畸变设计,而是光轴偏心或者sensor倾斜。尤其是车载摄像头这种使用广角镜头的场景,畸变中心偏移是所有标定工程师天天打交道的头号问题。

5. 想在光学设计阶段控制TV畸变,软件里的门道

5.1 Zemax里三个畸变操作数,别只盯一个

如果你是光学设计工程师,或者需要和供应商沟通畸变改善方向,Zemax OpticStudio里三个常用操作数必须先分清:

操作数意义设计场景
DIMX最大光学畸变(通常是全视场处的光学畸变百分比)控制测量镜头的光学畸变上限
DIST指定视场处的绝对畸变观察畸变曲线的具体形态
DISC计算TV畸变(基于图像边框定义,可按视场取点)控制安防、车载镜头的屏幕观感

DIMX控制的是“角点畸变”,而DISC才是控制“屏幕边框直不直”的量。很多初稿设计DIMX压得很好,但DISC超标,就是因为畸变曲线的形状不理想——比如畸变在低视场快速抬升,导致边框中点位置弧线弯曲明显。

我自己在设计广角镜头时,习惯同时设置三条优化约束:

DIMX ≤ 5% # 保证测量场景可校正,不出现极端拉伸 DISC ≤ 1.5% # 保证最终画面观感直挺 畸变曲线形状:单调递增,不在半视场出现拐点

曲线单调这点特别重要。如果某段视场畸变先降后升,TV畸变测试时边缘中点可能正好落在曲线的转折区,算出来的值和真实体感会差很多。

5.2 结构选型上影响畸变的几个因素

从镜头结构上说,畸变主要受以下因素影响:

  • 光阑位置:光阑前后非对称的镜组会造成畸变不平衡,广角镜头越靠近前组的强负光焦度镜片,越容易引入桶形畸变;
  • 光焦度分配:前组负光焦度过大的反望远结构(retrofocus)会显著增加桶形畸变,需要在后组用强正光焦度和非球面来补偿;
  • 非球面的使用:非球面的高次项可以局部调整畸变曲线,但代价是边缘视场的像散、倍率色差可能变差;
  • 场镜或校正板:在像面附近加一片弱光焦度校正板,可以微调TV畸变而不明显影响分辨率和场曲。

一句话:光学畸变是“整体趋势”,TV畸变是“局部形状”。设计时不能只看边缘那一个点,要把畸变曲线的整体形状捏好。

5.3 后端畸变校正的代价

如果镜头畸变实在压不下来,很多项目会走算法校正路线。现在主流ISP或者机器视觉库都能做实时重映射,校正效果能做到TV畸变接近0。但代价有三个:

第一,视场角损失。把桶形图像拉直,四周必须往里收缩,原本100°的FOV可能只剩92°。第二,边缘分辨率折损。校正时边缘区域被放大/拉伸,像素被重采样,边缘MTF下降非常明显。第三,图像出现裁切空洞。严格校正后四角会缺像素,如果不做自动Crop,黑角就会露出来。

所以在我眼里,后端校正永远是最后的手段。光学设计阶段能控制TV畸变,就不要把压力丢给算法团队。一支光学TV畸变在2%以内的镜头,后端只需要做极轻的微调就能满足绝大多数场景;如果TV畸变到了5%以上,后端校正的代价会让整个系统的有效像素大打折扣。

回看这些年经手的项目,畸变这个事最核心的经验就一条:永远不要只报一个“畸变数”,永远要把“畸变曲线+测试口径+画幅条件”一起讲清楚。光学畸变是设计者的语言,TV畸变是使用者的语言,两者在同一个系统里必须要有各自的定义、各自的验收标准。下一次再有人拿着光学畸变5.8%、TV畸变1.2%来找你,你心里就该清楚:它们不是在打架,而是在描述同一种现象的两个不同维度。搞明白这一点,很多关于镜头成像质量的争论都能少一大半。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询