ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

光学畸变与TV畸变:镜头规格书两个数字该怎么看

光学畸变与TV畸变:镜头规格书两个数字该怎么看 镜头规格书上的两个畸变数字经常把人看得一头雾水。前阵子有个做安防摄像机的朋友拿着两份镜头报告来找我一份写“光学畸变 -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畸变、没说清测试靶标、没说清画幅比例的畸变值都是雾里看花。我自己的习惯是在选型阶段让供应商提供三样东西完整的畸变曲线图横轴像高mm纵轴畸变%而不是一个孤零零的数字TV畸变的计算方法说明半长还是全长取最大还是平均实测的点阵图原图确认边缘网格线形变程度是不是和数字匹配。信息越透明后期扯皮越少。4. 从实拍到复算TV畸变测试的完整链路4.1 硬件准备与拍摄注意事项TV畸变的实测比很多人想象中容易但细节坑不少。你需要一块高精度网点/棋盘格靶标最好是玻璃基底、光刻工艺的保证网格间距误差在微米级还需要均匀平整的照明避免靶标反光造成边缘亮度不均最关键的是相机光轴必须垂直于靶标平面偏差哪怕1°测出来的畸变就会叠加透视效应得出的数字完全失真。我见过很多人随便打印一张纸贴在墙上测畸变测出来的结果和规格书差一截最后发现是纸张不平整加上手机拍歪了。正确的做法是把靶标放在光学平台上用激光水平仪先把相机光轴调到垂直再用靶标本身的四条基准线框做对称性检查——画面里靶标外框左右对称、上下对称才说明对准了。拍摄时镜头光圈建议设在最佳光圈或标称光圈用变焦头要注意焦距锁死避免机械误差。4.2 提取边缘中点偏移的计算过程拿到一张标准的网格靶标原图后TV畸变的计算流程可以分成这几步通过角点提取算法获得所有网格交点的像素坐标找到最外侧一圈的角点作为图像边框采样点分别对上下左右四组边缘点做直线拟合得到理想边框直线计算每一条边上的点尤其是边缘中点到拟合直线的垂直距离取最大偏移量除以对应轴的半宽或全长得到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): # axis0 计算水平方向偏移axis1 计算垂直方向偏移 # 拟合一条直线p(x) kxb 或 p(y) kyb coords np.arange(len(points), dtypenp.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, axis1) 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%来找你你心里就该清楚它们不是在打架而是在描述同一种现象的两个不同维度。搞明白这一点很多关于镜头成像质量的争论都能少一大半。
返回列表