添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

这学期有幸参加学习学校 韩宇星 教授的 数字图像工程(全英) 课程,课程最后给了1篇paper①,是基于去雾算法的低光照图像增强算法,本人觉着非常厉害,非常感谢老师提供这篇论文,有兴趣的大伙可以一起学习一下。

① Dong X, Wang G, Pang Y, et al. Fast efficient algorithm for enhancement of low lighting video[C]//2011 IEEE International Conference on Multimedia and Expo. IEEE, 2011: 1-6.

文章作者观察到低光照图像的反转图看起来与雾图十分相似,远景部分的像素值通常都非常高,而对于近景部分,则至少存在一个颜色通道的像素值小于180。经过实验,文章作者发现低光照图像的反转图像的像素分布的确与雾图的像素分布很类似,两者都是80%以上的像素的RGB值都很高,而这些像素刚好对应远景部分。

在这里插入图片描述
既然低光照图像的反转图视觉上类似于雾图,那么将去雾算法应用在低光照图像的反转图上,再对处理图像进行反转,就有可能得到低光照图像的增强图像。例如,在雾图中,绿色的增强相当于变暗一点,其对应的反色相红色则变亮一点,这相当于在低光照图像中增强红色。基于该假设,作者设计了一套算法并展开相关实验。

在这里插入图片描述 上面这幅图是我在网站 https://en.m.fontke.com/tool/rgbschemes/ 上做的相关实验,有兴趣的人可以自己搜索 RGB在线生成 ,然后动手做做实验(最好找那种有“亮一点”、“暗一点”设置的网站,方便进行实验观察效果)。

论文算法设计如下:
在这里插入图片描述

我用python实现了算法,块大小值设置为1, ω 值设得太大容易过增强,太小增强效果不明显。
在这里插入图片描述
同时,若块大小设置太大容易产生不自然边缘和斑点。
在这里插入图片描述
上述实验用图来源: https://www.jianshu.com/p/6e8ea77adf8b

Python代码实现如下:

from PIL import Image
import numpy as np
def MinRgb(c):
    return min(c[0], c[1], c[2])
def SumRgb(c):
    return c[0] + c[1] + c[2]
def Invert(img):
    img = 255 - img
    return img
def GetA(R, G, B, k = 100):
    # k默认是原文获取排序后前100个像素点
    rlist = []
    height, width = R.shape[0], R.shape[1]
    for hi in range(height):
        for wi in range(width):
            rlist.append([R[hi][wi], G[hi][wi], B[hi][wi]])
    rlist.sort(key=MinRgb)
    rlist.reverse()
    rlist = rlist[:k]
    rlist.sort(key=SumRgb)
    rlist.reverse()
    return rlist[0][0], rlist[0][1], rlist[0][2]
def CalT(R, G, B, r_A, g_A, b_A, size=1, w=0.76):
    # 计算A值时使用size×size窗口,以图像边缘点为窗口中心时需要进行填充
    # 图像填充时上下左右各填充1行/列255
    ts = (size - 1) // 2
    height, width = R.shape[0], R.shape[1]
    R_f = np.pad(R, ((ts, ts), (ts, ts)), 'constant', constant_values=(255, 255)) / r_A
    G_f = np.pad(G, ((ts, ts), (ts, ts)), 'constant', constant_values=(255, 255)) / g_A
    B_f = np.pad(B, ((ts, ts), (ts, ts)), 'constant', constant_values=(255, 255)) / b_A
    shape = (height, width, size, size)
    strides = R_f.itemsize * np.array([width + ts * 2, 1, width + ts * 2, 1])
    blocks_R = np.lib.stride_tricks.as_strided(R_f, shape=shape, strides=strides)
    blocks_G = np.lib.stride_tricks.as_strided(G_f, shape=shape, strides=strides)
    blocks_B = np.lib.stride_tricks.as_strided(B_f, shape=shape, strides=strides)
    t = np.zeros((height, width))
    for hi in range(height):
        for wi in range(width):
            t[hi, wi] = 1- w * min(np.min(blocks_R[hi, wi]), np.min(blocks_G[hi, wi]), np.min(blocks_B[hi, wi]))
            if t[hi, wi] < 0.5:
                t[hi, wi] = 2 * t[hi, wi] * t[hi, wi]
    return t
def DeHaze(filepath):
    # 根据路径读取照片
    img = Image.open(filepath)
    # 获取图像宽度、高度
    # width, height = img.size
    # 获取图像的RGB数组
    img = np.asarray(img, dtype=np.int32)
    R, G, B = img[:, :, 0], img[:, :, 1], img[:, :, 2]
    R, G, B = Invert(R), Invert(G), Invert(B)
    # 计算A值
    r_A, g_A, b_A = GetA(R, G, B)
    t = CalT(R, G, B, r_A, g_A, b_A)
    J_R = (R - r_A) / t + r_A
    J_G = (G - g_A) / t + g_A
    J_B = (B - b_A) / t + b_A
    J_R, J_G, J_B = Invert(J_R), Invert(J_G), Invert(J_B)
    r = Image.fromarray(J_R).convert('L')
    g = Image.fromarray(J_G).convert('L')
    b = Image.fromarray(J_B).convert('L')
    image = Image.merge("RGB", (r, g, b))
    image.save("./dark_result.jpg")
    image.show()
if __name__ == '__main__':
    DeHaze("./dark.png")
    # DeHaze("./test.jpg")

代码存在可以加速的地方,例如:①sum排序可以直接遍历 t(x)

第二个地方在于SAD计算的加速,文章作者指出,在某些情形下,若存在多个刚体或运动是非常规的,当SAD取最小值时,它有可能不是真正的运动矢量,在该情形下,采样的像素越多,SAD算法导致的误差可能越大。文章作者通过固定模板子采样的方法来缓解这一问题,同时也加速了SAD的计算。

Acknowledge

最后再次感谢论文作者以及老师提供了本次开阔眼界的机会,也感谢许多博主的无私分享。

文章目录致谢论文原理工程实现视频应用Acknowledge致谢这学期有幸参加学习学校韩宇星教授的 数字图像工程(全英) 课程,课程最后给了1篇paper①,是基于去雾算法的低光照图像增强算法,本人觉着非常厉害,非常感谢老师提供这篇论文,有兴趣的大伙可以一起学习一下。① Dong X, Wang G, Pang Y, et al. Fast efficient algorithm for e...
《A Point Light Source Interference Removal Method for Image Dehazing》 论文作者:Yanyang Yan, Shengdong Zhang, Mingye Ju, Wenqi Ren1, Rui Wang1, Yuanfang Guo 发表会议:CVPR 发表时间:2020 论文目录《A Point Light Source Interference Removal Method for Image Dehazing》一、摘要二、背景2.1
图像反转(Image Negative)在许多应用中都很有用,例如显示医学图像和用单色正片拍摄屏幕,其想法是将产生的负片用作投影片。 转换方程:T:G(x,y)=L−F(x,y)​,其中L​是最大强度值,灰度图像L​​为255。 import cv2 as cv fig = cv.imread('test1.jpg') #图像反转 L = 255 fig1 = L - fig cv.imshow('image',fig) cv.imshow
针对现有算法图像边缘细节增强不足及无法有效控制各尺度信息增强程度的问题,提出了多级分解的Retinex照度图像增强算法。该算法在Retinex分解模型和双边滤波的基础上,通过设置不同的滤波参数,获取表征图像不同尺度信息的反射分量和照度分量;通过使用指数函数对分解得到的各级反射分量进行增强,能够有效提升图像边缘细节的表达能力;通过使用S型函数对最终的照度分量进行处理,能够在提升照度图像整体亮度的同时抑制高亮度区域;通过颜色恢复函数对增强图像进行后处理,进一步避免色彩偏差和失真的问题。实验结果表明,新算法能够改善照度图像的视觉质量,在清晰度、信息熵、对比度等指标方面都有所提升。
针对Retinex算法在去雾时会出现光照不均匀、彩色失真等情况,提出了一种基于照度的有雾彩色图像增强算法。该算法首先将红-绿-蓝(RGB)图像转换到色调-饱和度-亮度(HSV)空间区域,对亮度(V)分量进行提取,将单尺度Retinex算法作用于V分量后对V分量进行伽马校正;将MSRCR 算法中的高斯滤波器改为引导滤波并进行通滤波;最后将改进的SSR算法、MSRCR算法、基于拉普拉斯金字塔的Retinex算法得到的图像进行加权融合。该算法能够得到很好的去雾效果,有效地抑制光晕并改善色彩失真等问题。经所提算法处理后,图片的相似性、信息熵等指标均得到了提升。
介绍的是一种比较实用并且去阴影效果很好的方法,选自2004年Tao的一篇论文,名称是《An Integrated Neighborhood Dependent Approach for Nonlinear Enhancement of Color Images 》,有兴趣的朋友仔细细读一下。论文篇幅很短,所以应该难度不大,而且效果极佳。 通过灰度图,动态范围压缩,高斯滤波结果,得到修复的灰度图。然后根据灰度图进行色彩恢复 Matlab clear I=im2double(imread('2.
一、去逆光 逆光是拍摄时经常会出现的问题,我们的去逆光技术可以有效增强逆光状态下拍摄的图像质量,显著提高逆光状态下的人脸识别准确率。 链接1: OpenCV之光照补偿和去除光照 链接2: OpenCV高亮图片处理 二、照度增强 在夜间,光照不足会导致图像的成像质量非常糟糕,照度增强技术可以有效增强图像的亮度,恢复图像的细节,对于夜间的视频监控、车牌识别具有很大帮助。 链接3: OpenCV对照度图像的增强 链接4: 照度图像增强 三、去模糊 图像模糊处理选择突出或抑制图像中的部分特征,通过提升亮
基于照明光分离的用于航海监督的单帧图像去雾 Single Image Defogging Based on Illumination Decomposition for Visual Maritime Surveillance 文献引文信息: Hu, H. M., et al. (2019). “Single Image Defogging Based on Illumination Decomposition for Visual Maritime Surveillance.” IEEE Trans I.
针对光照不均匀、光线暗等环境导致图像采集单元采集到的图像视觉效果差、噪声大等问题,本文提出一种基于视网膜和皮层(Retinex)理论改进的照度图像增强算法去恢复图像原有的视觉特征。将照度图像从红、绿、蓝(RGB)空间转换到色调、饱和度、亮度(HSV)空间,在HSV空间的V通道去对照度图像进行处理,这样能够避免图像三基色比例关系被破坏;采用改进的多尺度Retinex (MSR)算法估计光照分量,用非局部均值(NLM)滤波代替高斯滤波,利用滤波窗口与相邻窗口间的递归关系来简化计算,不仅能准确估计光照分量,还能够提高图像的处理速度;最后进行颜色空间逆变换,转换到人眼习惯的RGB颜色空间。实验结果表明该算法可以有效提高图像清晰度,保护图像的细节信息。
2020-09-09 13:44:04.985594+0800[15319:259322] 滤镜参数===:{ CIAttributeFilterAvailable_iOS = 6, CIAttributeFilterDisplayName = 凹凸扭曲, inputImage = { CIAttributeDisplayName = 图像, CIAttributeDescription = 要用作输入图像图像。对于也使用了背景图像的滤镜来说,这
在做检测过程中发现光照对于检测的精度影响很大,为了不增加采集标注数据工作量,增加了光照数据集来增强检测效果。 代码1:选取需要光照增强的区域,直接将像素值增加到240-255之间。 import cv2 import matplotlib.pyplot as plt import random img = cv2.imread('000100000910000000098.jpg') h,w,c = img.shape print(h,w) start_x = 510 start_y = 1000 np.pad格式:pad(array, pad_width, mode, **kwargs) 在我们卷积中常用的填充格式是‘constant’,故这里仅介绍constant填充示例,即将model替换为constant。 array:表示数组名 pad_width:表示每一维填充的前后个数(后面根据三个例子来理解) 在constant模式下,constant_values=(x,y),表示前面用x这个数填充,后边用y这个数填充。 arr3D = np.array([[[1, 2,
最近在做一个图像处理的算法,因为图像太暗,所以需要对图像的亮度进行增强(不考虑噪声的放大)。尝试了网上搜索到的各种方法后,发现它们存在两个问题:容易造成原本较亮的地方过曝,并且参数不好设置。尝试了一些暗光增强的paper的算法后,发现它们又太慢了。这时我想到曾经看过的一篇paper说过,有一种亮度增强的算法是基于去雾来做的,步骤很简单: 1. 将RGB图像取反(关于图像取反,请参考我的这...
去雾算法是一种图像处理技术,旨在消除图像中由雾霾、烟雾等自然因素引起的模糊和失真。在python中,实现去雾的常用算法有暗通道先验和基于背景颜色恢复的方法。 暗通道先验去雾算法是目前最常用的算法之一。该算法认为,任何外部光照下的天然图像,其全局暗通道的值均会很小。因此,借助暗通道先验去掉了图像中由于雾霾形成的“噪点”,从而达到去雾的目的。在python中,通过计算图像暗通道,减少图像的颜色,就可运用暗通道先验方法进行去雾处理。 基于背景颜色恢复的去雾算法,则是根据相邻的像素点之间的颜色来推测出背景色,并在此基础上去除图像中的“雾霭”,从而还原真实的图像。在实际的python实现中,该算法侧重于计算图像的透射率和估计图像的背景颜色。 总之,通过利用以上的方法和技巧,即可在python中实现去雾算法,使原本受到雾霾、烟雾污染的图像变得更加清晰、真实。