【计算机视觉】图像处理——图像增强技术(一)

好久没有发过计算机视觉的文章啦~

差点就忘记自己的本职工作了......

—————————————下面是正文—————————————

       对于人的眼睛来说,要识别一幅不太清晰的照片上面的人物可能不是一件难事,然而如果把这种事情交给计算机来做的话,可能就有难度了,所以,为了让人工智能设备的视觉系统可以更加准确地找到我们想让它找到的目标,视觉三个基本步骤的第一个步骤——图像处理,就显得尤为重要(三个基本步骤不知道是哪三个的同学可以找我之前的视觉文章【计算机视觉】数字图像以及图像处理的基本步骤,增加下点击量,hiahiahia~),

       作为视觉处理的第一步,图像处理主要负责把图像进行初步的去噪、增强等,使得原本模糊的照片变得比原来更为清晰,突出目标,但是值得注意的是,视觉处理大部分情况下都是为了突出目标而达到尽量接近清晰的结果,并不能百分百地把一张照片还原成原图,比如想百分百去掉马赛克什么的......还是想想就好~(其实去马赛克最有效的方法是眯着眼然后远远地看 ~-~)

       在图像处理中,有很多的方法可以让图像变得清晰,其中一个就是叫 “图像增强” 的方法 ,图像增强主要应用在图像特别暗时,或者因为曝光太亮而无法让目标突出,这个时候就需要把目标的亮度提高一点,然后把不必要的障碍(俗称:噪声)调暗,以把目标清晰度最大化。今天就来讲几个比较简单的,专门对于像素进行处理的方法。

 

一.对比度增强法

       对比度增强的方法有很多,其中最简单的就是让每个像素都乘以一个数,使得图像整体的像素扩大,提高对比度。在这里说一下什么是对比度:图像的亮区与暗区的灰度的比值,图像的对比度越大,明暗的区分就会更加明显,目标更为突出。什么是叫灰度值:图像上各个像素的亮度值。图像从模拟量转化到数字量,经由量化和采样之后,将一幅图像分成了N个格子,而这个格子就称之为 “像素” , 每个格子里面都保存有一个离散型数字,代表这个地方的灰度值。

       假设用 (x,y) 来表示每个像素的位置,辣么 每个像素中的灰度值就可以用  F(x,y) 来表示,G(X , Y) 表示经过对比度增强的处理之后的像素值,辣么用一个标准的公式就可以这样来表达:

                                                            

       其中   N    代表倍数,下面我们来用  MATLAB  来实现一下对比度增强,图像就用一下这张在百度上搜刮下来的:

                                  

                                                                   原     图

                                             

                                                                  原图直方图

       处理的代码略微简单,就只有那么几行,主要就是读入图像,然后把图像的每个像素都乘以N倍,然后输出就可以了。

I = imread("yuantu.jpg"); %读入原图
I1 = 2 * I; %把原图的每个像素都乘以2倍
figure,imshow(I1); %输出处理后的图像

        执行代码可以得到如下效果图

                                      

                                                                    结 果 图

                                                

                                                                   结果图直方图

       由图可以看出,当源图像的所有像素全部扩大两倍之后,原先一些暗区会变得超级清晰,但同时原本已经够清楚的地方也会因为像素扩大而变得高亮

 

二.灰度变换

         灰度值变换主要是分为 线性变换非线性变换 两种,因线性较多,先介绍线性变换

      (1).线性变换

        线性变换可以被应用于因成像设备动态范围太狭窄等因素造成的对比度不足、细节分辨不清等问题,采用线性变换可以把图像的某一个像素相对集中的范围拉宽到某一个范围之内,使得因灰度值过度集中而导致图像细节不清晰的问题。用座标系来表示如下

                               

        举个栗子,以下图为例

                                          

                                                  原  图

        第一步:先调出原图的直方图

                                          

        由直方图可以得知,原图的像素值主要集中在0.4~0.7这个范围,所以,如果我们把[0.4 0.7]的像素值扩展到 [0 1]范围中,将会使得原图中大片相同的像素降低,而原图中的细节将会被提亮

         第二步:灰度范围拉伸

         这一步实现起来也非常的简单,因为MATLAB里面有个函数叫 imadjust(I,[low_in; high_in],[low_out; high_out])  ,具体的用法可以再 MATLAB 的命令行里面输入 : help imadjust 获取详细用法 。

I3 = imadjust(I,[0.45 0.7],[]); %在这里,I 表示输入的原图,经过函数的处理之后在用一个I3里存放

          第三步:显示结果

                                           

                                                  结 果 图

                                           

                                                 结果直方图

           在后面还有直方图均衡化、全局、局部等基于像素的操作方法,待我慢慢道来

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章