1. 前序成果与本篇目标
第一篇完成了 Zero-DCE 模型的端侧部署,NPU 推理延迟 8 ms,PSNR 从 8.2 dB 提升至 20.1 dB。但在高 ISO 低光照场景下,Zero-DCE 增亮的同时放大了噪声——增强后的图像在暗部区域出现明显的颗粒感与色彩噪点,影响视觉质量与下游检测任务。
低光照增强的核心矛盾在于:提升亮度必然放大噪声,抑制噪声必然损失细节。单独的增强或去噪都无法兼顾。本篇的核心目标是实现噪声抑制与细节还原的联合优化,使增强后的图像在亮度提升的同时保持低噪声与高清晰度。
2. 问题分析与优化策略
2.1 噪声放大问题
低光照图像中,传感器噪声与亮度成正比。Zero-DCE 的曲线映射在提升像素值的同时等比例放大了噪声。实测数据如下:
| 场景 | 原始噪声水平(σ) | 增强后噪声水平(σ) | 放大倍数 |
|---|---|---|---|
| ISO 800 室内 | 5.2 | 12.8 | 2.46x |
| ISO 1600 夜景 | 8.7 | 21.3 | 2.45x |
| ISO 3200 极暗 | 15.4 | 38.2 | 2.48x |
2.2 联合优化策略
策略分三步:
- 增强前噪声估计:在增强前估计图像噪声水平,生成噪声分布图
- 增强与去噪联合推理:Zero-DCE 增强与轻量去噪网络并行推理,去噪强度由噪声水平自适应调节
- 细节还原后处理:基于引导滤波恢复被去噪平滑的边缘细节
3. 噪声估计模块
3.1 噪声水平估计
采用基于局部方差的噪声估计方法,在每个 8×8 局部 patch 中估计噪声标准差:
classNoiseEstimator:defestimate(self,image):"""估计图像噪声水平,返回噪声分布图"""gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)h,w=gray.shape noise_map=np.zeros((h//8,w//8),dtype=np.float32)foriinrange(0,h-8,8):forjinrange(0,w-8,8):patch=gray[i:i+8,j:j+8].astype(np.float32)# 局部方差作为噪声估计local_std=np.std(patch)noise_map[i//8,j//8]=local_std# 归一化到 [0, 1]noise_map=np.clip(noise_map/30.0,0,1)noise_map=cv2.resize(noise_map,(w,h))returnnoise_map noise_estimator=NoiseEstimator()3.2 自适应去噪强度
基于噪声分布图,为每个像素区域计算自适应去噪强度:
defcompute_denoise_strength(noise_map):"""将噪声水平映射为去噪强度"""# 高噪声区域使用强去噪,低噪声区域使用弱去噪strength=np.clip(noise_map*3.0,0.1,1.0)returnstrength4. 联合增强去噪推理
4.1 轻量去噪模型部署
选用 DnCNN-S(小型版本)作为去噪模型,与 Zero-DCE 并行部署在 NPU 上:
| 模型 | 参数量 | INT8 量化体积 | NPU 推理延迟 | 去噪能力 |
|---|---|---|---|---|
| DnCNN-S | 0.5M | ~2 MB | 15 ms | 中等噪声 |
| NAFNet-Tiny | 1.2M | ~5 MB | 28 ms | 强噪声 |
| BM3D(传统) | N/A | N/A | 120 ms (CPU) | 强噪声 |
本篇选用DnCNN-S。NPU 推理 15 ms,与 Zero-DCE 的 8 ms 合计 23 ms,仍满足 30 FPS 实时需求。
4.2 QNN 转换
qnn-onnx-converter--input_model dncnn_s.onnx ^--output_path dncnn_s.cpp^--input_list dncnn_input_list.txt ^--quantization_per_channel ^--enable_htp_f16 qnn-context-binary-generator--model dncnn_s.cpp^--backend libQnnHtp.so ^--output dncnn_s.bin4.3 联合推理封装
classJointEnhanceDenoise:def__init__(self):self.enhancer=LowLightEnhancer("zero_dce.bin")self.denoiser=qnn.Model("dncnn_s.bin",backend="libQnnHtp.dll")self.denoiser.load()self.noise_estimator=NoiseEstimator()defprocess(self,image):"""联合增强与去噪"""# 1. 噪声估计noise_map=self.noise_estimator.estimate(image)# 2. Zero-DCE 增强(NPU)enhanced=self.enhancer.enhance(image)# 3. 自适应去噪(NPU)denoised=self._adaptive_denoise(enhanced,noise_map)# 4. 细节还原final=self._detail_restore(image,denoised)returnfinaldef_adaptive_denoise(self,enhanced,noise_map):"""自适应去噪:高噪声区域强去噪,低噪声区域弱去噪"""resized=cv2.resize(enhanced,(256,256))normalized=resized.astype(np.float32)/255.0input_tensor=np.transpose(normalized,(2,0,1))[np.newaxis,:]output=self.denoiser.execute({"input":input_tensor})denoised=output["output"]denoised=np.transpose(denoised[0],(1,2,0))denoised=np.clip(denoised*255,0,255).astype(np.uint8)denoised=cv2.resize(denoised,(enhanced.shape[1],enhanced.shape[0]))# 按噪声水平混合:低噪声区域保留增强原图,高噪声区域使用去噪结果noise_map_3ch=np.stack([noise_map]*3,axis=-1)result=(enhanced.astype(np.float32)*(1-noise_map_3ch)+denoised.astype(np.float32)*noise_map_3ch)returnnp.clip(result,0,255).astype(np.uint8)def_detail_restore(self,original,denoised):"""基于引导滤波的细节还原"""# 提取去噪结果的边缘detail=cv2.absdiff(denoised,cv2.GaussianBlur(denoised,(5,5),1.0))# 将原始边缘信息加回去噪结果guided=cv2.ximgproc.guidedFilter(original,denoised,radius=8,eps=50)returnnp.clip(guided.astype(np.float32)+detail*0.3,0,255).astype(np.uint8)joint_processor=JointEnhanceDenoise()5. 性能实测
5.1 各环节延迟
| 环节 | 延迟 | 计算单元 |
|---|---|---|
| 噪声估计 | 3 ms | CPU |
| Zero-DCE 增强 | 8 ms | NPU |
| DnCNN-S 去噪 | 15 ms | NPU |
| 细节还原 | 5 ms | CPU(引导滤波) |
| 端到端总延迟 | 31 ms | 约 32.3 FPS |
端到端 31 ms 对应 32.3 FPS,满足实时增强需求。
5.2 增强质量对比
在 LOL 数据集上对比第一篇(仅增强)与本篇(联合优化)的效果:
| 指标 | 仅增强(第一篇) | 联合优化(本篇) | 提升 |
|---|---|---|---|
| PSNR | 20.1 dB | 22.8 dB | +2.7 dB |
| SSIM | 0.71 | 0.82 | +0.11 |
| 噪声水平(σ) | 12.8 | 5.3 | -59% |
| 边缘清晰度 | 0.42 | 0.68 | +62% |
| 暗部细节可见率 | 87% | 92% | +5% |
PSNR 提升 2.7 dB,噪声降低 59%,边缘清晰度提升 62%。联合优化在控制噪声的同时有效保留了细节。
5.3 不同 ISO 场景对比
| 场景 | 仅增强噪声(σ) | 联合优化噪声(σ) | 降噪率 |
|---|---|---|---|
| ISO 800 | 12.8 | 4.9 | 62% |
| ISO 1600 | 21.3 | 7.6 | 64% |
| ISO 3200 | 38.2 | 12.1 | 68% |
高 ISO 场景下降噪率更高,因噪声水平更高时自适应去噪强度更大。
6. 本篇小结
本篇在第一篇的 Zero-DCE 增强链路基础上,引入噪声抑制与细节还原的联合优化,主要成果如下:
- 实现噪声估计 + 自适应去噪 + 引导滤波细节还原的三步联合管线
- NPU 联合推理延迟 31 ms(32.3 FPS),满足实时需求
- PSNR 从 20.1 dB 提升至 22.8 dB,噪声降低 59%,边缘清晰度提升 62%
当前系统已能处理单帧图像的低光照增强与去噪。第三篇将扩展到视频流场景,处理帧间一致性问题并完成效果对比。
系列索引:(一)Zero-DCE模型端侧部署与实时增强 · (二)噪声抑制与细节还原的联合优化 · (三)视频流实时增强管线与效果对比