Study-基于直方图优化的图像去雾技术

1.案例背景

  伴随着人类工业化进程的不断推进,空气污染也越来越严重,特别是雾霾天气在一年 中所占的比例也在逐年上升。雾霾天气往往会给人类的生产和生活带来极大不便,也大大 增加了交通事故发生的概率。- 般而言,在恶劣天气(如雾天、雨天等)条件下,户外景 物图像的对比度和颜色也会被改变或退化,图像中蕴含的许多特征也会被覆盖或模糊,这 也会导致某些视觉系统(如电子卡口、门禁监控等)无法正常工作。因此,从雾霾天气所 采集的退化图像中复原和增强景物细节信息具有重要的现实意义。数字图像处理技术已广 泛应用于科学和工程领域,如地形分类系统、户外监控系统、自动导航系统等,为了保证 视觉系统全天候正常工作,就必须使系统适应各种天气状况。

  本案例展开了雾霾天气下的图像清晰化技术的讨论,雾天图像的清晰化技术也有可能 对其他恶劣天气下的图像清晰化技术起到促进作用。

2.理论基础

2.1 空域图像增强

  图像增强是指按特定的需要突出--幅图像中的某些信息,并同时削弱或去除某些不需 要的信息的处理技术叫。图像增强的主要作用是相对于原来的图像,处理后的图像能更加 有效地满足某些特定应用的要求。根据图像处理空间的不同,图像增强基本上可分为两大 类:频域处理法、空域处理法。频域处理法的基础是卷积定理,其通过进行某种图像变换 (如傅里叶变换、小波变换等)得到频域结果并进行修改的方法来实现对图像的增强处理。 空域处理法是直接对图像中的像素进行处理,-般是以图像灰度映射变换为基础并且根据 图像增强的目标来采用所需的映射变换,常见的图像对比度增强、图像的灰度层次优化等 处理均属于空域处理法。本案例主要介绍空域的直方图增强算法。

2.2 直方图均衡化

  直方图是图像的一-种统计表达形式。对于一幅灰度图像来说,其灰度统计直方图可以 反映该图像中不同灰度级出现的统计情况。-般而言,图像的视觉效果和其直方图有对应 关系,通过调整或变换其直方图的形状会对图像显示效果有很大影响。

  直方图均衡化主要用于增强灰度值动态范围偏小的图像的对比度。该方法的基本思想 是把原始图像的灰度统计直方图变换为均匀分布的形式,这样就增加了像素灰度值的动态 范围,从而达到增强图像整体对比度的效果。

  数字图像是离散化的数值矩阵,其直方图可以被视为一个离散函数,它表示数字图像 中每- - -灰度级与其出现概率间的统计关系。直方图在一定程度上能够反映数字图像的概貌性描述,包括图像的灰度范围、灰度分布、整幅图像的亮度均值和阴暗对比度等,并可以此为基础进行分析来得出对图像 进一步处理的重要依据。直方图均衡化也叫作直方图均匀化,就是把给定图像的直方图分 布变换成均匀分布的直方图,是一种较为常用的灰度增强算法2。直方图均衡化概括起来 包括以下三个主要步骤。
●预处理
●灰度变换表。
●查表变换。

2.3全局直方图处理

  MATLAB通过函数imread读取RGB图像,并通过维数mXnX3的矩阵来表示。其中, 维数mXn表示图像的行数、列数信息,维数3表示图像的R. G、B三层通道数据。因此, 全局直方图处理通过对RGB图像的R、G、B三层通道分别进行直方图均衡化,再整合到 新的图像的方式来进行。核心代码如下所示。

function In = RemoveFogByGlobalHisteq(I, flag)

if nargin < 2
    flag = 1;
end
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);
M = histeq(R);
N = histeq(G);
L = histeq(B);
In = cat(3, M, N, L);
if flag
    figure;
    subplot(2, 2, 1); imshow(I); title('原图像', 'FontWeight', 'Bold');
    subplot(2, 2, 2); imshow(In); title('处理后的图像', 'FontWeight', 'Bold');
    Q = rgb2gray(I);
    W = rgb2gray(In);
    subplot(2, 2, 3); imhist(Q, 64); title('原灰度直方图', 'FontWeight', 'Bold');
    subplot(2, 2, 4); imhist(W, 64); title('处理后的灰度直方图', 'FontWeight', 'Bold');
end
复制代码

image.png

image.png

  运行结果表明,全局直方图去雾算法可以实现含雾图像的增强效果,处理前后的直方 图在分布上具有明显变化,但在图像整体上容易出现某些色彩失真的现象。

2.4 局部直方图处理

  全局直方图均衡化增强只是将原图像的直方图进行了均衡化,未能有效保持原始图像 的局部特征,容易出现色彩失真问题。通过选择固定尺寸的滑动窗口作用于原始图像来进 行局部直方图处理,可以在- -定程度上保持原始图像的局部特征,提高图像增强的效果。 因此,局部直方图处理通过对RGB图像的R、G、B三层通道分别进行局部直方图均衡化, 再整合到新的图像的方式来进行。核心代码如下所示。

function In = RemoveFogByLocalHisteq(I, flag)

g1 = GetLocalHisteq(I(:, :, 1));
g2 = GetLocalHisteq(I(:, :, 2));
g3 = GetLocalHisteq(I(:, :, 3));

In = cat(3, g1, g2, g3);

if flag
    figure;
    subplot(2, 2, 1); imshow(I); title('原图像', 'FontWeight', 'Bold');
    subplot(2, 2, 2); imshow(In); title('处理后的图像', 'FontWeight', 'Bold');
    Q = rgb2gray(I);
    W = rgb2gray(In);
    subplot(2, 2, 3); imhist(Q, 64); title('原灰度直方图', 'FontWeight', 'Bold');
    subplot(2, 2, 4); imhist(W, 64); title('处理后的灰度直方图', 'FontWeight', 'Bold');
end

function g = GetLocalHisteq(I)
x=mat2gray(I);
f=im2double(x);
w=4;
k=0.06;
M=mean2(f);
z=colfilt(f,[w w],'sliding',@std);
m=colfilt(f,[w w],'sliding',@mean);
A=k*M./z;
g=A.*(f-m)+m;
g=im2uint8(mat2gray(g));
复制代码

image.png image.png   局部直方图的处理结果表明该算法能有效保持原始图像的局部特征,未出现明显的色 彩失真现象,同时也得到了去雾增强的效果。但是,该算法处理结果整体亮度偏暗,依然 存在某些模糊区域。

2.5 Retinex增强处理

  基于全局直方图、局部直方图的图像去雾算法在理论及实现上比较简单,能起到一定 的去雾处理效果。为了进行对比,实验中采取了Retinex 图像增强算法来进行对比,该算 法可以平衡图像灰度动态范围压缩、图像增强和图像颜色恒常三个指标,能够实现对含雾 图像的自适应性增强。因此,Retinex 增强处理通过对RGB图像的R、G、B三层通道分 别应用Retinex 算法进行处理,再整合到新的图像的方式来进行。核心代码如下所示:

function In = RemoveFogByRetinex(f, flag)

if nargin < 2
    flag = 1;
end

fr=f(:, :, 1);
fg=f(:, :, 2);
fb=f(:, :, 3);
mr=mat2gray(im2double(fr));
mg=mat2gray(im2double(fg));
mb=mat2gray(im2double(fb));
alf1=1458;
n=161;
n1=floor((n+1)/2);
for i=1:n
    for j=1:n
        b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf1))/(pi*alf1);
    end
end
nr1 = imfilter(mr,b,'conv', 'replicate');
ng1 = imfilter(mg,b,'conv', 'replicate');
nb1 = imfilter(mb,b,'conv', 'replicate');
ur1=log(nr1); ug1=log(ng1); ub1=log(nb1);
tr1=log(mr);tg1=log(mg);tb1=log(mb);
yr1=(tr1-ur1)/3;
yg1=(tg1-ug1)/3;
yb1=(tb1-ub1)/3;
alf2=53.38;
x=31;
x1=floor((n+1)/2);
for i=1:n
    for j=1:n
        a(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf2))/(6*pi*alf2);
    end
end
nr2 = imfilter(mr,a,'conv', 'replicate');
ng2 = imfilter(mg,a,'conv', 'replicate');
nb2 = imfilter(mb,a,'conv', 'replicate');
ur2=log(nr2); ug2=log(ng2); ub2=log(nb2);
tr2=log(mr);tg2=log(mg);tb2=log(mb);
yr2=(tr2-ur2)/3;yg2=(tg2-ug2)/3;yb2=(tb2-ub2)/3;
alf3=13944.5; 
l=501;
l1=floor((n+1)/2);
for i=1:n
    for j=1:n
        e(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf3))/(4*pi*alf3); 
    end
end
nr3 = imfilter(mr,e,'conv', 'replicate');
ng3 = imfilter(mg,e,'conv', 'replicate');
nb3 = imfilter(mb,e,'conv', 'replicate');
ur3=log(nr3); ug3=log(ng3); ub3=log(nb3);
tr3=log(mr);tg3=log(mg);tb3=log(mb);
yr3=(tr3-ur3)/3;yg3=(tg3-ug3)/3;yb3=(tb3-ub3)/3;
dr=yr1+yr2+yr3;dg=yg1+yg2+yg3;db=yb1+yb2+yb3;
cr=im2uint8(dr); cg=im2uint8(dg); cb=im2uint8(db);
In=cat(3, cr, cg, cb);

if flag
    figure;
    subplot(2, 2, 1); imshow(f); title('原图像', 'FontWeight', 'Bold');
    subplot(2, 2, 2); imshow(In); title('处理后的图像', 'FontWeight', 'Bold');
    Q = rgb2gray(f);
    M = rgb2gray(In);
    subplot(2, 2, 3); imhist(Q, 64); title('原灰度直方图', 'FontWeight', 'Bold');
    subplot(2, 2, 4); imhist(M, 64); title('处理后的灰度直方图', 'FontWeight', 'Bold');
end
复制代码

image.png image.png   处理前后的直方图分布表明,Retinex图像增强可以在--定程度上保持原始图像的局部 特征,处理结果较为平滑,颜色特征也较为自然,具有良好的去雾效果。

3.拓展

  基于图像处理的去雾增强技术可以显著提高对比度、突出图像细节、提升视觉效果, 该方法已经广泛应用于项目实践。基于直方图均衡化模型的去雾方法针对性强,运行效率 高,且易于融合于其他图像增强算法,所以该技术必将获得进一步发展。 尽管图像去雾技 术在实际应用中已经取得了若干成果,但在不同的场景下依然面临着某些局限性,需要引 起研究人员的进一步关注。

  (1)雾天实时视频的去雾技术。随着视频拍摄设备的不断普及,在雾天进行视频拍摄 或监控,所面临的关键需求就是提高去雾算法的运行效率,实现去雾的实时处理。目前, 部分雾天视频清晰化装置系统中采用了运行效率较高的插值直方图均衡化算法来实现对 视频图像序列进行去雾处理,也有部分研究者通过采用图像复原的相关技术来进行视频监 控过程中的去模糊操作,进而达到去雾效果。因此,实现视频的高效率去雾算法,具有很 大的使用价值。

  (2)雾天图像的模糊成像技术。图像增强技术和图像复原技术都可以在-定程度上实 现图像的去雾效果,但这里面并没有涉及图像获取设备在对3D空间进行拍摄时所引起的 信息丢失问题以。通过对雾天图像的拍摄原理进行分析,由于雾天大气粒子的自身成像因 素,可能会造成图像边缘模糊、对比度降低的现象。因此,充分利用图像的模糊成像信息, 结合雾天粒子映射原理,能够在图像的获取过程中提高图像的可视化效果。

  (3)雾天图像优化效率。图像或视频去雾一般会涉及大规模矩阵计算及非线性方程求 解等数据计算过程,在传统的求解过程中可能会出现内存溢出、速度过慢等问题,采用 GPU加速或分布式计算的方法来提高这些过程的运行速度,以及通过硬件投入来提高雾天 图像的优化效率,这也是实现产业化的一一个途径。

猜你喜欢

转载自juejin.im/post/7111226443954126878