1 实验任务及目的
- 掌握图像增强的点运算常用方法的原理及实现;
- 掌握图像增强的局部运算方法的原理及实现;
- 掌握图像的读入、保存、以及其他基本的图像处理编程方法;
- 完成实验中代码分析,实验结果分析,及要求的代码编程,总结归纳其中涉及的数字图像处理相关原理,基于上述要求完成实验报告,实验报告中需附上实验结果图。
2数据来源及编程环境
1.数据来源:MATLAB自带图像及文件1.jpg、文件2.jpg
2.编程环境:MATLAB 2016a
3 实验内容
- 采用MATLAB Image Processing Toolbox中的imadjust()函数,实现图像灰度调整;改变gamma的值对比分析调整后图像差别。
- 不使用Image Processing Toolbox中的函数,编程实现图像Fig1-3的反转变换,通过imwrite()函数保存输出变换后的图像,变换函数为:
s =L−1−r
其中:r为变换前的像元灰度值,s为变换后的像元灰度值,L为图像的灰度级;保存格式为jpg。
- 分别通过运行所给代码和自编程两种途径,实现图像的直方图显示,进行对比验证和分析总结;
- 运行所给程序,参照直方图均衡化原理观察结果并分析总结;
- 运行所给程序并根据结果进行分析;通过imnoise()函数给图像添加椒盐噪声,分别采用均值滤波、中值滤波进行处理,分析实验结果,对比运行时间。
4 实验成果与分析
4.1 imadjust()实现灰度变换
(1)imadjust()函数中参数及作用分析
对图像进行灰度变换即调节灰度图像的亮度或彩色图像的颜色矩阵,可使用MATLAB自带的imadjust()函数实现:
G=imadjust(F,[low_in;high_in],[low_out,high_out],gamma)
上式表示将图像F中的亮度值映射到G中的新值,具体映射规则为:将原图像F中位于[low_in,high_in]区间内的亮度值,映射到区间[low_out,high_out]上作为新图像的亮度值范围,其中low_in与low_out对应,high_in与high_out对应;参数gamma的作用为指定F值与G值关系的曲线形状。
在所给代码中,[low_in,high_in]、[low_out,high_out]均用空矩阵表示,默认为[0,1];参数gamma=0.5,输出结果(图4-1)显示,调整后图像明显变量亮,说明该映射关系更偏向于高亮度值输出。
图4-1 使用imadjust()调整前后的图像对比
(2)图像幂次变换与参数gamma
gamma指定描述值I和值J关系的曲线形状。由图4-2:若gamma<1,则映射偏重更高数值(明亮)输出;若gamma>
1,则映射偏重更低数值(灰暗)输出;若省略该参数,则默认为1(即映射为线性映射)。
图4-2 不同gamma对应的灰度变换函数
利用imadjust()函数实现当gamma分别大于1、小于1、等于1时图像的幂次变换代码如下:
图4-3 代码截图1
代码运行结果:
图4-4 gamma取值对图像灰度变换的影响示意
显然,gamma=0.5(小于1)时,变化后的图像整体亮度值提升;当gamma=0.5(大于1)时,变化后的图像整体亮度值降低;gamma=1时,图像亮度值不变。
4.2 自编程实现图像反转变换
具体编程实现为:
图4-5 代码截图2
变换函数为:
s =L−1−r
r为变换前的像元灰度值,s为变换后的像元灰度值,L为图像的灰度级,L=256,输入图像为I2_0,输出图像为I2,输出结果为图4-6中右图:
图4-6 变换前后图像对比
4.3 图像直方图显示
(1)imhist()函数
由图4-7:原始图像的直方图显示,其灰度值集中在75-150,而调整后的直方图显示,图像灰度值分布更加分散,几乎遍布0-255整个范围,反映到图像的视觉效果上:调整后图像对比度明显增强,相比之下,人眼捕捉到的信息更加丰富。
图4-7 直方图调整前后图像变换对比
(2)自编程实现直方图显示
算法支持:1)size()函数与for循环结合使用可有效实现统计各个灰度值的像素出现个数;2)MATLAB自带的bar()函数可绘制条形图。
代码实现:见图4-7
图4-7 代码截图3
运行结果:由图4-:自编程显示的直方图与MATLAB自带函数imhist()显示的直方图结果无明显差别,说明程序合理。
图4-8 两种方法显示直方图对比
4.4 直方图均衡
原理:直方图均衡是将原图像通过某种变换得到一幅灰度直方图为均匀分布的新图像的方法,其要思想是将一副图像的直方图分布通过累积分布函数变成近似均匀分布,从而实现图像的对比度增强,对于数字图像,变换函数的离散形式为:
sk=T(rk)=j=0kpr(rj)=j=0knjn
实验结果分析:由图4-9可知:原始图像中大多数像素的灰度值在100以下,其中灰度值在50以下的像素居多,图像整体灰度值偏小,因此图像大面积偏暗(如图4-9左图);而均衡化后的图像各个灰度值的像素个数差别不大,特别是灰度值位于100-255之间的各个灰度值对应的像素个数几乎相等,因此图像整体亮度提高、明暗信息更加丰富、图像中细节更加突出(如图4-10 轮胎橡胶周部分对比尤为明显)。
图4-9 直方图均衡化前后直方图对比
图4-为直方图均衡前后图像对比:
图4-10 直方图均衡化前后图像对比
4.5 图像椒盐噪声即滤波
(1)邻域平均法进行空域平滑
原理:假设图像相邻像素件存在高度的空间相关性,而噪声统计独立,因此,可通过用邻域内个像素的灰度平均值代替该像素原来的灰度值,从而实现图像平滑,对于一幅N×M的图像f(x,y),平滑后的图像为g(x,y),则:
gx,y=1Mi,j∈sfi,j
其中:x,y=0,1,…,N-1;s为(x,y)邻域内像素坐标集合;M为集合s内像素总数。
平滑后图像信噪比可提高M倍,但会导致图像模糊程度增加、边缘及细节信息丢失。
实验结果分析:下列代码(已给)表示,用5×5的模板h(图4-)对图像I进行滤波处理,作用相当于该模板同原图像卷积,处理后图像为I2。
图4-11 所给代码中的滤波处理部分
图4-12 模板h
图4-为滤波前后图像对比:
图4-13 平滑前后图像对比
显然,经5×5的模板处理后图像变的平滑,但模糊程度加重,硬币的边缘尤为模糊,硬币纹理细节变得难以辨别。
(2)imnoise()函数添加椒盐噪声及滤波去噪
原理:
- 均值滤波:用当前像素周围nxn个像素值的均值来代替当前像素值,使用该方法遍历处理图像内的每一个像素点,可完成整幅图像的均值滤波,是一种线性滤波算法。
- 中值滤波:对滑动窗口内的像素灰度值排序,用中值代替窗口中心像素的原来灰度值,是一种非线性图像平滑法,其窗口大小、形状的选择直接影响滤波效果。改滤波方法可有效抑制脉冲干扰及椒盐噪声,同时能很好地抑制边缘模糊,但不是和处理点、线等细节较多的图像。
代码实现:对于均值滤波,首先使用fspscial(‘average’)函数生成模板,在通过imfilter()函数生成均值滤波器;而对于中值滤波,可通过MATLAB自带的函数medfilt2()函数实现。(具体代码如图4-14所示)
图4-14 代码截图5
实验结果分析:通过imnoise()函数,对原图添加了噪声密度为0.05的椒盐噪声,随后分别用均值滤波、中值滤波对添加噪声后的图像进行处理,原图、添加噪声后的图像及处理结果如图4-15所示:显然,中值滤波的去噪效果要好于均值滤波,在有效去除椒盐噪声的同时还很好地保留了硬币的边缘信息及纹理细节;而均值滤波处理后的图像去噪不彻底,具有明显的“噪声残余”,且图像模糊严重。
图4-15 不同滤波去除椒盐噪声效果对比
代码详见: