摄像头参数介绍 ———— 动态范围

介绍

 动态范围(Dynamic Range)是物理学中常见的概念,表示某一物理量最大值与最小值的比率,通常以对数表示,单位为dB。对于真实场景,它指场景中最明亮处与最黑暗处的亮度之比。自然景观的亮度范围覆盖非常之广,最大动态范围能达到160db,而人眼可以感知的亮度范围高达10个数量级。
 由于自然光线的排列是从120000Lux到星光夜里的0.00035Lux,室内照度为100Lux,而外面风景的照度可能是10000Lux,因此当摄像机从室内看窗户外面,两者对比就是10000/100=100∶1。这个对比人眼能很容易地看到,因为人眼能处理1000∶1的对比度,但传统的安防监控摄像机则不行,因为它只有3∶1的对比性能。因此,在出现明暗反差较大或逆光的场景应用安防监控摄像机时,会使整个图像中明亮的区域曝光过度、较暗的区域曝光不足,而看不清图像最亮与最暗部分。如在银行储蓄所、重要场所出入口等。因为从窗外射入的强光和从天花板上的荧光灯照射的柔和光线都可能对当时室内外景象的捕获造成困难,不能同时将反差很大的室内外场景清晰地拍摄下来。其所拍摄图像会出现背景过亮前景过暗,或背景清晰前景过暗及前景适合背景过亮的情况。最早的解决方法,一般会采用背光补偿技术或在室内外架设两台摄像机来适应较大的光线反差,但效果不理想。扩展动态范围的技术随之应运而生,即现今所说的宽动态WDR(Wide Dynamic Range)技术。
 所谓宽动态实际是指摄像机同时可以看清楚图像最亮与最暗部分的照度比值。而 “动态范围”广义上说是指某一变化事物可能改变的跨度,即其变化值的最低端极点到最高端极点之间的区域,此区域的描述一般为最高点与最低点之间的差值。摄像机的“动态范围”是指摄像机对拍摄场景中景物光照反射的适应能力,具体指亮度(反差)及色温(反差)的变化范围。 即表示摄像机对图像的最“暗”和最“亮”的调整范围,是静态图像或视频帧中最亮色调与最暗色调的比值。而色调能呈现出图像或帧中的精准细节,作为两种色调的比值,动态范围的单位可以是分贝、比特、档,或者简单以比率或倍数来表示。

影响因素

填充比

 在一个像元所占有的整个区域内,对入射光敏感的区域只占总区域的部分,光敏感面积和像元总面积之比为填充比。这是因为在一个像元区域内,除对入射光敏感的区域外,还存在与敏感区相配合的单元,例如在隔行转移型(ILT)结构的CCD中,每一个像元都有一个电荷移位寄存器和一个转移栅与光敏二极管放在一起,用来转移光敏区的电荷。这部分非光敏区域被不透光的薄膜所覆盖,使其不受外来光线的打扰。为了充分扩大低填充比CCD的有效的受光面积,特别是在ILT结构中,可以使用一个微小的凸透镜盖在每一个像元上,以便增加有效的填充比例。但必需指出,这种微小的透镜对紫外线部分有较大的衰减。
在这里插入图片描述

势阱容量

 这是像元光敏二极管势阱收集并保存电荷的容量的一个参数,势阱容量给出了CCD对强光源无饱和感应的能力,给出了 CCD动态范围的上限。一般来说,像元面积和填充比例越大,CCD灵敏度越高,势阱容量也越高。所以势阱容量是一个很重要的参数,它是CCD动态范围的决定性因素之一。
 从CMOS-APS像素的电路原理图中可以看出,光电二极管、Mrst管和Msf管之间形成了一个电容,快门开启后,光电二极管接收到光子后产生电流,在快门打开期间,电荷量等于电流乘以快门开启时间,这些电荷在这个电容内积累(对时间积分),在快门关闭后这个电容中的电荷就是像素在本次曝光中接受到的电荷量。
在这里插入图片描述
 根据公式电容(C)等于电荷量(Q)除以电压(V),而电容C是一个常量,可以得到电压(V) = 电荷量(Q)/电容(C)。也就是加在Msf管栅极上的这个电压与电荷数成正比,这个电压被Msf管放大,在Msel管选通后做为像素的输出信号电压。这个电容是MOS电容,在很多资料中被称为势阱(Potential Well)。阱容是每个像素的势阱容纳电荷的能力,而最大阱容(Full Well Capacity)就是势阱中的电荷溢出或饱和时的容量。在曝光期间,光电二极管受到光的照射后产生电流I,在曝光时间t内光电二极管转换的电荷量Q = I X t。这些电荷存储在像素的势阱中,势阱可以容纳电荷的最大容量就是最大阱容。传感器做好后,最大阱容就是一个确定的值,因此可以应用电容公式:V = Q/C来计算信号电压。式中的C是最大阱容,Q是电荷量,V是电压。这个电压被像素中的放大器放大后作为像素的信号电压输出。从式中可以看出,像素的输出信号电压与电荷量Q成正比。

扩展方式

硬件扩展方式

  硬件上限制数字成像系统动态范围的主要元件是图像传感器(sensor),CCD/CMOS传感器的动态范围定义为饱和电荷量Qs与最小可探测电荷量Qd的比值。sensor动态范围主要受光敏器件的灵敏度、满阱容量和噪声水平等因素限制,而且传感器面积一定的条件下,提高像素数目与提高动态范围相互矛盾。因此在不减少图像传感器像素数目的条件下,提高动态范围需要增大图像传感器的面积,成本将会增加,成像系统的结构也可能受到影响。
在这里插入图片描述

 硬件扩展的另一方案是通过改变光学系统结构或添加其他元件改变图像传感器接收光能量,经后期处理实现动态范围扩展。如利用分光棱镜使入射光线在不同的靶面成像,采用不同灵敏度的传感器接收或设置不同的电路增益,再利用多个传感器获得的不同图像生成一幅高动态范围图像。因此,从硬件上扩展系统动态范围具有非常高的技术难度, 目前主要是几家CCD/CMOS生产商在进行研究,还没有成熟可靠的方案。而且上述方法需要对相机或图像传感器进行改造,甚至重新设计,在硬件设备上花费了大量精力,制造成本也大大提高,不宜在一般的科研项目中采用。

软件扩展方式

  软件扩展方法原理:对被摄场景进行多次曝光成像,通过设置不同的曝光时间,改变系统探测的亮度范围,获取多幅不同曝光度的图像,最后通过软件方法将它们合成一幅高动态范围图像,恢复场景的细节信息。

辐照度重建方法

  辐照度重建方法处理过程:静态场景拍摄多幅不同曝光度的低动态范围图像,利用图像信息推算成像系统的响应函数,再通过响应函数逆运算得到场景的相对辐照度,用以合成高动态范围图像,并以浮点数保存。其中,相机响应函数求解是关键的步骤 。 在获得场景的相对辐照度数据后,将其以特定的图像格式存储,一就得到了场景的高动态范围图像。在处理彩色图像时,可以有两种方法。一种方法是分R、G、B三个颜色通道计算相机响应函数,求出各通道对应的相对辐照度,最后调节比例参数进行白平衡处理。另一种方法是,将RGB图像转换至HSV空间,恢复V通道的高动态范围数据。

多曝光图像融合

  辐照度重建法合成的HDR图像质量十分地依赖于相机响应函数的计算精度,拍摄过程相机抖动或景物微小移动会对计算结果造成较大影响,因此最新提出了多曝光融合方法。从图像融合的角度出发,从曝光度不同的LDR图像序列提取信息合成一幅高质量LDR图像,其视觉效果相当于一幅局部自适应曝光的“高动态范围图像” 。常见的多曝光融合方法可以分为像素级融合、特征级融合 、决策级融合。
  1. 像素级融合主要针对原始图像数据进行融合,融合前未进行图像综合分析与处理。这一层次的融合数据准确性最高,能够提供丰富、可靠的细节信息,应用最为广泛 。
  2. 特征级融合则针对图像特征信息进行融合。首先从原始数据中提出特征信息,如边缘、纹理、运动方向、视觉显著性等,然后进行特征分析与综合处理。相比于像素级融合,特征级融合能够降低噪声影响,提高鲁棒性。
  3. 决策级融合是层次最高的信息融合,模拟人类学习与思考过程,对图像信息进行逻辑推理与统计分析,设定一定规则对信息进行融合。

Pbds全称为Perfectly Balanced Red-Black Tree,是一种平衡查找树的数据结构,它是C++标准库中的`<ext/pb_ds/rb_tree>`模块提供的一种高级模板容器,主要用于高效地存储和查找数据。它是在红黑树基础上进行了优化,保证了常数级的平均时间复杂度。 **特点:** 1. **自平衡**:插入、删除操作后的调整过程保证了树的高度最大为log(n),这使得查询操作的时间复杂度保持在O(log n)。 2. **内存效率高**:支持迭代器,可以像普通的数组或vector一样访问元素。 3. **模板化**:适用于各种数据类型,并支持自定义比较函数。 **实践示例(C++17开始引入std::any,旧版本需第三方库如Boost):** ```cpp #include <ext/pb_ds/tree_policy.hpp> // 引入PBDS策略 using namespace __gnu_pbds; // 使用namespace // 定义一个关联值类型的树模板,键为int,值为std::string template <typename K, typename V> using rb_tree = tree<K, null_type, less<K>, rb_tree_tag, tree_order_statistics_node_update>; int main() { // 创建一个rb_tree实例 rb_tree<int, std::string> myTree; // 插入元素 myTree.insert({5, "Hello"}); myTree.insert({10, "World"}); // 查找最小值 auto it = myTree.begin(); if (it != myTree.end()) { std::cout << "Smallest key is " << *it.first << " with value " << it->second << '\n'; } // 计算第3大的值 auto third_largest = myTree.order_of_key(3); // 获取值为3之前的所有节点个数 if (third_largest > 0) { it = myTree.lower_bound(third_largest); if (it != myTree.end()) { std::cout << "Third largest key is " << *it.first << " with value " << it->second << '\n'; } } return 0; } ``` **相关问题--:** 1. Pbds的红黑树相比标准的红黑树有哪些优势? 2. 如何使用Pbds的rb_tree进行范围查找? 3. 在实际项目中,何时会选择使用Pbds而不是普通的二叉搜索树?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小趴菜_自动驾驶搬砖人

谢谢大爷赏饭吃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值