Python 图片去雾实战:FFA 去雾算法与暗通道去雾算法

您所在的位置:网站首页 图像去雾代码python Python 图片去雾实战:FFA 去雾算法与暗通道去雾算法

Python 图片去雾实战:FFA 去雾算法与暗通道去雾算法

2024-05-10 14:45| 来源: 网络整理| 查看: 265

在计算机视觉领域,图片去雾是一种常见的任务,旨在通过算法还原图片的真实场景。本文将介绍两种常用的去雾算法:FFA 去雾算法和暗通道去雾算法,并给出相应的 Python 代码实现。FFA 去雾算法FFA 去雾算法是一种基于物理模型的去雾算法,通过估计大气光强度和散射系数来恢复无雾图片。以下是使用 Python 实现 FFA 去雾算法的示例代码:

import cv2import numpy as npdef ffa_dehazing(img, A, t):# 将输入图像转换为浮点数类型img = img.astype(np.float32)# 计算大气光强度A = np.array([A] * 3).reshape(3, 1)# 计算散射系数t = np.array([t] * 3).reshape(3, 1)# 计算无雾图像J = A - t * (img / t)# 计算透射率t = (img - J) / A + t# 将透射率归一化到 [0, 1] 范围内t = np.clip(t, 0, 1)# 计算无雾图像J = J * t + A * (1 - t)# 将无雾图像转换为 8 位整数类型并返回return np.clip(J, 0, 255).astype(np.uint8)

在上述代码中,我们使用了 OpenCV 库来读取图片,并将输入的图像 img、大气光强度 A 和散射系数 t 作为参数传递给 ffa_dehazing 函数。函数内部实现了 FFA 去雾算法的核心步骤,包括计算无雾图像和透射率,并最终返回无雾图像。暗通道去雾算法暗通道去雾算法是一种基于统计的去雾算法,通过寻找图像中的暗像素来估计大气光强度和透射率。以下是使用 Python 实现暗通道去雾算法的示例代码:

import cv2import numpy as npfrom scipy import ndimagedef dark_channel_dehazing(img, window_size):# 计算暗通道图像dark_channel = np.min(img, axis=2)# 对暗通道图像进行中值滤波以去除噪声dark_channel = ndimage.median_filter(dark_channel, size=window_size)# 计算大气光强度A = np.max(img, axis=2) / dark_channel * window_size ** 2 + 1e-4# 计算透射率t = 1 - A / np.max(img, axis=2) + 1e-4# 将透射率归一化到 [0, 1] 范围内并返回无雾图像return np.clip((img - A) / t + A, 0, 255).astype(np.uint8)

在上述代码中,我们使用了 OpenCV 库来读取图片,并将输入的图像 img 和窗口大小 window_size 作为参数传递给 dark_channel_dehazing 函数。函数内部实现了暗通道去雾算法的核心步骤,包括计算暗通道图像、大气光强度和透射率,并最终返回无雾图像。注意,在计算大气光强度和透射率时,我们使用了中值滤波来去除噪声。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3