Camera基础原理与畸变补偿

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

CheckerboardIntersections类型的对象将彩色图像转换为灰度图像,然后应用自适应阈值。结果是一个二进制图像,其中的正方形交叉点非常清晰。

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

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

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

径向畸变模型

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

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

光学中心(cx,cy)。它不一定与图像中心重合(w/2,h/2)。

二次系数α。当α>0时,有桶形畸变。当α<0时,有枕形失真(图像角向外拉伸)。当α=0时,没有径向畸变。

模型优化

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

class

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

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

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

直接与失真补偿类RadialDistortion交互。当调用它的Optimize方法时,它将在内部实例化DistortionParametersOptimizer类型的对象。

# Create a RadialDistortion object, that will optimize its parameters

在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/pIwT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/339313.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

php目录操作示例

目录 1.常用函数 2.列举当前目录列表 3.判断是否是文件夹 1.常用函数 函数名功能scandir 列出指定路径中的文件和目录 opendir 打开文件夹,返回操作资源 readdir读取文件夹资源closedir 关闭文件夹操作资源 is_dir 判断是否是文件夹 filetype 显示是文件夹还是文…

若依微服务框架,富文本加入图片保存时出现JSON parse error: Unexpected character (‘/‘ (code 47)):...

若依微服务框架,富文本加入图片保存时出现JSON parse error: Unexpected character 一、问题二、解决1.修改网关配置2、对数据进行加密解密2.1安装插件2.2vue页面加密使用2.3后台解密存储 一、问题 若依微服务项目在使用富文本框的时候,富文本加入图片进…

IDEA(十)2022版本 Services中服务窗口不显示端口号解决

目录 一、问题描述二、问题分析三、解决方案3.1 设置启动参数【生效】3.2 方法二:设置环境变量【不生效】3.3 方法三:删除缓存【不生效】 四、补充:如何手动控制端口显示 一、问题描述 我们在使用 IDEA 的过程中,会发现在 Servic…

详解C语言中`||`的短路机制

在C语言中,逻辑或运算符(||)是一种常用的逻辑运算符,用于组合多个条件表达式。与其他编程语言一样,C语言中的逻辑或运算符具有短路机制,这是一种非常重要的概念,本文将深入解释C语言中的||短路机…

如何在ubuntu22.04安装ROS2

ubuntu22.04安装ROS2 教程 选择对应版本进行安装设置编码添加源安装ROS2设置环境变量 运行ROS2 选择对应版本 通过官方网站,查询Ubuntu与ros对应的版本,版本不一致也会出现安装不成功。 https://wiki.ros.org/ROS/Installation 每一个都可以进行点击&a…

使用Dockerfile来构建服务的镜像,并部署在容器中

构建服务镜像和容器化部署 一、构建服务镜像1、编写Dockerfile2、构建脚本3、启动脚本 二、问题及解决办法1、no main manifest attribute, in /chatgpt-api-1.0-SNAPSHOT.jar2、如果是SpringBoot项目,应该这么做: 一、构建服务镜像 1、编写Dockerfile …

接口测试 03 -- 接口自动化思维 Requests库应用

1. 接口自动化思维梳理 1.1接口自动化的优点 接口测试自动化,简单来讲就是功能测试用例脚本化然后执行脚本,产生一份可视化测试报告。不管什么样的测试方式,都是为了验证功能与发现 BUG。那为什么要做接口测试自动化呢?一句话概括…

城市道路智慧养护顶层设计建议书

项目通过对国家在推动智慧交通领域的健康发展上发布的如:《交通强国建设纲要》、《推进综合交通运输大数据发展行动纲要(2020-2025年)》、《数字交通发展规划纲要》等相关政策的深入理解与研究,结合“互联网”、“智能化”、“智慧化”等理念,对国家提出…

Mybatis 动态SQL(set)

我们先用XML的方式实现 : 把 id 为 13 的那一行的 username 改为 ip 创建一个接口 UserInfo2Mapper ,然后在接口中声明该方法 package com.example.mybatisdemo.mapper; import com.example.mybatisdemo.model.UserInfo; import org.apache.ibatis.annotations.*; import jav…

GD32接收不定长数据包

接收不定长数据 Cubemx生成代码过程忽略 首先在main函数中创建接收缓存区 并在main.h中定义 接下来就是重写串口的中断函数中的内容,把原有内容注释掉 main中创建一个记录接收数据长度的变量和标志位 然后再在主函数中添加一个验证代码,这样MCU收到数据…

QT第六天

要求&#xff1a;使用QT绘图&#xff0c;完成仪表盘绘制&#xff0c;如下图。 素材 运行效果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen>QT_BEGIN_NAMESPACE name…

嵌入式软件工程师面试题——2025校招社招通用(计算机网络篇)(三十二)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

HTML Grid 另一种布局方法

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>网格布局测试</title><link rel"styl…

动手做个无人机—材料篇

基于浙江大学Fast-Lab(高飞&#xff0c;潘能)和深蓝学院合作课程&#xff1a;第二课&#xff1a;动力套焊接_哔哩哔哩_bilibili 无人机材料1&#xff1a; 1、NUC 猛虎峡谷 准系统 i5薄款&#xff1a; 一款机载电脑&#xff0c;使用i5-1135G7 &#xff0c;最大内存64G&#xff…

从 fatal 错误到 sync.Map:Go中 Map 的并发策略

为什么 Go 语言在多个 goroutine 同时访问和修改同一个 map 时&#xff0c;会报出 fatal 错误而不是 panic&#xff1f;我们该如何应对 map 的数据竞争问题呢&#xff1f; 这篇文章将带你一步步了解背后的原理&#xff0c;并引出解决 map 并发问题的方案。 Map 数据竞争 首先…

C语言的编译和链接

每日一言 要保持希望在每天清晨太阳升起。 --自己 前言 当我们写下C语言代码&#xff08;源文件、以.c为后缀&#xff09;的时候&#xff0c;他需要经过一个翻译环境&#xff0c;被处理后形成一个可执行程序&#xff08;以.exe为后缀&#xff09;。形成的这个可执行程序里面放…

PLC-IoT 网关开发札记(5):将本地数据库作为资产打包发布到 App

App需求&#xff1a;保存物模型 什么是物模型 在项目开发中&#xff0c;用到了本地数据库&#xff0c;这个本地数据库记录了系统的物模型。所谓物模型就是对某一个设备的可操纵属性的定义&#xff0c;每一个设备包括了一个或者多个属性&#xff0c;通过获取这些属性的当前值可…

基于CanvasLabel的Leaflet矢量数据免切片属性标注实践

目录 前言 一、Leaflet.CanvasLabel 1、开源地址 2、设置参数说明 二、组件集成 1、新建html文件 2、声明样式 3、定义矢量文本渲染器 4、定义地图 5、添加矢量数据 6、最终效果 总结 前言 在一般的业务场景中&#xff0c;针对小量的矢量数据&#xff0c;比如POI兴…

Opncv模板匹配 单模板匹配 多模板匹配

目录 问题引入 单模板匹配 ①模板匹配函数: ②查找最值和极值的坐标和值: 整体流程原理介绍 实例代码介绍: 多模板匹配 ①定义阈值 ②zip函数 整体流程原理介绍 实例代码: 问题引入 下面有请我们的陶大郎登场 这张图片是我们的陶大郎,我们接下来将利用陶大郎来介绍…

Eclipses安装教程

一、下载开发工具包 1、开发工具包JDK 下载地址链接&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/ 下载教程&#xff1a; 1&#xff09;点击链接&#xff0c;可以跳转到页面 2&#xff09;下滑页面&#xff0c;找到开发工具包 3&#xff09; 记住下载之…