公司动态
001、影像系统架构全景:从镜头到显示屏的全链路数据流与软硬件边界划分实战
001、影像系统架构全景从镜头到显示屏的全链路数据流与软硬件边界划分实战上周在客户现场调一个车载环视项目现象很诡异倒车影像在低温环境下启动后画面先是正常大约三秒后出现整屏绿色噪点再过两秒恢复但亮度明显偏暗。客户一口咬定是sensor问题我们拿着温箱反复复现最后定位到是ISP的AWB统计窗口在低温下被sensor的black level漂移带偏了。这个案子本身不复杂但它把影像系统里最容易被忽视的软硬件边界问题暴露得淋漓尽致——你以为是硬件的事其实是软件没给硬件留够容错空间。做影像系统架构第一件事不是看芯片手册不是选sensor而是先把整条数据链路在纸上画出来。从镜头进来的光打到sensor的光电二极管上经过ADC变成RAW数据然后进ISP做坏点校正、黑电平校正、去马赛克、白平衡、降噪、锐化、色彩校正、伽马、色调映射最后编码成YUV或者RGB送进显示子系统或者编码器。这条链路看着简单但每一级都有它的物理边界和算法边界而架构师的核心工作就是把这些边界划清楚让每一级只做自己该做的事不越界也不推诿。先说sensor这一级。sensor输出的RAW数据本质上是一个二维的光强分布图每个像素点只有一个颜色通道的信息。这里有个关键参数叫black level就是无光照射时ADC输出的基准值。不同sensor、不同增益下black level是会漂移的尤其是温度变化大的场景。很多软件工程师喜欢在ISP里写死一个black level值图省事结果就是开头那个案子——低温下sensor的black level漂了十几个LSBISP的统计模块把暗电流当成有效信号AWB和AE全被带偏。正确的做法是sensor驱动里要实时读取black level寄存器或者用sensor厂商提供的校准表在ISP的BLC模块里做动态补偿。这个边界必须划清楚sensor驱动负责提供准确的black level信息ISP的BLC模块负责消费这个信息中间不能有任何人拍脑袋写死一个值。再说ISP这一级。现在主流平台的ISP都是多核流水线架构高通Spectra、联发科Imagiq、海思ISP本质上都是把图像处理拆成多个硬件加速模块每个模块处理一个子任务。这里最容易踩的坑是把算法逻辑和硬件加速器的能力边界搞混。比如降噪硬件上有2D NR和3D NR之分2D NR是单帧空间域处理3D NR是多帧时域处理。有些算法工程师喜欢在3D NR里做运动补偿但硬件加速器只提供了简单的时域混合没有真正的运动估计单元结果就是运动物体拖影严重。这不是算法不行是架构上没搞清楚硬件加速器的能力边界。正确的做法是在架构设计阶段就把每个硬件模块的能力清单列出来哪些是硬件强项哪些是软件补偿哪些是算法兜底写清楚然后严格按照这个边界去分工。这里要特别说一句别迷信芯片厂商的参考设计。参考设计是给你做功能验证的不是给你做量产调优的。高通的Spectra参考代码里很多模块的参数都是保守的通用值你要直接拿去量产画质肯定被竞品吊打。联发科的Imagiq也是一样它的HDR融合策略在暗光下容易产生伪影你得根据自己项目的sensor特性和场景需求去调。海思的ISP在安防领域很强但它的3A算法对动态场景的响应偏保守做车载的话要自己写运动检测的预处理。瑞芯微的ISP性价比高但它的色彩科学做得比较粗糙做消费类产品的话得花大力气在色彩校正上。安霸的ISP在运动相机领域是标杆但它的功耗预算很紧做手机的话要仔细评估散热。软硬件边界划分核心是搞清楚哪些事必须硬件做哪些事可以软件做哪些事必须软件做。必须硬件做的比如sensor的曝光控制、ISP的BLC、坏点校正这些是物理层面的操作软件干预不了只能通过寄存器配置。可以软件做的比如降噪强度、锐化强度、色彩风格这些是算法层面的调优软件可以灵活控制。必须软件做的比如场景识别、人脸检测、自动对焦策略这些是高层语义理解硬件加速器做不了只能靠CPU或者NPU跑算法。边界划清楚之后每个模块的接口定义就清晰了硬件模块暴露寄存器接口软件模块暴露算法接口中间用标准的buffer格式衔接这样前后端开发可以并行调试的时候也能快速定位问题。还有一个经常被忽略的边界是ISP和显示子系统之间的边界。很多项目里ISP输出的YUV数据直接送显示中间不做任何处理结果就是屏幕上的色彩和sensor看到的场景差异巨大。这里的问题在于ISP的输出是面向编码器的它的色彩空间和动态范围是给视频压缩准备的不是给显示准备的。显示子系统需要的是经过色调映射和色彩管理的图像要匹配屏幕的色域和亮度曲线。所以架构上要在ISP和显示之间加一个显示处理模块做色彩空间转换、动态范围压缩、色域映射这个模块可以是硬件也可以是软件但必须存在否则画质永远调不好。从调试的角度看全链路的数据流必须做到每一级都可以单独打点、单独dump。我们做量产调优的时候最怕的就是数据流是黑盒的出了问题只能靠猜。所以架构设计阶段就要规划好调试接口每个模块的输入输出都要有debug buffersensor的RAW数据要能dump出来看ISP每个子模块的处理结果要能单独导出显示模块的输出要能截图对比。这些调试接口在量产阶段可以关掉但开发阶段必须全开否则出了问题你连问题出在哪一级都不知道。最后说一个个人经验。影像系统的架构设计本质上是在做取舍没有完美的方案只有适合项目的方案。做手机你要优先考虑功耗和模组成本sensor选型要跟ISP的算力匹配不能选一个高像素sensor但ISP处理不过来。做车载你要优先考虑可靠性和一致性sensor和ISP的配合要留足余量因为车规级的温度范围很宽black level漂移、暗电流噪声这些都要提前考虑。做安防你要优先考虑低照度性能ISP的降噪和HDR策略要针对夜间场景专门调优。做工业检测你要优先考虑色彩还原度和细节保留ISP的锐化和色彩校正要做得非常精细。架构师的价值不在于你多懂芯片手册而在于你能在项目初期就把这些边界划清楚让每个模块的负责人知道自己该干什么、不该干什么让整个系统在量产阶段少踩坑。记住影像系统没有银弹只有把每一级的物理边界和算法边界都搞清楚才能做出真正能打的产品。