实验二:图像增强
一、实验目的
熟悉基于基于单像素空域图像增强方法,理解并掌握直方图均衡化和规定化实现图像增强
二、实验环境
Python
Pycharm
三、实验内容(题目、相关知识(函数,原理…)、代码、实验结果)
3.1 题目要求
1)对一幅低对比度分辨率的图像采用图像反转、对数变换及伽马较正方法实现图像增强,要求自己编写代码实现。(图自选)
2)对一幅低对比度分辨率的图像采用直方图均衡化和规定化方法(单映射或组映射)实现图像增强,分别采用系统函数和自己编写函数实现相应用功能。(图自选)
3)写出实验报告。报告要求:实验目的、实验内容、实验过程、实验小结和较详细的图文说明。
3.2 相关知识
(1)图像反转
顾名思义,图像反转即反转图像灰度级,可以得到等效的照片底片
设一幅图片的灰度级为0,L-1,则反转图像公式如下:
s=L-1-r
s为目标图像的像素点的像素值,r为原图像像素点的像素值
(2)对数变换
对数变换,目的是压缩图像矩阵值域的动态范围,让我们可以看到更多细节
假设原始图像灰度取值范围是[x1,x2], (x1>=x2>=0)
则对数变换为 output = log(1 + input)
log输入为0时输出为负无穷,+1就是为了避免此情况(或者理解为偏置)
(3)伽马变换
在图像处理中,常常利用伽马变换来对过曝或者曝光不足(过暗)的灰度图利用伽马变换进行对比度调节。具体年来讲:就是通过非线性变换,让图像中较暗的区域的灰度值得到增强,图像中灰度值过大的区域的灰度值得到降低。经过伽马变换,图像整体的细节表现会得到增强。
数学公式如下:
s=crγ
其中,r为灰度图像的输入值(原来的灰度值),取值范围为[0,1]。s为经过伽马变换后的灰度输出值。c为灰度缩放系数,通常取1。γ为伽马因子大小。控制了整个变换的缩放程度。
(4)直方图均衡化
直方图均衡化是一种简单有效的图像增强技术,通过改变图像的直方图来改变图像中各像素的灰度,主要用于增强动态范围偏小的图像的对比度。原始图像由于其灰度分布可能集中在较窄的区间,造成图像不够清晰。例如,过曝光图像的灰度级集中在高亮度范围内,而曝光不足将使图像灰度级集中在低亮度范围内。采用直方图均衡化,可以把原始图像的直方图变换为均匀分布(均衡)的形式,这样就增加了像素之间灰度值差别的动态范围,从而达到增强图像整体对比度的效果。换言之,直方图均衡化的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并,从而增大对比度,使图像清晰,达到增强的目的。
直方图均衡化的步骤:
①依次扫描原始灰度图像的每一个像素, 计算出图像的灰度直方图;
②计算灰度直方图的累积分布函数;
③根据累积分布函数和直方图均衡化原理得到输入与输出之间的映射关系。
④最后根据映射关系得到结果进行图像变换
(5)规定化方法(单映射)
规定化,其本身与均衡化一样,不过均衡化的变换函数/增强函数是由图像自动决定的,让图像的灰度级变的更为均匀。而规定化可以让我们自己指定希望变换的图像的增强函数。让我们可以达到自己想要的效果。可以选择让灰度级集中到低灰度级区域,让阴影的细节更为丰富。
z=G-1(s)=G-1(T( r ))
关键是在于怎么完成Sr到z的反映射。
有两种方法-单映射与组映射,也就是SML与GML算法。
单映射:根据SML的思想,以为基准,让去查找,差值的绝对值最小的哪个灰度级就是新映射的灰度级。
组映射:都说单映射的查找方法是存在误差的,所以提供了组映射。
组映射与单映射反过来,以原图的为基准,让规定图的去查找原图中累计概率密度的差值的绝对值最小的哪个灰度级,依次为一个分别,让从0到这个灰度级之间的所有灰度级都映射到当前的规定图的灰度级,然后更新边界,直到下一次找到最小的边界。
3.3 实验与分析
(1)图像反转
手写函数Image_inverse()实现图像反转,直接用该图像最大灰度值减输入。
实验结果:
(2)对数变换
手写函数:
实验结果:
(3)伽马变换
先绘制伽马变换函数
伽马变换:
实验结果:
(4)直方图均衡化
使用函数:
cv2.equalizeHist(img)
实验结果:
手写代码实现:
实验结果:
(5)规定化方法(单映射)
基准图像:
自己编写函数实现:
实验结果:
Python没有好像没有直接实现图像规定化的库函数,只有通过自己编写函数实现。
四、实验心得
图像增强是有目的地强调图像的整体或局部特性,例如改善图像的颜色、亮度和对比度等,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,提高图像的视觉效果。图像增强的方法众多,我们使用不同方法时需要了解该方法的具体实现过程,了解实现原理,才能在实际的工作过程中选择最合适的方法进行运用。