Camera常用算法介绍5
5 多帧与融合算法
5.1 夜景算法
5.1.1 夜景算法的发展
-
早期阶段
早期夜景算法主要依赖YUV域的多帧合成技术,通过短曝光帧与长曝光帧叠加提升亮度,但易产生运动模糊和噪点。 -
Raw域处理兴起
随着对图像质量要求的提升,Raw域处理成为关键。Raw数据保留传感器原始信息,避免了ISP后处理引入的噪声放大,结合AI算法(如BM3D、深度学习)显著提升降噪效果。 -
AI与硬件协同
华为麒麟990等芯片集成专用NPU,实现Raw域实时降噪;谷歌Android 16引入“夜间模式指示器API”,通过环境光检测自动触发夜景模式,优化低光成像流程。
5.1.2 基础原理
5.1.2.1 Raw域处理流程
- 坏点矫正(DPC)
检测传感器坏点并插值修复,避免夜景长曝光下的异常像素干扰。 - 黑电平补偿(BLC)
消除传感器暗电流噪声,确保低光图像的暗部细节纯净。 - 镜头阴影矫正(LSC)
补偿镜头边缘亮度衰减,解决夜景四角偏暗问题。 - 降噪(NR)
在Raw域进行空域/频域滤波(如NLM、BM3D),或基于噪声模型训练深度学习网络,保留细节的同时抑制噪声。 - 自动白平衡(AWB)
灰度世界法或完美反射法调整色温,避免低光场景偏色。 - 去马赛克(Demosaic)
将Bayer阵列插值为RGB图像,现代算法结合梯度校正减少伪影。
5.1.2.2 YUV域处理流程
- 多帧合成
对齐多帧YUV数据,加权融合以减少动态模糊和噪点。 - 局部对比度增强
基于亮度分量(Y)调整暗区动态范围,提升细节可见性。 - 色调映射(Tone Mapping)
压缩高动态范围,避免过曝与欠曝,如全局/局部Gamma校正。 - 色彩增强
在UV通道应用饱和度曲线,优化低光下的色彩表现。
5.1.3 代码实现示例
5.1.3.1 Raw数据获取(Android Camera2 API)
// 创建Raw ImageReader
mRawImageReader = new RefCountedAutoCloseable<>(
ImageReader.newInstance(width, height, ImageFormat.RAW_SENSOR, 5)
);
mRawImageReader.get().setOnImageAvailableListener(mOnRawImageAvailableListener, mBackgroundHandler);
// 在CaptureSession中添加Raw Surface
mCameraDevice.createCaptureSession(
Arrays.asList(previewSurface, jpegSurface, mRawImageReader.get().getSurface()),
new CameraCaptureSession.StateCallback() {
/* ... */ },
mBackgroundHandler
);
// 保存Raw数据回调
private ImageReader.OnImageAvailableListener mOnRawImageAvailableListener = reader -> {
Image image = reader.acquireNextImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
// 处理Raw数据(如保存为DNG格式或进行算法处理)
image.close();
};
代码来源:Android Camera2官方示例
5.1.3.2 YUV域灰度处理(HAL层示例)
// 在QCamera2HWICallbacks.cpp中实现YUV转灰度
void YUV2Gray(unsigned char* srcYuv, int w, int h) {
int mid = w * h / 2; // Y数据长度为w*h,UV数据为w*h/2
unsigned char* startP = srcYuv + mid;
for (int i = 0; i < mid; i++) {
*startP = 0x80; // 将UV分量置为灰色(128)
startP++;
}
}
代码说明:通过修改UV分量实现图像灰度化,常用于预览流处理
5.1.4 技术挑战与趋势
- 算力优化:Raw域深度学习模型需轻量化以适应移动端(如TensorFlow Lite)。
- 多传感器融合:结合ToF/LiDAR数据优化低光对焦与深度估计。
- 端到端Pipeline:谷歌计划在Android 16中整合夜间模式API,实现从环境检测到成像的全流程自动化。
5.2 超分辨率算法(SR算法)
5.2.1 算法介绍
超分辨率算法旨在通过软件技术将低分辨率图像重建为高分辨率图像。在Android相机中,该技术主要应用于数码变焦优化、夜景模式增强等场景,通过算法弥补光学硬件的物理限制。
核心功能:
5.2.2 技术发展
5.2.2.1 传统阶段(2016年前)
5.2.2.2 深度学习阶段(2016-2023)
5.2.2.3 移动端优化阶段(2023至今)
- 谷歌Super Res Zoom:利用手部自然抖动实现多帧超分7
- RealSR:腾讯开源的盲超分算法