Sensor+ISP专栏-HDR

文章介绍了HDR(HighDynamicRange)的概念,动态范围DR的计算公式以及如何通过不同的技术手段提升传感器的动态范围。讨论了DOL(Sony)和Staggered(OV)方法,这两种方法通过不同曝光时间获取多张图像来扩大单帧的动态范围,但存在运动模糊的问题。另外,DCG(DualConversionGain)结合SubPixel技术可以在同一时刻提供多张图像,避免运动模糊,但成本较高且需要颜色校准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sensor+ISP专栏专栏-HDR

1.what is DR?

Sensor 有一项重要的指标DR,即dynamic range动态范围,最基本的公式:

DR=sat_cap/absoulte_sensitivty

用EMVA1288来讲就是最大饱和容量比上绝对灵敏度阈值。这里sat_cap是饱和容量,标识一个pixel最大可以探测的有效的光子数,absoulte_sensitivty是SNR=1的时候的光子数。
如果没有1288设备,那么可以使用的ND减光镜搭配均匀灯板来实现测量,这里不讲述如何实现,主要将HDR实现方式。
动态范围形容了一个sensor最大以及最小可探测的亮度范围。而HDR即,high dynamic range,单帧实现高动态,由公式可以知道如果想增大DR,两种方法,在sat_cap固定的情况下,提高absoulte_sensitivty。

2.how to impl HDR?

2.1 DOL(Sony) or Staggered(OV)

在这里插入图片描述
本质上,单帧的DR是固定的,那么如果想提高单帧的DR,可以同时采集多张张图像,通过不同的曝光比来实现不同的探测范围,比如长曝光看低照度场景,中曝光看中亮度场景,低曝光看高亮场景,从而实现DR

  • 优点:同一个pixel,不需要进行pixel color标定,成本低,技术成熟
  • 缺点:运动模糊,LFM难实现

2.2 DCG+Sub Pixel

在这里插入图片描述
DCG:dual conversion gain
Sub PIxel:大小pixel

  • 优点:同一个时刻可以出四张图(SP1H+SP1L+SP2H+SP2L,有的是SP2L换成SP1VS),无运动模糊,LFM支持
  • 缺点:需要做color标定,成本高

2.2 the final way??

你猜猜

这是一个简单的系统框图,描述了一个基于传感器的智能LED驱动系统。系统由三个主要部分组成:电源、传感器与控制模块、LED驱动器。 下面是一个简单的Python模拟代码,展示如何根据PIR(人体红外)传感器和光敏传感器(Light ADC)的数据来控制LED的开关和亮度: ```python class PowerSupply: def __init__(self, voltage=4.5, current=1.0): self.voltage = voltage self.current = current def is_power_good(self): return self.voltage >= 4.5 and self.current >= 1.0 class SensorControl: def __init__(self): self.pir_status = False # PIR sensor status: True for motion detected self.light_level = 0 # Light sensor reading (ADC value) def update_sensors(self, pir_status, light_level): self.pir_status = pir_status self.light_level = light_level def get_brightness(self): # Simulate brightness control based on light level max_brightness = 100 if self.pir_status: return max(max_brightness - self.light_level, 20) # Minimum brightness 20 else: return 0 class LEDDriver: def __init__(self): self.brightness = 0 def set_brightness(self, brightness): self.brightness = brightness print(f"LED Brightness set to {self.brightness}") def main(): power_supply = PowerSupply() if not power_supply.is_power_good(): print("Power supply insufficient!") return sensor_control = SensorControl() led_driver = LEDDriver() # Example sensor readings sensor_control.update_sensors(pir_status=True, light_level=30) brightness = sensor_control.get_brightness() led_driver.set_brightness(brightness) sensor_control.update_sensors(pir_status=False, light_level=50) brightness = sensor_control.get_brightness() led_driver.set_brightness(brightness) if __name__ == "__main__": main() ``` 上述代码中: - `PowerSupply` 类模拟了电源供应单元,检查电压和电流是否足够。 - `SensorControl` 类负责读取PIR传感器的状态和光敏传感器的值,并根据这些数据计算LED的亮度。 - `LEDDriver` 类根据给定的亮度值设置LED的亮度。 程序中的 `main` 函数演示了系统的运行流程:首先检查电源是否正常,然后更新传感器数据并根据这些数据调整LED的亮度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值