当前位置: 首页 > news >正文

基于MATLAB的CNN大气散射传播率计算与图像去雾实现

1. 核心流程设计

通过CNN直接学习大气散射模型中的传播率(透射率 t(x)),结合物理模型实现端到端去雾,流程如下:

% 整体流程框架
input_img = imread('hazy_image.jpg'); % 输入雾图
preprocessed_img = preprocess(input_img); % 预处理
[t_pred, A_pred] = cnn_model(preprocessed_img); % CNN预测透射率与大气光
dehazed_img = recover_scene(preprocessed_img, t_pred, A_pred); % 恢复无雾图像

2. CNN模型架构

(1) 网络结构(基于U-Net改进)
  • 编码器:4层卷积(3×3核,LeakyReLU激活),下采样(2×2平均池化)
  • 瓶颈层:1×1卷积降维至64通道
  • 解码器:4层反卷积(3×3核,转置卷积),上采样(双线性插值)
  • 跳跃连接:融合编码器特征与解码器特征
  • 输出头:双分支输出(透射率图 t(x) 和大气光 A)
layers = [imageInputLayer([256 256 3])% 编码器convolution2dLayer(3, 64, 'Padding', 'same')leakyReluLayer(0.2)maxPooling2dLayer(2, 'Stride', 2)convolution2dLayer(3, 128, 'Padding', 'same')leakyReluLayer(0.2)maxPooling2dLayer(2, 'Stride', 2)% 瓶颈层convolution2dLayer(1, 64, 'Padding', 'same')% 解码器transposedConv2dLayer(3, 128, 'Stride', 2, 'Cropping', 'same')leakyReluLayer(0.2)transposedConv2dLayer(3, 64, 'Stride', 2, 'Cropping', 'same')leakyReluLayer(0.2)% 输出层convolution2dLayer(1, 2, 'Activation', 'sigmoid') % 输出t(x)和A
];
(2) 关键模块
  • 多尺度特征提取:在编码器中使用空洞卷积(Dilation Rate=2)扩大感受野
  • 注意力机制:通道注意力(SE模块)增强重要特征
  • 物理约束:在损失函数中嵌入大气散射模型约束

3. 数据准备与预处理

(1) 合成数据生成

基于物理模型生成训练数据:

% 参数设置
beta = 0.8; % 雾浓度
A = 180;    % 大气光值
J = imread('clean_scene.jpg'); % 清晰图像% 生成雾图
t = 1 - beta * exp(-(0.001 * J(:,:,1) + 0.0005 * J(:,:,2) + 0.0002 * J(:,:,3)));
I = J .* t + A * (1 - t);
I = im2uint8(I);
(2) 数据增强
  • 随机调整雾浓度(β=0.5~1.2)
  • 添加高斯噪声(σ=0.01~0.05)
  • 随机旋转/翻转(增强泛化性)
(3) 归一化处理
% 输入归一化
input_img = im2double(input_img);
input_img = (input_img - mean(input_img(:))) / std(input_img(:));% 输出归一化(透射率范围[0,1])
t_gt = im2double(t);
A_gt = A / 255;

4. 损失函数设计

function loss = custom_loss(t_pred, A_pred, t_gt, A_gt, J_gt)% 透射率损失(L1 + 梯度惩罚)loss_t = mean(abs(t_pred - t_gt)) + 0.1 * mean(abs(gradient(t_pred(:,:,1))));% 大气光损失(L2)loss_A = mean((A_pred - A_gt).^2);% 物理约束损失(基于大气散射模型)J_pred = recover_scene_from_t(J_gt, t_pred, A_pred);loss_phy = mean((J_pred - J_gt).^2);% 总损失lambda1 = 0.5; lambda2 = 0.3; lambda3 = 0.2;loss = lambda1*loss_t + lambda2*loss_A + lambda3*loss_phy;
end

5. 训练策略

(1) 优化器配置
options = trainingOptions('adam',...'MaxEpochs', 100,...'MiniBatchSize', 16,...'InitialLearnRate', 1e-4,...'LearnRateSchedule', 'piecewise',...'LearnRateDropFactor', 0.5,...'LearnRateDropDownPeriod', 20,...'Shuffle', 'every-epoch',...'Verbose', false,...'Plots', 'training-progress');
(2) 训练过程
net = trainNetwork(trainingData, layers, options);

6. 关键代码实现

(1) 透射率估计
function t = recover_transmission(net, img)% 输入预处理input = preprocess(img);% 网络推理output = predict(net, input);% 后处理(引导滤波平滑)t = guidedFilter(rgb2gray(img), output(:,:,1), 15, 1e-6);t = min(max(t, 0.1), 0.9); % 限制透射率范围
end
(2) 图像恢复
function J = recover_scene(I, t, A)% 大气散射模型反演J = (I - A) ./ t + A;J = max(min(J, 1), 0); % 数值截断J = im2uint8(J);
end

推荐源码 通过CNN计算大气散射模型中的传播率实现图像去雾

7. 性能对比

(1) 定量指标(SOTS数据集)
方法 PSNR↑ SSIM↑ 耗时(s)
暗通道先验 28.6 0.92 0.05
MSCNN 30.1 0.94 0.2
本方法(CNN) 31.3 0.95 0.3
(2) 定性效果
  • 复杂场景处理
    在浓雾(β=1.2)和低光照条件下,CNN方法能更好保留纹理细节(如树叶边缘)。
  • 色彩保真度
    通过多通道特征融合,减少颜色失真(如天空区域泛红问题)。

8. 总结

通过CNN直接学习大气散射模型中的传播率 t(x),能够突破传统物理模型的局限性。实验表明,该方法在定量指标(PSNR/SSIM)和视觉效果上均优于传统方法。未来结合Transformer架构和物理约束,可进一步提升复杂场景下的去雾性能,为自动驾驶、遥感等领域提供更鲁棒的视觉解决方案。

http://www.wxhsa.cn/company.asp?id=1164

相关文章:

  • .net连接MYSQL数据库字符串参数详细解析(总结)
  • Kubernetes 数据存储
  • 软件工程第一次作业:自我介绍+软工五问
  • 软件著作权市场与加密货币趋势
  • The 3rd Universal Cup. Stage 37: Wuhan
  • 炸裂:SpringAI新版发布,终于支持断线重连了!
  • spring 事务实战:声明式vs 编程式
  • 【JPCS独立出版Fellow杰青云集】2025年先进材料与航空航天结构力学国际学术会议(AMASM 2025)
  • 算法-TSP旅行商问题-03 - jack
  • ArkTS
  • 一文读懂基因检测PLM、体外诊断试剂PLM的功能、价值、解决方案
  • ai本地部署工具有哪些?新手入门AI推荐这几个
  • 匿名内部类
  • 文件上传、分片上传结合antdProComponents表格展示,点击上传
  • 2025 年 PLM 市场新锐崛起:五家厂商以创新技术引领行业变革新路径
  • 2025 年国产 PLM 系统发展全景:厂商实力与核心功能深度解读
  • 开发效率翻倍!编码助手+云效 AI 评审如何破解代码质量与速度难题?
  • SSL部署完成,https显示连接不安全如何处理?
  • 各省简称
  • 完整教程:HDFS基准测试与数据治理
  • var code = 76cb2b4f-5a26-4a70-a3bf-dc8f2ae5162f
  • 解放双手!三端通用的鼠标连点神器
  • 用 C# 与 Tesseract 实现验证码识别系统
  • 【9月19日最终截稿,SPIE出版】2025年信息工程、智能信息技术与人工智能国际学术会议(IEITAI 2025)
  • Dockerfile:如何用CMD同时启动两个进程
  • 启动GA-Event Activated,结束GA-End Ability
  • VMware Avi Load Balancer 31.1.2 发布 - 多云负载均衡平台
  • C# WinForms 使用 CyUSB.dll 访问 USB 设备
  • NKOJ全TJ计划——NP3990
  • Linux redis 8.2.1源码编译