Camera 画面偏红、偏紫怎么查?——从 IRCUT 未切换到多原因定位
导读:先回答三个问题
Camera 画面偏红、偏紫,很多人第一反应是调 ISP 的 R/G/B 增益、AWB 或 CCM。但在带红外夜视功能的 Camera 模组中,IRCUT 是否真正切换到正确位置,往往应该是最先确认的事项。
本文按照下面的思路展开:
text
问题:画面到底出现了什么现象?
↓
分析:光学、硬件、Sensor 和 ISP 哪一层可能导致偏色?
↓
解决:如何设计最小成本的验证实验并修复?
↓
进一步判断:如果不是 IRCUT,还可能是哪一种问题?如何区分?
核心原则: 先确认进入 Sensor 的光学条件和 RAW 数据是否正确,再调整 ISP。不要用 ISP 参数去掩盖 IRCUT 机构、滤片装配或控制时序问题。
本文使用的原始资料没有提供具体芯片、Sensor、IRCUT、开发板、GPIO 和 SDK 信息。因此,文中的 GPIO、电压、动作时间和寄存器配置均不写死,具体平台需要以硬件资料和实测结果为准。
一、问题:画面偏红、偏紫时,先观察什么?
1.1 典型现象
需要重点关注以下表现:
• 白天画面整体偏红、偏紫或偏红紫;
• 对着窗户、室外或自然光时,偏色明显加重;
• 白色、灰色和黑色物体的颜色还原异常;
• 日夜状态已经切换,但画面颜色没有随之恢复;
• 同一套 ISP 参数在室内看起来正常,换到自然光下又异常;
• 手动推动或强制控制 IRCUT 后,画面颜色发生明显变化。
这些现象可以帮助我们建立方向,但仅凭一张图片不能直接证明根因。偏红、偏紫可能来自 IRCUT,也可能来自 Bayer Pattern、Sensor 数据链路、ISP 参数、镜头或显示后处理。
1.2 原始资料中的现象对比
IRCUT 红片状态示例
IRCUT 红片正常图
IRCUT 白片状态下的偏紫示例
IRCUT 白片偏紫图
原始技术资料的结论是:IRCUT 没有切到红片、切换位置不准、机构卡住/偏移/松动,或者红片/白片装配异常,都可能导致画面偏紫或偏红紫。
1.3 先做三个快速判断
判断一:问题是否只在白天或自然光下明显?
如果室内普通光源下不明显,而窗边、室外或自然光下加重,应优先关注滤片状态和光学路径。
判断二:强制切换 IRCUT 后,画面是否变化?
在光源、曝光和 ISP 参数尽量不变时,分别采集红片和白片状态的画面:
• 红片正常、白片偏紫:优先检查白天是否误停在白片位置;
• 软件状态变化但画面不变化:检查机构是否实际动作、控制极性和驱动链路;
• 两个状态都没有明显变化:先确认 IRCUT 是否被真正驱动,也要考虑测试光源差异不足;
• 两个状态都异常:不要继续只盯着 IRCUT,应扩大排查范围。
判断三:问题是“切换后出现”,还是“从启动就存在”?
• 日夜切换后出现: 优先查 IRCUT、切换时序、ISP Profile 同步;
• 从启动开始一直异常: 同时检查 Bayer Pattern、Sensor 数据格式、镜头/滤片装配和基础 ISP 配置;
• 只在最终显示画面异常: 还要检查 YUV/RGB、色彩空间、编码和显示链路。
二、分析:从基础光学理解 IRCUT 为什么影响颜色
2.1 光从哪里到哪里?
可以把 Camera 成像链路简化为:
场景光线
↓
镜头
↓
IRCUT / 其他光学滤片
↓
Sensor 感光面
↓
RAW Bayer 数据
↓
ISP:AE、AWB、去噪、CCM、Gamma 等
↓
YUV/RGB、编码或显示
偏色可能在这条链路的任何一层产生。因此,排查时不能只看最终画面,还要尽可能判断偏色最早在哪一层出现。
2.2 可见光和近红外光
人眼主要感知可见光,而 Camera Sensor 通常还会对一定范围的近红外光产生响应。自然光和一些人工光源中都可能包含近红外成分,只是比例不同。
如果白天没有正确过滤近红外光,Sensor 接收到的光谱就与正常白天状态不同。由于 Sensor 的 R、G、B 感光响应并不完全相同,光谱变化会改变三个颜色通道的相对比例,最终可能表现为:
• 红色增强;
• 紫色或品红倾向;
• 白色物体无法还原为中性白;
• AWB 在不同光源下表现不稳定。
可以用下面的关系理解:
滤片状态改变
↓
进入 Sensor 的光谱改变
↓
R/G/B 通道响应比例改变
↓
RAW 或 ISP 统计值发生变化
↓
最终画面出现偏色
这里讲的是通用原理,不等于对所有设备的颜色方向作绝对保证。最终偏红还是偏紫,还与 Sensor 光谱响应、镜头、滤片特性、AWB 和 ISP 配置有关。
2.3 IRCUT、红片和白片是什么?
带红外夜视功能的 Camera 通常在白天和夜间使用两种不同的光学状态:
状态 | 常见滤片称呼 | 主要目的 |
白天 | 红片、IR-CUT 片 | 过滤近红外成分,改善可见光颜色还原 |
夜间 | 白片、透光片 | 放行更多光线,配合红外灯提升夜视能力 |
本文沿用原始资料中的“红片”“白片”叫法。但不同厂家可能使用不同的外观、命名和控制逻辑,不能仅凭颜色名称推断功能,也不能直接推断 GPIO 高低电平。
工程上真正需要确认的是:
当前实际进入 Sensor 的光学状态是什么?
软件目标状态和机械实际位置是否一致?
当前 ISP Profile 是否与该光学状态匹配?
2.4 为什么不能先调 ISP?
AWB、CCM 和颜色增益是在某种光学条件下工作的。如果 IRCUT 没切到位,进入 Sensor 的光谱已经改变,ISP 看到的是一个与预期不同的输入。
此时强行调参数可能出现:
• 一个固定场景下暂时正常;
• 换光源后再次偏色;
• 日夜切换后颜色跳变;
• AWB 增益达到异常范围;
• 同一套参数在不同模组上表现不一致。
所以正确顺序应该是:
先确认光学状态
↓
再确认 RAW、Sensor 和数据格式
↓
再确认 ISP Profile、AWB 和 CCM
↓
最后做参数微调
三、解决:如何一步一步定位 IRCUT 问题?
3.1 第一步:固定测试条件
为了避免 AE/AWB 自动变化干扰判断,尽量固定:
• Camera 模组和镜头;
• 测试目标和光源;
• 曝光、模拟增益和数字增益;
• AWB 状态;
• 日夜模式;
• ISP Profile;
• 录像或抓帧方式。
建议至少准备:
1. 室内均匀光源;
2. 窗边或室外自然光;
3. 白色纸张;
4. 灰色或黑色目标;
5. 条件允许时,增加红外反射明显的目标。
每次只改变一个主要变量,避免同时切换 IRCUT、ISP Profile、曝光和 AWB,导致实验结果无法解释。
3.2 第二步:记录软件状态和实际状态
建议把以下信息记录下来:
项目 | 记录内容 |
软件日夜状态 | 白天/夜间/未知 |
目标 IRCUT 状态 | 红片/白片/未知 |
实际滤片位置 | 红片/白片/中间/未确认 |
控制输出 | 按实际平台填写 |
机构动作 | 正常/无动作/卡顿/未确认 |
画面现象 | 正常/偏红/偏紫等 |
ISP Profile | 名称、版本和加载时间 |
AE/AWB | 自动、锁定及统计值 |
结果 | 是否可复现 |
这里最重要的一点是:
软件打印“白天”不等于 IRCUT 已经物理切到红片;软件发送了命令也不等于机构已经到位。
3.3 第三步:强制对比红片和白片
先不要依赖完整的自动日夜流程,而是使用已有调试接口、驱动接口或受控硬件手段,分别让 IRCUT 进入两个状态:
目标状态 A:红片
等待机构稳定
采集画面和日志
目标状态 B:白片
等待机构稳定
采集画面和日志
对比时观察:
• 机构是否动作;
• 是否到达机械终点;
• 画面亮度是否变化;
• 颜色是否变化;
• 目标状态和实际位置是否一致。
不要在没有原理图或规格书的情况下直接断言“GPIO 高电平就是红片”。控制极性应由硬件定义和实测共同确认。
3.4 第四步:检查机械和装配
原始资料列出的常见机械原因包括:
1. IRCUT 没有切到红片;
2. 切换位置不准;
3. 机构卡住、偏移或松动;
4. 红片/白片装配异常。
进一步检查:
• 滤片是否完整移动到限位;
• 电机是否只有声音而没有到位;
• 机构是否回弹;
• 镜头座、支架或螺丝是否挤压机构;
• 红片和白片是否装反或位置异常;
• 连接器和排线是否松动。
如果手动将滤片调整到红片位置后画面恢复,说明应优先沿 IRCUT 机构、装配、驱动和供电方向继续排查,而不是先改 CCM。
3.5 第五步:检查 GPIO、驱动和供电
在硬件允许并具备测量条件时,检查:
• GPIO 是否初始化成功;
• GPIO 方向是否正确;
• 控制极性是否符合原理图;
• 两路控制是否同时处于冲突状态;
• 驱动芯片输入和输出是否符合预期;
• IRCUT 动作期间供电是否稳定;
• 连接器、排线和地线是否可靠;
• 控制命令是否被其他模块覆盖。
当前资料没有提供具体 GPIO、驱动芯片、电压和动作波形,因此这些值必须由项目资料或实测补充。
3.6 第六步:检查日夜切换时序
一个完整的切换过程通常类似:
检测亮度
↓
确定目标日夜状态
↓
控制 IRCUT
↓
等待机构到位并稳定
↓
切换 Sensor/ISP 配置
↓
丢弃过渡帧
↓
等待 AE/AWB 稳定
如果 ISP Profile 在 IRCUT 到位前就切换,可能出现:
• 切换过程画面短暂偏色;
• 切换后持续偏色;
• 机构还在动作但 ISP 已按新状态工作;
• 日夜状态反复跳变;
• GPIO 命令被下一次状态更新覆盖。
建议增加:亮度滞回、连续多帧确认、最小状态保持时间、切换锁、动作超时和异常告警。实际等待时间应以器件规格和实测为准。
3.7 第七步:确认修复结果
修复后不能只看一张“正常截图”,至少要重复验证:
• 室内均匀光源;
• 窗边或室外自然光;
• 白天到夜间切换;
• 夜间到白天切换;
• 多次重复切换;
• 冷启动和热启动;
• 不同亮度临界条件。
建议保存:画面、切换日志、软件状态、实际位置确认、ISP Profile、AE/AWB 统计和版本信息。
四、进一步判断:偏红、偏紫还可能是什么原因?
4.1 先建立候选原因树
最终画面偏红或偏紫,可能来自以下层级:
光学层:IRCUT 状态、滤片装配、镜头和反射
↓
机械/电气层:机构卡滞、GPIO、驱动、供电
↓
Sensor/数据层:Sensor 配置、RAW 格式、Bayer Pattern
↓
ISP 层:AWB、CCM、R/G/B 增益、日夜 Profile
↓
输出层:YUV/RGB、色彩空间、编码、显示和后处理
排查的关键不是列出尽可能多的原因,而是设计实验,判断偏色最早出现在哪一层。
4.2 IRCUT 未切换与其他问题的对比
候选原因 | 典型表现 | 常见触发时机 | 优先验证方法 |
IRCUT 未切到红片 | 白天偏红/偏紫,自然光下加重 | 日夜切换后或白天 | 强制切换并确认实际滤片位置 |
IRCUT 机构不到位 | 偶发、状态不稳定、重复切换结果不同 | 机构动作时 | 观察机械位置、动作时间和供电 |
红片/白片装配异常 | 更换或拆装后异常,状态与预期不符 | 装配后一直存在 | 与正常模组对比、确认滤片位置 |
Bayer Pattern 错误 | 红蓝关系明显错误,可能整体偏紫或伴随条纹 | 上电出图即存在 | 核对 Sensor 输出和 ISP Bayer 配置 |
Sensor 数据格式错误 | 颜色和图像结构同时异常 | Sensor/驱动配置变更后 | 抓 RAW,核对 mbus code、位宽和格式 |
AWB 异常 | 颜色随场景变化,收敛慢或增益极端 | 光源变化、模式切换后 | 锁定 AWB,观察统计值和 R/G、B/G 增益 |
CCM/Profile 错误 | 整体色调固定异常,换参数后变化 | ISP 参数加载后 | 确认 Profile、CCM 版本和实际生效寄存器 |
镜头/滤片反射或光学问题 | 局部红斑、鬼影、边角异常 | 强光源或特定角度 | 改变光源角度、替换镜头/模组 |
显示/后处理问题 | RAW/ISP 输出正常,最终画面异常 | 编码、显示或后处理后 | 对比 RAW、YUV/RGB 和显示结果 |
表中的“典型表现”只是定位线索,不是绝对判据,最终仍需实验确认。
4.3 如何区分 Bayer Pattern 错误?
Bayer Pattern 不匹配时,Sensor 实际输出顺序与 ISP 解码配置不一致。例如实际输出和 ISP 配置使用了不同的 RGGB、BGGR、GRBG 或 GBRG 顺序,可能产生:
• 红蓝关系明显错误;
• 整体异常偏紫;
• 颜色区域伴随条纹噪声;
• 从设备开始出图就异常;
• 强制切换 IRCUT 对红蓝关系没有根本影响。
因此:
从启动开始持续反色/偏紫
→ 优先核对 Bayer Pattern 和 RAW 数据格式
日夜切换后才偏色,且改变滤片位置会改变画面
→ 优先检查 IRCUT 和切换时序
这两种问题也可能同时存在,不能只凭一个现象排除另一种可能。
4.4 如何区分 AWB/CCM 问题?
可以尝试在平台支持的情况下固定 AE、增益和 AWB:
• 固定后偏色仍随滤片位置变化:优先关注光学路径和 IRCUT;
• 固定后颜色稳定但整体色调仍固定错误:检查 CCM、颜色增益和 Profile;
• AWB 增益达到极端值且随光源变化:检查输入光谱、AWB 统计区域和算法配置;
• 日夜切换时 Profile 与滤片状态不一致:先修正状态同步,再讨论调参。
不能把“调到某个场景正常”当作根因已经解决。应验证多个光源和多个场景。
4.5 如何用 RAW 和分层输出定位?
如果平台支持,建议同时保存:
• RAW Bayer 数据;
• ISP 输出的 YUV/RGB;
• AWB/AE 统计值;
• 日夜状态和 IRCUT 控制日志;
• 最终显示或编码后的画面。
可以按下面的逻辑判断:
RAW 已经偏色
→ 优先查 IRCUT、镜头、滤片、Sensor 和模拟链路
RAW 颜色关系正常,ISP 输出异常
→ 优先查 Bayer 解码、AWB、CCM、Profile 和 ISP 配置
ISP 输出正常,最终显示异常
→ 优先查色彩空间、编码、显示和后处理链路
这里的“RAW 正常”需要有合适的参考物和对比条件,不能仅凭肉眼查看一张未经处理的 RAW 图像下结论。
4.6 用“只改变一个变量”的实验建立证据链
进一步定位最重要的不是一次性检查所有项目,而是控制变量:
实验 | 只改变的变量 | 可以回答的问题 |
A | IRCUT 状态 | 颜色是否与滤片状态相关? |
B | ISP Profile | 是否是日夜参数不匹配? |
C | AWB 开关/锁定状态 | 是否是自动白平衡放大了问题? |
D | 镜头或 IRCUT 模组 | 是否是光学件或机构问题? |
E | Bayer 配置 | 是否是 RAW 解码顺序错误? |
F | 输出链路 | 偏色最早出现在哪个数据节点? |
每次实验都记录:输入条件、唯一变量、输出画面、日志和结论。这样才能从“猜原因”变成“用证据排原因”。
五、让问题更容易复现和定位
5.1 建立三层 IRCUT 状态
不要只维护一个 day/night 变量,建议分别记录:
目标状态:系统希望 IRCUT 处于什么位置
控制状态:当前输出了什么 GPIO 或驱动命令
实际状态:机构实际到达了什么位置,或当前是否未知
例如:
目标状态:DAY_FILTER
控制命令:已发送
机构反馈:无
实际状态:未知
这比直接打印“切换到白天成功”更准确。
5.2 建议增加的日志
环境亮度和日夜判定结果
目标 IRCUT 状态
控制输出
命令发送时间
机构稳定时间
动作耗时
实际或推断位置
当前 ISP Profile
Sensor 模式
AE/AWB 状态
切换超时次数
重复切换次数
示例:
[IRCUT] target=DAY_FILTER
[IRCUT] control_output=
[IRCUT] command_sent
[IRCUT] settle_done
[ISP] profile=DAY
[AWB] state=
只是占位符,不能直接作为实际 GPIO 或状态值使用。
5.3 日夜状态机要防抖和防重入
临界光照下,亮度可能在阈值附近波动,导致:
白天 → 夜间 → 白天 → 夜间
建议至少加入:
• 白天/夜间不同阈值的滞回;
• 连续多帧确认;
• 最小状态保持时间;
• 切换期间禁止重复触发;
• 机构到位等待;
• 动作超时;
• 失败重试或告警。
可以抽象成:
text
DAY_STABLE
↓ 连续满足夜间条件
SWITCHING_TO_NIGHT
↓ IRCUT 到位并完成稳定等待
NIGHT_STABLE
NIGHT_STABLE
↓ 连续满足白天条件
SWITCHING_TO_DAY
↓ IRCUT 到位并完成稳定等待
DAY_STABLE
5.4 处理“软件成功、硬件失败”
如果 IRCUT 没有位置反馈,软件通常只能知道命令是否发送,不能直接知道滤片是否到位。因此建议把状态分成:
命令发送成功 ≠ 机构动作成功 ≠ 滤片到位 ≠ 画面已稳定
必要时通过机械观察、电气测量、切换后画面、超时检测和维护测试建立间接确认机制。
六、常见误区
误区 1:所有偏红都调 R 增益
可能暂时改善一个场景,但不能修复滤片状态、机械不到位或光谱变化。
误区 2:所有偏紫都是 IRCUT
Bayer Pattern、Sensor 数据格式、AWB、CCM、镜头反射和显示链路都可能造成偏色。
误区 3:软件状态就是实际状态
软件显示“白天”不代表滤片已切到红片;发送 GPIO 也不代表机构已经到位。
误区 4:听到电机声音就是成功
电机有声音不等于滤片到达机械限位,仍需检查位置和结果。
误区 5:只在室内普通光源下测试
自然光和不同光源的光谱成分不同,建议至少增加窗边和室外场景。
误区 6:只看最终截图,不保存中间数据
没有 RAW、统计值、状态日志和版本信息,就很难判断偏色从哪里开始出现。
七、故障定位记录表
编号 | 检查项目 | 结果 |
1 | 白天是否偏红或偏紫 | 待填写 |
2 | 窗边/自然光下是否加重 | 待填写 |
3 | 问题从启动就存在,还是切换后出现 | 待填写 |
4 | 软件日夜状态 | 待填写 |
5 | IRCUT 实际滤片位置 | 待确认 |
6 | 强制切换是否有机械动作 | 待填写 |
7 | 强制红片后画面是否恢复 | 待填写 |
8 | GPIO 控制定义是否已核对 | 待填写 |
9 | 动作期间供电是否稳定 | 待测量 |
10 | 机构是否到达机械限位 | 待确认 |
11 | 红片/白片是否装配正确 | 待确认 |
12 | 日夜 ISP Profile 是否匹配 | 待填写 |
13 | Bayer Pattern 是否与 Sensor 输出一致 | 待确认 |
14 | AWB 增益是否异常 | 待填写 |
15 | RAW 数据是否已经偏色 | 待填写 |
16 | ISP 输出是否已经偏色 | 待填写 |
17 | 更换正常 IRCUT 后是否恢复 | 待验证 |
18 | 更换镜头/模组后是否恢复 | 待验证 |
八、结论
对于白天画面偏红、偏紫的问题,IRCUT 未切到红片是一个重要且应优先验证的方向。原因可能是滤片没有动作、切换位置不准、机构卡住/偏移/松动、红片白片装配异常,也可能是 GPIO、驱动、供电和日夜切换时序造成的。
但偏红、偏紫并不只由 IRCUT 引起。Bayer Pattern 配置错误、Sensor 数据格式错误、AWB/CCM/ISP Profile 异常、镜头或滤片光学问题以及显示后处理问题,都可能产生相似现象。
推荐的完整排查顺序是:
text
1. 固定场景,确认现象和触发条件
2. 确认软件目标状态与 IRCUT 实际物理位置
3. 强制切换红片/白片并对比画面
4. 检查机械结构、滤片装配和到位情况
5. 检查 GPIO、驱动、供电和动作时序
6. 确认 IRCUT 与 Sensor/ISP Profile 同步
7. 核对 Bayer Pattern 和 Sensor 数据格式
8. 对比 RAW、ISP 输出和最终显示链路
9. 最后再调整 AWB、CCM 和颜色增益
一句话总结: 先确认光学状态,再确认 RAW 和数据链路,最后才调 ISP;只有通过对比实验和数据分层,才能判断画面偏红、偏紫到底是 IRCUT,还是其他环节的问题。
