Night Time Haze and Glow Removal using Deep Dilated Convolutional Network

博客聚焦于利用Dil扩张卷积网络去除夜间的雾霾和光晕。在夜间场景下,雾霾和光晕会影响图像质量,而该网络可有效解决这一问题,提升图像的清晰度和可用性,在图像处理领域有重要意义。

基于暗通道先验(Dark Channel Prior, DCP)的单幅图像去雾方法是一种经典的无监督图像增强技术,广泛应用于计算机视觉和图像处理领域。该方法的核心思想是利用户外无雾霾图像中局部区域像素强度分布的统计特性,即在大多数无雾霾图像的局部块中,至少有一个颜色通道的像素值非常低[^2]。 ### 算法原理 图像的雾霾成像模型可以表示为: $$ I(x) = J(x)t(x) + A(1 - t(x)) $$ 其中: - $ I(x) $ 是观测到的有雾图像; - $ J(x) $ 是恢复后的无雾图像; - $ t(x) $ 是介质传输率,表示光线未被散射到达相机的比例; - $ A $ 是大气光值。 通过暗通道先验估计传输图 $ t(x) $ 和大气光 $ A $,进而求解出无雾图像 $ J(x) $。具体步骤如下: 1. **计算暗通道图像**:对于输入图像 $ I(x) $,在其局部窗口内计算每个像素在RGB三个通道中的最小值,并取所有像素的最小值作为暗通道图像。 2. **估计传输图**:根据暗通道图像估算初始传输图 $ t_0(x) $,通常采用线性变换或归一化方法。 3. **优化传输图**:使用软抠图(soft matting)或导向滤波(guided filter)等技术对初始传输图进行精细化处理,以保留图像边缘细节。 4. **估计大气光 $ A $**:选取暗通道图像中最亮的若干像素点对应的原始图像像素,从中选择最大值作为大气光 $ A $。 5. **图像复原**:利用上述估计结果代入雾霾成像模型反推得到无雾图像 $ J(x) $。 ### 优势与局限性 #### 优势 - **无需训练数据**:DCP方法属于无监督方法,不依赖于大规模数据集进行训练。 - **物理意义明确**:基于图像的物理成像过程建模,具有良好的可解释性。 - **适用于多种场景**:在自然户外图像、水下图像等多种应用场景中均有良好表现[^4]。 #### 局限性 - **天空区域失真**:由于天空区域的暗通道值较高,容易导致去雾后图像色彩失真。为此,研究者提出了如ContourDCP等改进方法,通过轮廓检测优化天空区域的传输图[^3]。 - **对大气光估计敏感**:大气光估计不准确会显著影响最终的去雾效果。 - **计算复杂度高**:尤其是软抠图等优化步骤可能带来较高的计算开销。 ### 示例代码 以下是一个基于OpenCV实现的简化版暗通道先验去雾算法的Python示例: ```python import cv2 import numpy as np def dark_channel(image, window_size=15): min_filter = cv2.erode(image, np.ones((window_size, window_size))) dark = np.min(min_filter, axis=2) return dark def estimate_atmospheric_light(image, dark_channel, top_percent=0.1): num_pixels = image.shape[0] * image.shape[1] flat_image = image.reshape(-1, 3) flat_dark = dark_channel.ravel() indices = np.argsort(flat_dark)[-int(num_pixels * top_percent):] atmospheric_light = np.max(flat_image[indices], axis=0) return atmospheric_light def estimate_transmission(image, atmospheric_light, window_size=15, omega=0.95): normalized_image = image / atmospheric_light transmission = 1 - omega * dark_channel(normalized_image, window_size) return transmission def guided_filter(p, I, r, eps): mean_I = cv2.boxFilter(I, cv2.CV_64F, (r, r)) mean_p = cv2.boxFilter(p, cv2.CV_64F, (r, r)) mean_Ip = cv2.boxFilter(I * p, cv2.CV_64F, (r, r)) cov_Ip = mean_Ip - mean_I * mean_p mean_II = cv2.boxFilter(I * I, cv2.CV_64F, (r, r)) var_I = mean_II - mean_I * mean_I a = cov_Ip / (var_I + eps) b = mean_p - a * mean_I a_mean = cv2.boxFilter(a, cv2.CV_64F, (r, r)) b_mean = cv2.boxFilter(b, cv2.CV_64F, (r, r)) q = a_mean * I + b_mean return q def dehaze(image, window_size=15, omega=0.95, r=60, eps=1e-3): I = image.astype('float64') / 255.0 dark = dark_channel(I, window_size) A = estimate_atmospheric_light(I, dark) t = estimate_transmission(I, A, window_size, omega) t_guided = np.zeros_like(t) for i in range(3): t_guided[..., i] = guided_filter(t, I[..., i], r, eps) t_guided = np.clip(t_guided, 0.1, 1.0) J = np.zeros_like(I) for i in range(3): J[..., i] = (I[..., i] - A[i]) / t_guided[..., i] + A[i] J = np.clip(J, 0, 1) return (J * 255).astype('uint8') # 使用示例 image = cv2.imread("hazy_image.jpg") dehazed_image = dehaze(image) cv2.imwrite("dehazed_image.jpg", dehazed_image) ``` ### 改进与扩展 随着深度学习的发展,许多研究将DCP与神经网络结合,例如DCA-CycleGAN等方法,利用CycleGAN架构进行无监督去雾,并引入注意力机制优化暗通道特征提取[^1]。这些方法在保持传统DCP物理意义的同时,提升了在复杂场景下的鲁棒性和细节恢复能力。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值