基于深度学习的图像去雾算法


前言(Preface)

此博客记录三种基于深度学习的图像去雾网络,简述其算法特点并定性定量分析网络性能。
GFN-dehazing
原文:Gated Fusion Network for Single Image Dehazing(用于单幅图像去雾的门控融合网络)
原文链接: Gated Fusion Network for Single Image Dehazing
原文开源代码:GFN-dehazing
Dehaze-cGAN
原文:Single Image Dehazing via Conditional Generative Adversarial Network(基于条件生成对抗网络的单张图像去雾算法)
原文链接: Single Image Dehazing via Conditional Generative Adversarial Network
原文开源代码:Dehaze-cGAN
Cycle-Dehaze
原文:Cycle-Dehaze: Enhanced CycleGAN for Single Image Dehazing(Cycle-Dehaze: 用于单幅图像去雾的增强型 CycleGAN 网络)
原文链接: Cycle-Dehaze: Enhanced CycleGAN for Single Image Dehazing
原文开源代码:Cycle-Dehaze


一、GFN-dehazing

由于大气光照的影响,雾霾图像中的颜色通常发生变化,并且光照散射和颜色衰减的影响,使图像在远处缺乏可见性。基于这两点原因,GFN-dehazing借助三类特殊类型的图像,完成图像去雾。
白平衡图像:白平衡图像作为输入的目的是消除大气颜色造成的色差。白平衡图像可以消除大气光引起的颜色偏移,其结果呈现低对比度,通过加入另外两项输入来提高对比度。
对比度图像:通过在模糊输入中减去整张图像的平均亮度值导出介质图像,然后使用带有亮度信息的参数线性恢复介质图像中的亮度,最终得到对比度增强图像;对比度增强图像会导致图像中较暗区域趋向于黑色。
伽马校正图像:使用伽马校正图像来弥补对比度增强图像中趋于黑色所丢失的信息。
下图分别为原始图像、白平衡图像、对比度图像和伽马校正图像。
在这里插入图片描述
下图为GFN-dehazing网络的整体结构。网络输入原始的雾霾图像及三组派生图像(白平衡图像、对比度图像、伽马校正图像),在末端处输出对应三组派生图像的权重,然后和原始的三组图像分别进行加权融合,合成去雾图像。
在这里插入图片描述
直接将网络输出的权重置信图和派生图像进行加权相加可能会造成输出的去雾图像产生伪影。所以通过改变图像的分辨率使用多尺度细化的方法提高输出图片的质量。下图为我根据文章思路对多尺度细化的理解,其中每个尺度下输入图片的分辨率不同(图片的大小不同),此处所使用的网络均为同一个网络,所用的损失函数不同。
第k尺度的损失函数为 L c o n t [ θ , k ] = 1 N ∑ ∣ ∣ F ( I i , k , θ , k ) − J i , k ∣ ∣ L_{cont}[θ, k] = \frac{1}{N}\sum ||F(I_{i,k}, \theta, k) - J_{i,k}|| Lcont[θ,k]=N1∣∣F(I

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用深度学习进行图像去雾的代码示例: ```python import cv2 import numpy as np import torch import torch.nn as nn import torch.optim as optim from torchvision import models # 定义去雾网络模型 class DehazeNet(nn.Module): def __init__(self): super(DehazeNet, self).__init__() self.features = models.vgg16(pretrained=True).features self.conv1 = nn.Conv2d(512, 1, kernel_size=3, stride=1, padding=1) self.relu = nn.ReLU(inplace=True) def forward(self, x): x = self.features(x) x = self.conv1(x) x = self.relu(x) return x # 加载预训练的去雾网络模型 model = DehazeNet() model.load_state_dict(torch.load('dehaze_model.pth')) model.eval() # 加载待去雾的图像 image = cv2.imread('hazy_image.jpg') # 图像预处理 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = image / 255.0 image = torch.from_numpy(image.transpose((2, 0, 1))).float().unsqueeze(0) # 使用去雾网络进行去雾 with torch.no_grad(): dehazed_image = model(image) # 后处理 dehazed_image = dehazed_image.squeeze().numpy() dehazed_image = np.clip(dehazed_image, 0, 1) dehazed_image = dehazed_image.transpose((1, 2, 0)) dehazed_image = cv2.cvtColor(dehazed_image, cv2.COLOR_RGB2BGR) dehazed_image = (dehazed_image * 255).astype(np.uint8) # 显示去雾结果 cv2.imshow('Dehazed Image', dehazed_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码使用了一个基于VGG16的去雾网络模型,通过加载预训练的模型和输入待去雾的图像,可以得到去雾后的图像结果。你可以将待去雾的图像保存为'hazy_image.jpg',并将预训练的去雾网络模型保存为'dehaze_model.pth',然后运行上述代码即可得到去雾后的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值