公司动态
Android Camera Sensor HDR详解
Android Camera Sensor HDR 方式详解1. 什么是 Sensor HDRSensor HDR是指在图像传感器(Sensor)硬件层面实现的高动态范围(HDR)采集技术。与传统的多帧软件 HDR 不同,Sensor HDR 在传感器内部就完成多曝光采集或单帧动态范围扩展,从源头获取高动态范围数据。动态范围 (Dynamic Range): 人眼: ~20 stops 现实场景: ~14-18 stops 普通 Sensor: ~10-12 stops (单次曝光) 差距: 6-8 stops → 暗部丢失或高光过曝 Sensor HDR 目标: 在传感器层面扩展到 14+ stops2. Sensor HDR 方式分类总览┌─────────────────────────────────────────────────────────────────┐ │ Sensor HDR 方式分类 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 一、帧内 HDR (Single-Frame / Intra-Frame HDR) │ │ ├─ 1. DAG (Dual Analog Gain) 双模拟增益 │ │ ├─ 2. DCG (Dual Conversion Gain) 双转换增益 │ │ ├─ 3. DXG (Dual Extended Gain) 双扩展增益 │ │ │ ├─ 3a. DXG Combine 合成模式 │ │ │ └─ 3b. DXG Timing 时序模式 │ │ └─ 4. LOFIC (Low Overflow Integration Capacitor) 溢出电容 │ │ │ │ 二、帧间 HDR (Multi-Frame / Inter-Frame HDR) │ │ ├─ 5. DOL (Digital Overlap) 数字重叠 │ │ ├─ 6. LBMF (Low Bandwidth Multi-Frame) 低带宽多帧 │ │ ├─ 7. Staggered HDR 行交错曝光 │ │ └─ 8. 帧序列 HDR (Sequential HDR) 传统多帧 │ │ │ │ 三、混合 HDR (Hybrid HDR) │ │ ├─ 9. DCG + DOL │ │ ├─ 10. DXG + LBMF │ │ ├─ 11. LOFIC + DOL │ │ └─ 12. DAG + DCG + LOFIC (三重 HDR) │ │ │ └─────────────────────────────────────────────────────────────────┘3. 帧内 HDR 方式 (Single-Frame HDR)帧内 HDR 在同一帧、同一像素内完成多增益/多容量采集,无运动伪影、无帧率损失。3.1 DAG (Dual Analog Gain, 双模拟增益)原理在像素的模拟信号路径上设置两路不同增益的模拟放大器,对同一次曝光的电荷信号分别进行高增益放大和低增益放大,输出两路不同灵敏度的信号。DAG 像素信号路径: 光电二极管 (PD) │ 电荷信号 ▼ ┌───────────────┐ │ 采样保持电路 │ └───┬───────┬───┘ │ │ ▼ ▼ ┌───────┐ ┌───────┐ │ HGA │ │ LGA │ ← 两路模拟增益放大器 │(高增益)│ │(低增益)│ │ ×8 │ │ ×1 │ └───┬───┘ └───┬───┘ │ │ ▼ ▼ ┌───────┐ ┌───────┐ │ ADC_H │ │ ADC_L │ ← 两个 ADC 分别采样 └───┬───┘ └───┬───┘ │ │ ▼ ▼ HG 数据 LG 数据 ← 输出到 ISP (暗部) (高光) 合成: 暗部使用 HG 数据 (高增益 → 细节好, 噪声低) 高光使用 LG 数据 (低增益 → 不过曝) → 动态范围扩展 ~3-4 stops核心特征维度说明采集方式同一帧、同一像素、同一次曝光增益差异来源模拟放大器增益不同 (如 ×1 vs ×8)动态范围扩展~3-4 stops (取决于增益比)运动伪影无 (同一曝光时刻)分辨率影响无 (逐像素输出两路信号)帧率影响无 (单帧完成)带宽影响2× (两路 ADC 输出)功耗影响增加 (双 ADC + 双放大器)代表厂商Samsung (Smart-ISO), OmniVisionSamsung Smart-ISO 实现Samsung Smart-ISO (DAG 实现): ISO 模式切换: ISOLOW → LGA (低增益), 适合明亮场景 ISOHIGH → HGA (高增益), 适合暗光场景 Smart-ISO → 同时输出两路, ISP 合成 实现细节: 像素内集成双读出电路 低转换增益 (LCG): 大电容, 低灵敏度, 高满阱容量 高转换增益 (HCG): 小电容, 高灵敏度, 低满阱容量 注: 实际产品中 DAG 和 DCG 常混用, Samsung 的 Smart-ISO 本质上是 DCG 的变体3.2 DCG (Dual Conversion Gain, 双转换增益)原理在像素内通过切换电容改变电荷-电压转换增益(Conversion Gain),从而获得两种不同灵敏度的信号。这是目前最广泛使用的帧内 HDR 技术。DCG 像素结构: 光电二极管 (PD) │ ▼ 浮动节点 (FD) │ ├──── 小电容 C_small (HCG 模式) │ │ │ 开关 S_HCG │ └──── 大电容 C_large (LCG 模式) │ 开关 S_LCG 转换增益 CG = q / C (q 为电子电荷) HCG (High Conversion Gain): 小电容 → CG 高 → 灵敏度高 CG ≈ 100 µV/e- 满阱容量 ≈ 4000 e- 读出噪声 ≈ 1 e- 动态范围 ≈ 72 dB LCG (Low Conversion Gain): 大电容 → CG 低 → 灵敏度低 CG ≈ 20 µV/e- 满阱容量 ≈ 20000 e- 读出噪声 ≈ 3 e- 动态范围 ≈ 76 dB DCG HDR 合成: 暗部: 使用 HCG 数据 (灵敏度高, 噪声低) 高光: 使用 LCG 数据 (满阱大, 不溢出) → 合成动态范围 ≈ 90+ dB (~15 stops)DCG 工作时序DCG 时序 (逐行读出): 行 N: 1. 曝光积分 (PD 积累电荷) 2. 电荷转移到 FD 3. HCG 读出: S_HCG 闭合, ADC 采样 → HG[N] 4. LCG 读出: S_LCG 闭合, ADC 采样 → LG[N] 5. 两路数据输出到 MIPI 行 N+1: 重复上述过程 关键: HCG 和 LCG 读出的是**同一像素、同一次曝光**的电荷 只是转换增益不同 → 无运动伪影DCG Sensor 配置// DCG Sensor 寄存器配置voidconfig_sensor_dcg(structsensor_ctrl*sctrl,structdcg_config*cfg){// 1. 使能 DCG 模式sensor_write_reg(sctrl,REG_DCG_MODE_CTRL,0x01);// 2. 设置 DCG 切换阈值 (自动切换 or 手动)if(cfg-auto_switch){// 自动模式: Sensor 内部根据亮度自动切换sensor_write_reg(sctrl,REG_DCG_AUTO_SWITCH_EN,0x01);sensor_write_reg(sctrl,REG_DCG_SWITCH_THRESHOLD,cfg-threshold_code);}else{// 手动模式: 固定使用 HCG 或 LCGsensor_write_reg(sctrl,REG_DCG_AUTO_SWITCH_EN,0x00);sensor_write_reg(sctrl,REG_DCG_FORCE_MODE,cfg-force_mode);// 0=HCG, 1=LCG}// 3. 设置 HCG/LCG 增益sensor_write_reg(sctrl,REG_HCG_ANALOG_GAIN,cfg-hcg_gain);sensor_write_reg(sctrl,REG_LCG_ANALOG_GAIN,cfg-lcg_gain);// 4. 输出模式配置// 0: 仅输出 HCG// 1: 仅输出 LCG// 2: 同时输出 HCG + LCG (HDR 模式)sensor_write_reg(sctrl,REG_DCG_OUTPUT_MODE,0x02);}DCG 数据流(MIPI 输出)DCG MIPI 输出模式: 模式 A: 双 VC 输出 VC0: HCG 数据 (全分辨率) VC1: LCG 数据 (全分辨率) → 带宽: 2× 模式 B: 交错行输出 行0: HCG 数据 行1: LCG 数据 行2: HCG 数据 ... → 分辨率降低 1/2, 带宽: 1× 模式 C: 单 VC 交替帧 帧1: HCG 数据 帧2: LCG 数据 → 帧率降低 1/2, 带宽: 1× → 运动伪影严重, 不推荐3.3 DXG (Dual Extended Gain, 双扩展增益)原理DXG 是 DCG 的演进技术,在 DCG 双电容切换的基础上,增加了扩展增益路径,支持更多增益档位和更灵活的合成方式。DXG 有两种子模式:DXG Combine和DXG Timing。DXG 像素结构 (在 DCG 基础上扩展): 光电二极管 (PD) │ ▼ 浮动节点 (FD) │ ├──── C_small (HCG) ──→ 放大器 ×1 ──→ ADC_H ──→ HG │ ├──── C_large (LCG) ──→ 放大器 ×1 ──→ ADC_L ──→ LG │ └──── C_extend (EXG) ──→ 放大器 ×N ──→ ADC_E ──→ EG ↑ 扩展增益路径 (新增) DXG 相比 DCG 的增强: 1. 第三路扩展增益 (EXG), 进一步扩展动态范围 2. 更灵活的合成方式 (Combine / Timing) 3. 支持更多增益档位 (如 ×1, ×4, ×16)3a. DXG Combine 模式DXG Combine 模式: 核心思想: 在同一帧内, 像素级同时输出多路增益信号, ISP 端逐像素选择最优增益数据进行合成 时序: 帧 N: 行0: [HG_pixel0, LG_pixel0] [HG_pixel1, LG_pixel1] ... 行1: [HG_pixel0, LG_pixel0] [HG_pixel1, LG_pixel1] ... ... 每个像素同时输出 HG 和 LG (或 HG/LG/EG 三路) 通过 MIPI 双 VC 或压缩打包输出 ISP 合成 (逐像素): for each pixel: if (HG_pixel saturation_threshold): output = HG_pixel // 暗部: 用高增益 (细节好) else: output = LG_pixel × ratio // 高光: 用低增益 (不过曝) 优势: ├─ 像素级最优选择, 无行间伪影 ├─ 分辨率不降低 └─ 运动伪影最小 局限: ├─ MIPI 带宽翻倍 (或需要压缩) └─ 需要 ISP 硬件支持逐像素选择3b. DXG Timing 模式DXG Timing 模式: 核心思想: 在一帧内, 不同时间段使用不同增益进行读出, 通过时分复用实现 HDR 时序: 帧 N 读出阶段: T0~T1: 使用 HCG 读出行 0~N/3 → HG 数据 T1~T2: 使用 LCG 读出行 N/3~2N/3 → LG 数据 T2~T3: 使用 HCG 读出行 2N/3~N → HG 数据 或者更精细的行级切换: 行0: HCG 读出 行1: LCG 读出 行2: HCG 读出 行3: LCG 读出 ... (每行交替) 与 Staggered HDR 的区别: Staggered: 不同行使用不同曝光时间 (时间不同) DXG Timing: 不同行使用不同增益, 但曝光时间相同 (时间相同) 优势: ├─ 曝光时间相同 → 无行间运动伪影 ├─ 比 Combine 模式带宽更低 (时分复用) └─ 兼容现有 ISP 硬件 局限: ├─ 有效分辨率降低 (行交错) └─ 行间增益切换需要时间 → 影响帧率DXG Combine vs DXG Timing 对比维度DXG CombineDXG Timing输出方式每像素同时输出多路增益行级交替输出不同增益分辨率不降低降低 1/2带宽2×1×运动伪影极轻微轻微 (行间增益差异)ISP 要求需要逐像素选择硬件标准行交错处理适用场景高画质拍照视频/预览DXG Sensor 配置// DXG Sensor 配置voidconfig_sensor_dxg(structsensor_ctrl*sctrl,structdxg_config*cfg){// 1. 使能 DXG 模式sensor_write_reg(sctrl,REG_DXG_MODE_CTRL,0x01);// 2. 选择子模式sensor_write_reg(sctrl,REG_DXG_SUB_MODE,cfg-sub_mode);// 0=Combine, 1=Timing// 3. 配置增益档位sensor_write_reg(sctrl,REG_DXG_HG_GAIN,cfg-hg_gain);sensor_write_reg(sctrl,REG_DXG_LG_GAIN,cfg-lg_gain);if(cfg-num_gains=3){sensor_write_reg(sctrl,REG_DXG_EG_GAIN,cfg-eg_gain);}// 4. Combine 模式特有配置if(cfg-sub_mode==DXG_MODE_COMBINE){// 饱和阈值 (用于像素级选择)sensor_write_reg(sctrl,REG_DXG_SAT_THRESHOLD,cfg-sat_threshold);// MIPI 打包模式sensor_write_reg(sctrl,REG_DXG_MIPI_PACK_MODE,cfg-pack_mode);// 0=双VC, 1=压缩}// 5. Timing 模式特有配置if(cfg-sub_mode==DXG_MODE_TIMING){// 行级增益切换模式sensor_write_reg(sctrl,REG_DXG_LINE_SWITCH_PATTERN,cfg-line_pattern);// 0=逐行交替, 1=分段// 分段读出行数sensor_write_reg(sctrl,REG_DXG_SEGMENT_LINES,cfg-segment_lines);}// 6. 增益比 (用于 ISP 合成归一化)sensor_write_reg(sctrl,REG_DXG_GAIN_RATIO,cfg-hg_gain/cfg-lg_gain);}3.4 LOFIC (Low Overflow Integration Capacitor, 低溢出积分电容)原理在像素内增加一个溢出积分电容(Overflow Capacitor),当光电二极管(PD)满阱时,多余电荷自动溢出到 LOFIC 电容中继续积分。曝光结束后分别读出 PD 和 LOFIC 的信号,合成高动态范围图像。LOFIC 像素结构: 光电二极管 (PD) │ ├──── 正常读出路径 ──→ FD ──→ 放大器 ──→ ADC ──→ PD_data │ └──── 溢出路径 ──→ LOFIC 电容 ──→ 放大器 ──→ ADC ──→ LO_data │ 溢出栅 (Overflow Gate) │ 当 PD 电压 阈值时自动溢出 LOFIC 工作过程: 阶段 1: 曝光开始 PD 和 LOFIC 同时开始积分 PD 积累光生电荷 LOFIC 初始为空 阶段 2: PD 接近满阱 PD 电压上升到溢出阈值 多余电荷通过溢出栅流入 LOFIC LOFIC 开始积累电荷 阶段 3: 曝光结束 PD 信号: 暗部/中间调细节 (高灵敏度) LOFIC 信号: 高光细节 (低灵敏度, 大容量) 阶段 4: 读出 先读出 PD 数据 (快速) 再读出 LOFIC 数据 (慢速, 大电容放电) 两路数据输出到 ISP 合成: PD 部分: 正常曝光的暗部和中间调 LOFIC 部分: 溢出的高光信息 → 动态范围扩展 ~3-4 stopsLOFIC 关键参数LOFIC 电容容量设计: PD 满阱容量: ~6,000 e- LOFIC 容量: ~50,000 e- (8-10 倍于 PD) 总积分容量: ~56,000 e- 动态范围计算: 无 LOFIC: DR = 20×log10(6000/1) = 76 dB (~12.6 stops) 有 LOFIC: DR = 20×log10(56000/1) = 95 dB (~15.8 stops) 提升: ~19 dB (~3.2 stops) 信噪比特性: PD 区域 (低光照): SNR 高, 与普通像素相同 LOFIC 区域 (高光): SNR