Camera基础原理与畸变补偿

发布时间 2023-04-10 04:04:04作者: 吴建明wujianming

Camera基础原理与畸变补偿

Camera知识大盘点

Camera的构成看起来并不复杂,核心是镜头+感光芯片,以及其它辅助部件。但大家也都知道光学成像是一门非常深奥且尖端的科学,这其中消费者可以拿来讨论的话题非常之多。现在就来谈谈摄像头,从camera的成像原理开始

 

 

 一、成像原理—Camera

景物通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为模拟的电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过I/O接口传输到CPU中处理,通过LCD就可以看到图像了。

 

 

 二、Camera术语

1.FF & AF

FF模组(Fix Focus)

定焦模组。焦距固定,不能实现自动对焦

AF模组(Auto Focus)

自动对焦模组。通过增加VCM和Driver IC配合算法实现自动对焦。

 

 

 2.VCM

VCM:音圈马达。全称Voice Coil Montor,电子学里面的音圈电机,是马达的一种。因为原理和扬声器类似,所以叫音圈电机,具有高频响、高精度的特点。其主要原理是在一个永久磁场内,通过改变马达内线圈的直流电流大小,来控制弹簧片的拉伸位置,从而带动上下运动。手机摄像头广泛的使用VCM实现自动对焦功能,通过VCM可以调节镜头的位置,呈现清晰的图像。

 

 

 3.LENS

 

 

 一般来说,像素越高,镜头需要的镜片就越多,3P的镜头会用在5M以下的产品中,5M及以上的产品会用4P~6P的镜头。

3.1 FOV

Field Of View。视场角,camera视角的大小,和焦距成反比。

 

 

 3.2 F/NO

F-Number。光圈比 = F/D(焦距/入瞳大小),决定镜头的明暗。

 

 

 3.4 TV Distortion

TV畸变。一条直线经过镜头拍摄后,变成弯曲的现象称为畸变。
如下图:(a)理想情况;(b)枕形畸变;(c)桶形畸变。

 

 

 3.5 RI(Relative Illumination)

相对照度。镜头明亮度取决于 F 值(即光圈值),这表示在镜头的光轴上,也就是画面中心的影像的明亮度。周边光量因受到镜头渐晕现象及余弦四次方定律的影响,与中心部相比,明亮度必然减少。通信行业标准YD\T 1607-2007规定了相当照度的测试方法。

 

 

 3.6 Resolution

分辨率。反映了镜头能分辨物体细节的能力。

3.7 Flare & Ghost

杂散光和鬼影,和镜头的镀膜有很大关系。

3.8 EFL

Effective Focal Length,有效焦距。

3.9 BFL

Back Focal Length,后焦距。

 

 

 3.10 CRA

主入射角度(CRA)。通过光圈中心并最终到达成像平面最边缘的光线叫做主光线,而主光线与水平方向的夹角叫主入射角度。

镜头与sensor的CRA必须要匹配,否则会产生较严重的暗角、偏色等问题。

3.11 IR-CUT

IR=infrared=红外线;CUT=滤、减。

IR-CUT的作用是滤掉红外光,减少照射到sensor表面的杂光。

3.12 BLK

Black level,当通光量为零的时候,sensor感光得到的数据RGB值定义为Black level

  • 存在原因:理论上Black level=0,实际上Black level>0
  • 作用:使Black level尽量接近0
  • 实现方式:将部分pixel遮住不感光,从而得到一个偏移量

3.13 LSC

Lens Shading Correction

  • 存在原因:镜头对透过的光线从中心开始往四周衰减
  • 作用:使人眼感觉不到镜头对光线在衰减
  • 实现方式:通过对图像四周pixel的RGB值进行额外补偿,从而弥补衰减

3.14 DNDD/EE

去噪/边缘增强。基本原理:减小/增加当前pixel与周围pixel的差异

3.15 AEC

Auto Exposure Control,自动曝光控制。

  • 作用:最终得到的图像的亮度尽量适合人眼的感觉
  • 实现方式:通过控制曝光时间(行)和gain值使图像的亮度达到target
  • Banding/Flicker:日光灯有能量周期,sensor都是使用行曝光模式
  • 消除Flicker方式:行曝光时间为光源能量周期的整数

3.16 Flicker:What & Why & How

 

 

 3.17 AWB

Auto White Balance,自动白平衡。

  • 原因:不同色温的光源表现出的颜色不一致,而人眼具有适应性
  • 作用:使不同色温下面的白色表现为白色
  • 实现方式:色温统计通道增益,计算偏色校正

三、输出数据格式与接口—Camera

1.数据格式

Raw Data

是sensor在将光信号转换为电信号时的电平高低的原始记录,单纯地将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。

YUV

是被欧洲电视系统所采用的一种颜色编码方法。其中"Y"表示明亮度(Luminance或Luma),就是灰阶值;而"U"和"V"表示色度(Chrominance或Chroma),描述影像色彩及饱和度,用于指定像素的颜色。

2.接口

SPI

Serial Peripheral Interface:串行接口,用于超低端。

 DVP

Digital Video Port:并口,普通常用。

MIPI

Mobile Industry Processor Interface:Camera采用差分信号,高速率,低功耗,应用于高像素产品。

四、软件—Camera

3A

3A技术即自动对焦(AF)、自动曝光(AE)和自动白平衡(AWB)。

3A数字成像技术利用了AF自动对焦算法、AE自动曝光算法及AWB自动白平衡算法来实现图像对比度最大、改善主体拍摄物过曝光或曝光不足情况、使画面在不同光线照射下的色差得到补偿,从而呈现较高画质的图像信息。采用了3A数字成像技术的摄像机能够很好的保障图像精准的色彩还原度,呈现完美的日夜监控效果。

ZSL

ZSL (zero shutter lag):零秒延迟。在日常生活中,使用手机camera拍照的时候往往会有一些延迟的体验。ZSL,就是为了消除这种延迟,提供一种“拍即视”的体验而被开发出来。

参见:ZSL(zero shutter lag)简介

五、硬件—Camera

AVDD

模拟电路供电电源

DVDD

数字电路供电电源

IOVDD

I/O电源

六、测试&调试项—Camera

解析度测试

用机器拍下ISO12233 chart,用工具分析中心和四周h、v方向,读取单位毫米所能分辨的线对(单位LP/mm)。

 

 

 ISO12233_Test_Chart

色彩还原测试

在不同色温下拍摄X-Rite ColorChecker Card,比较拍摄图样中的色块数值与标准值的差异,评价sensor的色彩还原能力。包括satuation,delta c,delta e。

 

 

 X-Rite ColorChecker Card

Shading测试

在均匀照度下拍下灯箱灰壁,分析图片中心和四周的亮度差(参考)。

 

 

 灰卡

灰阶测试

即动态范围测试。

 

 

 几何失真测试

测试拍照系统成像的几何失真程度。

 

 

 camera特性具有良好的媒体传播属性,图像效果可以在各种媒体平台上很直观的进行差异化展示,区分出优劣好坏,进而形成滚雪球式的口碑传播。同时当前各种自媒体、直播行业的繁荣,也正好助推了手机拍照这个强需求成为各家手机厂商卖命宣传的要素。

具有梯度下降的相机径向畸变补偿

 

 

 消费级相机和镜头既便宜又普遍。不幸的是,与它们的工业同行不同,它们的设计目的并不是作为计算机视觉应用中精确测量的工具。

在各种类型的失真中,影响低档相机和镜头的最明显的失真是径向畸变。

径向畸变是场景中对象的视角与图像中该对象出现的像素之间的非线性。在光学中心附近,这种影响很难察觉,但当径向远离光学中心时,失真变得更加明显。

通常,远离光学中心的像素看起来比应该的更接近中心。图像的角似乎被拉向中心。这种现象被称为桶形失真,因为相机垂直看到的矩形物体将显示为圆形的“桶”(见下图)。

 

 

 失真补偿

这个文章的目的是基于一个简单的模型来描述相机镜头对的径向畸变。一旦知道了失真参数,就能够补偿对象的像素位置,并获得一个无失真的像素位置。

你可以克隆此存储库中的代码和示例图像。

https://github.com/sebastiengilbert73/tutorial_distortion_calibration

棋盘图像将为提供共线特征点。在没有径向畸变的情况下,场景中共线点的像素位置应该是共线的。

由于它们明显不共线,将构建一个参数可调的模型,它将扭曲的像素点映射到未扭曲的点上。

特征点

第一步是提取图1中的特征点# Find the checkerboard intersections, which will be our feature points that belong to a plane

    checkerboard_intersections = checkerboard.CheckerboardIntersections(
        adaptive_threshold_block_side=adaptive_threshold_block_side,
        adaptive_threshold_bias=adaptive_threshold_bias,
        correlation_threshold=correlation_threshold,
        debug_directory=output_directory
    )
    intersections_list = checkerboard_intersections.FindIntersections(checkerboard_img)
CheckerboardIntersections类型的对象将彩色图像转换为灰度图像,然后应用自适应阈值。结果是一个二进制图像,其中的正方形交叉点非常清晰。

 

 

 阈值图像与旨在强调两种交叉点的合成模式图像相关联。

 

 

 对两个相关图像进行阈值处理以获得最高峰值。

 

 

 检测到阈值相关图像中的斑点,并计算每个斑点的质心,生成交点列表。

 

 

 径向畸变模型

将考虑一个基本的径向畸变模型——尽可能简单:作为距光学中心距离的函数的二次校正因子。未失真半径将是失真半径和校正系数的乘积。

 

 

 这种失真模型只有三个参数:

光学中心(cx,cy)。它不一定与图像中心重合(w/2,h/2)。
二次系数α。当α>0时,有桶形畸变。当α<0时,有枕形失真(图像角向外拉伸)。当α=0时,没有径向畸变。
模型优化

面临着一个非线性优化问题:找到最佳参数(cx,cy)和α,它们将以形成直线的方式投影找到的交点。为此,将创建一个存储三个失真参数的PyTorch模型。class DistortionParametersOptimizer(torch.nn.Module):


    def __init__(self, center, alpha, image_sizeHW, zero_threshold=1e-12):
        super(DistortionParametersOptimizer, self).__init__()
        self.center = torch.nn.Parameter(torch.tensor([center[0]/image_sizeHW[1], center[1]/image_sizeHW[0]]).float())
        self.alpha = torch.nn.Parameter(torch.tensor(alpha).float())
        self.image_sizeHW = image_sizeHW
        self.zero_threshold = zero_threshold

这个类还需要知道图像大小,因为为了数值稳定性,像素坐标将在(-1,1)中归一化。

DistortionParametersOptimizer.forward方法返回一批均方误差,每个均方误差对应于投影在相应最佳拟合线上的一行特征点的残差。

在理想情况下,如果径向畸变得到了完美补偿,forward方法将返回一批零。

直接与失真补偿类RadialDistortion交互。当调用它的Optimize方法时,它将在内部实例化DistortionParametersOptimizer类型的对象# Create a RadialDistortion object, that will optimize its parameters

radial_distortion = radial_dist.RadialDistortion((checkerboard_img.shape[0], checkerboard_img.shape[1]))

# Start the optimization
epoch_loss_center_alpha_list = radial_distortion.Optimize(intersections_list, grid_shapeHW)
Plot([epoch for epoch, _, _, _ in epoch_loss_center_alpha_list],
      [[loss for _, loss, _, _ in epoch_loss_center_alpha_list]], ["loss"])

在100个epoch内,均方误差下降100倍:

 

 

 哇!这很容易¹!

找到的参数为(cx,cy)=(334.5, 187.2)(即图像中心的东北偏北(320, 240))和α=0.119,与预期的桶形失真校正系数相对应。

去失真

既然已经表征了径向畸变,可以将校正因子应用于特征点。

 

 

 图8显示了补偿径向畸变后的蓝色特征点。中心点基本不变,而外围点被推离中心更远。可以观察到,属于棋盘上直线的场景点看起来在图像中对齐得更好。

虽然可能不想在实时应用程序中这样做,但可以通过将原始图像中的每个像素投影到其相应的无失真位置来消除整个图像的失真。

 

 

 由于逐渐将像素径向推离光学中心,经常会遇到投影空间中的像素,这些像素没有被原始图像中的像素映射,从而导致图9中令人讨厌的黑色痕迹。可以通过用附近的中间颜色替换黑色像素来消除这些像素。

 

 

 结论

考虑了影响大多数消费级相机和镜头的径向畸变问题。假设了一个简单的失真模型,根据二次定律径向推拉像素。通过梯度下降,使用棋盘的特征点优化了一组参数。这些参数允许补偿径向畸变。

重要的是要认识到畸变参数是相机镜头对固有的。一旦知道它们,就可以补偿任何图像的径向畸变,只要相机镜头对是固定的。

 

 

参考文献链接

https://mp.weixin.qq.com/s/B8Z-hYH1ZtTMRrpWTqtGfw

https://mp.weixin.qq.com/s/pIwTfGoKARbUo-F_wRILig