jshzp 2026-02-08 16:56 采纳率: 0%
浏览 3

摄像机开发调试时遇到的问题

问题遇到的现象和发生背景

ax620q摄像机方案,低光下原厂代码照度低于0.001lx时上电后很长时间不出图,所以传感器上电初始给了强制曝光,虽然能及时出图了,但是白天高光时出现了闪烁现象,初步判断是AE控制出现振荡,未能收敛。ps:采用ISPtuning工具调图时,没有不出图或图像闪烁的现象。

操作环境、软件版本等信息

VM虚拟机,sdk版本AX620E_SDK_V3.0.0_20241120230136_NO1951。自己画的电路板,sensor型号:os04a10

尝试过的解决方法

上电传感器强制曝光后,设置了180帧的“软启动”过程,该过程中限制了AE时每帧调节最大步长和最大调整增益,企图增大控制环节的阻尼系数,以抑制振荡。
实际测试发现效果不佳。在增加阻尼的思路上,继续优化参数?
还是思路错了,是其它原因?
或者是,前面解决低光下不出图的方法错了,不应该用强制曝光的方法?

我想要达到的结果

希望有经验的过来人指点一下,非常感谢!

  • 写回答

1条回答 默认 最新

  • 檀越@新空间 2026-02-08 16:57
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你描述的这个问题是典型的嵌入式摄像机开发中,低光环境下图像无法及时输出、高光下出现闪烁的问题。这种现象通常与自动曝光(AE)控制算法的稳定性密切相关。


    一、问题分析

    1. 低光下不出图的原因

    • 当环境照度低于0.001 lx时,传感器可能因光照过弱而无法采集到足够的信号。
    • 原厂代码未对这种情况做特殊处理,导致AE算法进入死循环或未正确初始化
    • 为解决此问题,你尝试了强制曝光,虽然解决了“不出图”的问题,但引入了高光下的闪烁现象

    2. 高光下闪烁的可能原因

    • 强制曝光后,AE控制逻辑在白天高光条件下频繁调整增益或快门时间,导致曝光值振荡
    • 这种振荡可能是由于:
      • AE控制环路的阻尼系数不足,导致系统不稳定;
      • 增益/快门步长过大,导致每次调整幅度太大,超出稳定范围;
      • AE算法逻辑设计不合理,如没有设置合理的最小/最大曝光值限制

    二、解决方案建议

    1. 重新评估“强制曝光”策略

    重点:强制曝光可能导致AE控制失衡,需谨慎使用。

    • 问题点:强制曝光可能会破坏AE算法的正常工作流程,尤其是在高光环境下,容易引发震荡。
    • 替代方案
      • 在低光下,可以采用动态增益补偿,而非强制曝光;
      • 或者通过预设曝光参数(如手动设定一个较低的增益),让AE在合理范围内进行微调。

    2. 优化AE控制算法,增强系统稳定性

    重点:提高AE控制系统的阻尼系数,防止振荡。

    具体措施如下:

    1. 降低AE每帧的最大调节步长

      • 减小增益和快门时间的调整幅度,避免一次调整过大。
      • 示例代码片段(伪代码):
        // 设置AE最大增益变化步长
        ae_set_gain_step(0.5f);  // 原值可能为1.0,现在减小到0.5
        
        // 设置AE最大快门时间变化步长
        ae_set_shutter_step(5);  // 原值可能为10,现在减小到5
        
    2. 增加AE控制的“积分项”权重

      • 增加对历史误差的累积,使系统更平滑地收敛。
      • 可以参考PID控制中的积分增益,适当增加其比例。
    3. 设置曝光值上下限

      • 避免AE在极端情况下过度调整。
      • 示例代码:
        ae_set_min_gain(1.0f);
        ae_set_max_gain(8.0f);
        
        ae_set_min_shutter(100);  // 最小快门时间(单位:microsecond)
        ae_set_max_shutter(10000); // 最大快门时间
        
    4. 加入“曝光锁定”机制

      • 在某些场景下(如高光区域),暂时禁用AE,改用固定曝光参数。

    3. 调试工具辅助分析

    重点:使用ISPtuning等工具进行数据采集和分析。

    • 使用ISPtuning工具,实时监控AE的增益、快门时间、目标亮度等参数变化;
    • 分析是否在高光下出现AE频繁跳变,从而判断是否是算法本身的问题。

    4. 测试验证与迭代优化

    重点:持续测试并逐步优化参数。

    • 在不同光照条件下(低光、中光、高光)进行测试;
    • 记录AE的响应曲线,观察是否有振荡、超调、收敛慢等问题;
    • 根据测试结果,逐步调整增益步长、快门步长、积分增益等参数。

    三、推荐修改后的代码结构(示例)

    // 初始化AE模块
    void init_ae() {
        ae_set_gain_step(0.5f);       // 降低增益步长
        ae_set_shutter_step(5);        // 降低快门步长
        ae_set_min_gain(1.0f);         // 设置增益下限
        ae_set_max_gain(8.0f);         // 设置增益上限
        ae_set_min_shutter(100);       // 设置快门时间下限
        ae_set_max_shutter(10000);     // 设置快门时间上限
        ae_set_integration_gain(0.9f); // 增加积分增益,提升稳定性
    }
    
    // AE主循环
    void ae_loop() {
        float current_brightness = get_current_brightness();
        float target_brightness = 128; // 目标亮度(根据传感器特性设定)
    
        float error = target_brightness - current_brightness;
        float gain = ae_get_gain();
        float shutter = ae_get_shutter();
    
        // 根据误差计算增益和快门调整量
        float gain_adjust = calculate_gain_adjust(error);
        float shutter_adjust = calculate_shutter_adjust(error);
    
        // 应用调整(确保不超过限制)
        gain += gain_adjust;
        if (gain > ae_get_max_gain()) gain = ae_get_max_gain();
        if (gain < ae_get_min_gain()) gain = ae_get_min_gain();
    
        shutter += shutter_adjust;
        if (shutter > ae_get_max_shutter()) shutter = ae_get_max_shutter();
        if (shutter < ae_get_min_shutter()) shutter = ae_get_min_shutter();
    
        // 更新AE参数
        ae_set_gain(gain);
        ae_set_shutter(shutter);
    }
    

    四、总结建议

    | 问题 | 解决思路 | |------|----------| | 低光不出图 | 考虑使用动态增益补偿,而非强制曝光 | | 高光闪烁 | 优化AE控制算法,降低步长、增加积分增益 | | 振荡问题 | 加入曝光值上下限,防止极端调整 | | 算法调试 | 使用ISPtuning等工具进行实时监测 |


    如果你愿意提供部分代码或更详细的AE控制逻辑,我可以进一步帮你分析具体问题所在。希望这些建议对你有帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 2月8日