057、RAW 图像批处理色彩不一致?LibRaw 解码、色彩矩阵与白平衡归一化方案
057、RAW 图像批处理色彩不一致?LibRaw 解码、色彩矩阵与白平衡归一化方案
一、问题现场:同一场景,不同照片,颜色却“各说各话”
去年秋天接手一个无人机多光谱项目,客户反馈:同一批次飞行的RAW图像,用LibRaw批量解码后,输出TIFF的颜色肉眼可见地不一致。有的偏青,有的偏红,有的饱和度像被抽走了一半。更诡异的是,这些RAW文件来自同一台相机、同一组参数、同一光照条件。
我第一反应是“白平衡没对齐”。但检查后发现,相机白平衡设置确实是固定的。问题出在哪?打开LibRaw的调试日志,发现每张图像解码后,libraw.imgdata.color矩阵里的cam_mul(相机白平衡乘数)居然不一样。同一台相机,同一ISO,同一色温,cam_mul的数值在±5%范围内波动。这就是“色彩不一致”的根源——LibRaw默认会从RAW文件的元数据中读取白平衡乘数,但不同帧的元数据可能因为传感器噪声、增益微调等因素产生微小差异。
更隐蔽的问题是:LibRaw解码时,如果用户不主动干预,它会使用相机厂商嵌入的“参考白平衡”矩阵,但这个矩阵是针对特定光照(如D65)标定的。一旦实际场景色温偏离标定值,色彩矩阵的线性变换就会引入偏差。批处理时,每张图的元数据差异被放大,最终输出就“各说各话”了。
二、LibRaw解码的“暗坑”:色彩矩阵不是你想的那样
LibRaw的默认解码流程是这样的:读取RAW文件 → 解析元数据(包括白平衡乘数、色彩矩阵) → 去马赛克 → 应用色彩矩阵 → 输出RGB
