安防摄像头 白天 ↔ 全彩 模式切换逻辑设计

目录

一、先明确核心定义

二、最终切换逻辑

三、为什么这套逻辑最适配

四、参数推荐值

五、高级防误触发策略

六、极简伪代码

七、最终总结


核心条件:

  1. 全彩模式 :环境暗(AE 参数大)→ 开启补光灯 → 开启后AE 参数依然偏大
  2. 白天模式:环境亮 → 关闭补光灯 → AE 参数小
  3. 核心难点:全彩模式开灯后 AE 不会降回白天水平,不能单纯用 AE 绝对值判断模式

一、先明确核心定义

1. AE 参数是什么?

安防常用:曝光时间 (shutter) * 增益 ( gain ) 统一用一个值判断:AE 评分 = 曝光时间 +*增益权重(权重自己调,比如增益 ×2)

2. 两个关键阈值

  • TH_DARK:环境暗阈值(AE > 此值 = 环境暗)
  • TH_BRIGHT:环境亮阈值(AE < 此值 = 环境亮)
  • 规则:TH_DARK > TH_BRIGHT(用迟滞回差,防止频繁切)

3. 模式定义

  • 白天模式:补光灯关闭,AE 由环境光自然调节
  • 全彩模式:满足暗条件 → 开补光灯,AE 保持大参数(硬件特性)

二、最终切换逻辑

核心原则

  1. 白天 → 全彩 :只看关灯状态下的 AE
  2. 全彩 → 白天 :只看开灯状态下的 AE
  3. 加入防抖延时,杜绝频闪 / 反复切换

完整逻辑流程图

1. 白天模式 → 全彩模式

复制代码
当前状态:白天模式(补光灯 OFF)
持续判断:
  如果 【AE > TH_DARK】 并且 【持续 N 帧】
  则:
    切换为 全彩模式
    打开补光灯

2. 全彩模式 → 白天模式

复制代码
当前状态:全彩模式(补光灯 ON)
持续判断:
  如果 【AE < TH_BRIGHT】 并且 【持续 M 帧】
  则:
    切换为 白天模式
    关闭补光灯

三、为什么这套逻辑最适配

  1. 白天切全彩 关灯测 AE → 真的暗 → 才切 不会误触发

  2. 全彩切白天 开灯测 AE → 虽然 AE 比白天大,但环境足够亮时,开灯后的 AE 会明显降低 只要低于亮阈值,就说明环境已经亮到不需要补光


四、参数推荐值

参数 推荐值 说明
TH_DARK(暗阈值) 环境很暗才触发
TH_BRIGHT(亮阈值) 中等 开灯后 AE 明显下降即满足
迟滞回差 TH_DARK - TH_BRIGHT ≥ 30% 防止来回跳变
防抖帧数 N 10~30 帧 白天切全彩,稍灵敏
防抖帧数 M 30~50 帧 全彩切白天,更保守

举例: TH_DARK = 100 TH_BRIGHT = 60 回差 40,非常稳定


五、高级防误触发策略

1. 梯度切模

复制代码
白天 → 预备全彩(不开灯)→ 确认暗 → 全开彩

2. 强光抑制

如果画面有强光点(车灯、路灯),但整体环境暗 → 不切白天图像整体亮度均值辅助判断,不要只看 AE。其实,也可以根据分块的图像亮度信息进行判断。当分块亮度小于一定阈值切满足EV条件才切,否则不切,避免频繁切换的操作。

3. 时间辅助

配合当地时间

  • 白天 6:00~18:00:优先白天模式
  • 夜晚 18:00~6:00:优先全彩模式 纯光控也可以,时间只是辅助更稳。

六、极简伪代码

cpp 复制代码
// 状态机
typedef enum {
    MODE_DAY,
    MODE_FULLCOLOR
} WorkMode;

WorkMode current_mode = MODE_DAY;
int dark_cnt = 0;
int bright_cnt = 0;

#define TH_DARK    100
#define TH_BRIGHT  60
#define N_FRAME    20
#define M_FRAME    40

void ae_check_task(int ae_value)
{
    if (current_mode == MODE_DAY) {
        // 白天 → 全彩:关灯测AE
        if (ae_value > TH_DARK) {
            dark_cnt++;
            if (dark_cnt >= N_FRAME) {
                // 切换
                current_mode = MODE_FULLCOLOR;
                open_light();
                dark_cnt = 0;
            }
        } else {
            dark_cnt = 0;
        }
    }
    else if (current_mode == MODE_FULLCOLOR) {
        // 全彩 → 白天:开灯测AE
        if (ae_value < TH_BRIGHT) {
            bright_cnt++;
            if (bright_cnt >= M_FRAME) {
                // 切换
                current_mode = MODE_DAY;
                close_light();
                bright_cnt = 0;
            }
        } else {
            bright_cnt = 0;
        }
    }
}

七、最终总结

  1. 白天切全彩:关灯测 AE,大于暗阈值 → 切
  2. 全彩切白天:开灯测 AE,小于亮阈值 → 切
  3. 迟滞 + 防抖帧数:杜绝反复切换

全彩模式开灯后 AE 依然偏大 → 不影响判断,因为我们用开灯后的相对 AE做切回条件。


相关推荐
大熊背1 个月前
ISP Pipeline中Lv实现方式探究之七--lv值计算框架final_version
自动曝光·对数函数·定点计算·isppipeline
大熊背1 个月前
Serial over TCP实现原理
网络·tcp·isppipeline
大熊背1 个月前
如何利用Lv值实现三级降帧
算法·自动曝光·lv·isppipeline
大熊背1 个月前
ISP Pipeline中Lv实现方式探究之三--lv计算定点实现
数据结构·算法·自动曝光·lv·isppipeline
大熊背1 个月前
ISP Pipeline中Lv实现方式探究之二
自动白平衡·自动曝光·lv·isppipeline·bv
大熊背1 个月前
ISP中Lv和ISO系统并存的意义
自动曝光·iso·lv·isppipeline
大熊背2 个月前
根据ISP各个ISO节点标定后的参数,如何插值生成当前增益下对应的ISP参数
iso·isppipeline·isp插值·log域
大熊背2 个月前
ISP图像效果参数压缩的可行性分析(二)差分序列做 BLE (RLE) 压缩原理
压缩·isppipeline
大熊背2 个月前
ISP图像效果参数压缩的可行性分析(一)
压缩·gamma·isppipeline