matlab泊松分布随机数和图像_【图像处理三】图像增强算法

  • Post author:
  • Post category:其他


991a01086e084b0b315f07753d94a19c.png

引言

由于受到环境,光线等的影响,拍摄的照片清晰度和对比度比较低,不能够突出图像中的重点。图像增强就是通过一定手段来增强图像的对比度,使得其中的人物或者事物更加明显,有利于后边的识别等处理。本章介绍几个传统的图像增强算法,并给出matlab实现代码,看一看不同算法的实现效果,最后再介绍一下深度学习在图像增强上的应用。


01

直方图均衡

在直方图中,如果灰度级集中于高灰度区域,图像低灰度就不容易分辨,如果灰度级集中于低灰度区域,那么高灰度就不容易分辨。为了能够让高低灰度都容易分辨,最好的办法是将图像进行转换,使得灰度级分布概率相同。这就是直方图均衡的目的。假设图像经过如下变换:

380e516c8097d055515a91ad12d6db5d.png

其中L为灰度级。我们的目的是使得灰度级概率分布相等:

08585f453544202c49bf7fe446a729c6.png

变换前灰度级分布和变换后灰度级分布关系为:

05f5c403857df9cdc25b27a191d9406a.png

因此有:

6315d4d9e310378191a70a492c877329.png

积分有:

7000d1ef200e1778b8031e1e9032ee48.png

用离散化表示:

e361ba587766f5e76e683b506951b020.png

Matlab代码如下:

function 

处理结果:

6dc3ba401e63ebc089e4cc9908c025e1.png

0821f07029ebb22bdcbbf5a59c4afd4d.png


图1.1 直方图均衡化结果(左)原图像(右)结果


02

Gamma变换

Gamma变换主要用于图像修正,将灰度过高或者过低的图片进行修正,增强对比度。变换公式是对每个像素进行乘积运算:

84b9fff34e6eae06396d8c403a94c7ad.png

从下图的gamma曲线中可以看出其变换原理:

de1556040eb102f7252fe6cb1b94952f.png


图2.1 图像gamma变换

从图中可以看出当r值大于1,会拉伸图像中灰度级较高的区域,压缩灰度级较低部分;当r值小于1时,会拉伸灰度级较低部分,而压缩灰度级较高部分。这样来调整图像对比度。

Matlab代码:

function

结果如下:

e6e87d1226c6f8c96436924f5a84e8cc.png

c5126b3bef10e2dd2d364bd485e5a46e.png


图2.2 gamma变换(左)r=0.5(右)r=1.5


03

Laplace变换

对图像进行二阶微分操作可以突出图像边缘,增强细节。通常希望构造一个同性滤波器,其对图像方向的变化不敏感。一个最简单的同性滤波器就是laplace算子,定义为:

8612a9dae619033a05ccb37de5a5341e.png

表示为离散形式为:

e14b5a56a36547744bce2aedb6db567b.png

实现上式的模板为:

b894ca074b9294c1118865d1d0ec0f3c.png

将laplace变换的结果按照一定比例加入到原灰度图像中:

7b5a150f57d142c1399b2c0a80cdbde7.png

既可以来突出对比度。

Matlab代码为:

% g(x, y)=f(x, y)+c*delta2 f(x, y)
​

结果为:

761f2312c9e3c75fabd2059e9d91f69f.png

f94ef130baad5c3f68751e6d71d94e5e.png

acbf43ba9770c78cba3f96aacf260a17.png


图3.1 laplace算子增强(上左)laplace变换结果(上右)C=0.5(下)C=0.8

04

Retix算法

Retix是一种建立在光学物理特性基础上的算法,假设入射光L(x, y)入射到物体上,经过反射R(x, y),进入到人眼的光变为:

799e5b37cd1c3b4e672c6fd779608fd1.png

通常来说,R(x, y)为物体的内在属性,包含了大量的信息,我们应该最大程度的保留。Retix理论的提出者指出这个L(x, y)可以通过高斯模糊来得到。为了降低运算难度,上式取log,得到:

63e0df12da33ae78687064c8b8c6499a.png

L(x, y)是通过高斯函数G(x, y)和观察图像S(x, y)卷积得到的。高斯函数为:

77310407eb05201595fd9af416d0adc4.png

为了降低卷积运算的的运算量,我们取了7×7的高斯卷积模板。

Matlab代码为:

​function singleRetix(c)
   
    imgData=imread('../data/img0.jpg');
    gray=rgb2gray(imgData);
    [grayRow, grayColumn]=size(gray);    
    gray=double(gray);
    
​
    gaussConv=zeros(grayRow, grayColumn);
    for i=1:grayRow
        for j=1:grayColumn
            for k=-3:3
                for n=-3:3
                    gaussValue=two_d_gauss(k, n, c);
                    if (i+k>=1) && (i+k<=grayRow) && (j+n>=1) && (j+n<=grayColumn)
                        grayValue=gray(i+k, j+n);
                    else
                        grayValue=0;
                    end                    
                    gaussConv(i, j)=gaussConv(i, j)+grayValue*gaussValue;
                end
            end
        end
    end
    gray=log(gray);
    gaussConv=log(gaussConv);
    reflectGray=exp(gray-gaussConv);
    maxReflectGray=max(max(reflectGray));
    minReflectGray=min(min(reflectGray));
    reflectGray=((reflectGray-minReflectGray) .* 255) ./ (maxReflectGray-minReflectGray);
    reflectGray=uint8(reflectGray);
    
    fileName='../output/retix';
    fileSuf='.jpg';
    gammaStr=num2str(c);
    file=[fileName, gammaStr, fileSuf];
    figure('name', 'processed');
    imshow(reflectGray);
    imwrite(reflectGray, file);
​
    
    
end
​
​
function res=two_d_gauss(x, y, c)
    res=(1/sqrt(2*pi*c))*(-(x^2+y^2)/c^2);
end

结果:

9786e6efa620e8ce09e975286485d28d.png

9786e6efa620e8ce09e975286485d28d.png


图4.1 Retix结果(左)sigma=90(右)sigma=150

05

基于深度学习的图像增强

LL-NET是第一个用深度学习来增强图像的方法。在其论文中使用自动编码器从表示学习的角度来解决低光图像增强的问题,这些自动编码器经过训练以学习低光图像中的基础信号特征并自适应地增亮和去噪。LL-NET借鉴了SSDA网络的稀疏特性,可以用来去除图像中噪声。运用网络的泛华能力来提供低照度下的测试图片,让网络来学习到图片的特征,从而降低噪声,提高图像对比度。

网络结构如下:

9a4f14be9af8611178bdf5ffc0022ea8.png


图5.1 LL-NET网络结构

结果为:

eb88db777f89d7a69dea0af1d2bb1282.png


图5.2 结果

结论

本文介绍了四种传统的图像增强算法,以及一种基于深度学习的方法。

往期回顾

1 【图像处理一】直方图

2 【图像处理一】加速直方图统计

3 【图像处理二】HDMI显示1

4 【图像处理二】HDMI显示2

c7c903ef4f86bae1711513b030160284.png