数字图像处理
王
目录
P1 图像灰度变换增强......................................................................................... 2
一、 前言.......................................................................................................... 2
二、 灰度变换增强的方法及其实现.............................................................. 2
1. 线性灰度变换.......................................................................................2
2. 分段线性灰度变换...............................................................................4
3. 对数函数灰度变换...............................................................................6
4. 反对数函数灰度变换...........................................................................8
5. 伽马变换...............................................................................................9
6. 灰度切割.............................................................................................10
7. 直方图均衡化.....................................................................................12
8. 位图切割.............................................................................................14
P2 高斯和椒盐噪声去除效果对比................................................................... 17
一、 前言........................................................................................................ 17
二、 去噪方法及其实现................................................................................ 17
1. 均值滤波.............................................................................................17
2. 中值滤波.............................................................................................19
3. 最值滤波.............................................................................................21
4. 二维统计滤波.....................................................................................23
5. 二维维纳滤波.....................................................................................25
6. 高斯低通滤波.....................................................................................27
7. 高斯高通滤波.....................................................................................30
三、 去噪算法对比........................................................................................ 32
1. 基本去噪算法.....................................................................................32
Filter2 滤波去噪对比......................................................................... 33
2.
参考文献............................................................................................................. 34
总结..................................................................................................................... 34
2015 年 12 月
P1 图像灰度变换增强
一、 前言
灰度变换是基于点操作的增强方法,它将每一个像素的灰度值按照一定的数
学变换公式转换为一个新的灰度值,如增强处理中的对比度增强。对比度增强可
以采用线性拉伸和非线性拉伸。线性拉伸可以将原始输入图像中的灰度值不加区
别地扩展。如果要求对局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值
进行不同的拉伸处理时,采用分段线性拉伸。非线性拉伸常采用对数扩展和指数
扩展。对数扩展拉伸低亮度去,压缩高亮度区;指数扩展拉伸了高亮区,压缩了
低亮度区。
影响系统图像清晰程度的因素很多,例如室外光照度不够均匀就会造成图像
灰度过于集中;由 CCD(摄像头)获得的图像经过 A/D(数/模转换,该功能在图像
系统中由数字采集卡来实现)转换、线路传送都会产生噪声污染等等。因此图像
质量不可避免的降低了,轻者表现为图像不干净,难于看清细节;重者表现为图
像模糊不清,连概貌也看不出来。因此,在对图像进行分析之前,必须要对图像
质量进行改善,一般情况下改善的方法有两类:图像增强和图像复原。图像增强
不考虑图像质量下降的原因,只将图像中感兴趣的特征有选择的突出,而衰减不
需要的特征,它的目的主要是提高图像的可懂度。图像复原技术与增强技术不同,
它需要了解图像质量下降的原因,首先要建立"降质模型",再利用该模型,恢复
原始图像。
根据图像增强处理过程所在的空间不同,图像增强可分为空域增强法和频域
增强法两大类。频域增强是在图像的某种变换域内,对图像的变换系数值进行运
算,即作某种修正,然后通过逆变换获得增强了的图像。空域增强则是指直接在
图像所在的二维空间进行增强处理,既增强构成图像的像素。空域增强法主要有
灰度变换增强,直方图增强,图像平滑和图像锐化等。
图像的灰度变换处理是图像增强处理技术中一种非常基础、直接的空间域图
像处理法,也是图像数字化软件和图像显示软件的一个重要组成部分。灰度变换
是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度值的
方法。目的是为了改善画质,使图像的显示效果更加清晰。
二、 灰度变换增强的方法及其实现
灰度变换法又可分为:线性、分段线性和非线性变换。主要的灰度变换函数
如图 1 所示。
1. 线性灰度变换
原理:
当图像由于成像时曝光不足或过度,由于成像设备的非线性或图像记录设备
动态范围太窄等因素,都会产生对比度不足的弊病,使图像中的细节分辨不清。
这时如将图像灰度线性扩展,常能显著改善图像的主观质量。假设原图像 f(x,y)
2
的灰度范围是[a, b],希望变换后图像的灰度范围扩展到[c, d],则可采用如下的
线性变换来实现:
,(
yxg
)
c
)
,(
yxg
/
,
yxfab
c
d
,(
)
yxg
d
c
b
0
a
)
,(
a
yxf
)
,(
yxf
b
,(
)
fMyxf
其中,Mf 表示 f(x,y)的最大值。该线性灰度变换函数是个一维线性函数:
)(
bra
rf
(1)
(2)
在灰度的线性变换中,当 a>1 时,输出图像的对比度将增大;当 a<1 时,
输出图像的对比度将减小;当 a=1 且 b≠0 时,所进行的操作仅使所有像素的灰
度值上移或下移,其效果是使整个图像更暗或更亮;如果 a<0,则暗区域将变亮,
亮区域将变暗。
图 1. 基本灰度变换函数
代码实现:
原 图
a=0.5 减 小 对 比 度
a=1.5 增 大 对 比 度
a=1 灰 度 值 上 移
a=-1 反 相
3
依据式(1)即可对图片像素点进行运算,处理前需要先将色彩图像灰度化,
需要先调用 rgb2gray(I)。代码如下:
图 2. 线性灰度变换
I = imread('pic/h2.jpg');
[d1,d2,d3] = size(I);
if(d3 > 1)
I = rgb2gray(I);%如果是灰度图就不用先变换
end
Im = double(I);
A=0.5; B=0;
darker=Im*A+B;
A=1;B=0;
mover=Im*A+B;
A=1.5;B=0;
lighter=Im*A+B;
A=-1;B=255;
reverser=Im*A+B;
J1=uint8(darker);
J2=uint8(mover);
J3=uint8(lighter);
J4=uint8(reverser);
subplot(2,3,1),imshow(I);title('原图');
subplot(2,3,2),imshow(J1); title('a=0.5 减小对比度');
subplot(2,3,5),imshow(J2);title('a=1 灰度值上移');
subplot(2,3,3),imshow(J3);title('a=1.5 增大对比度');
subplot(2,3,6),imshow(J4);title('a=-1 反相');
小结:
运行上述代码后得到如图 2 所示的结果,当 a=0.5 的时候,图片的对比度减
小,整体偏灰蒙蒙的感觉;当 a=1.5 时,图片的对比度增大,由于黑色部分比白
色部分面积少,白色的增强使得整张图片显亮;当 a=1,b=30 时,对比度不变,
但是所有像素点的灰度值都加 30,使得整体均匀提亮;a=-1,b=255 时,相当于
求每个像素点灰度值的补,也就是黑的变白,白的变黑,做了反相运算,也就是
负片变换。当图片整体偏黑,遮盖了细节时,可以负片处理。
2. 分段线性灰度变换
原理:
为了突出感兴趣的目标或者灰度区间,相对抑制那些不感兴趣的灰度区域,
可采用分段线性法。常用的是三段线性变换。
分段线性变换称为图像直方图的拉伸,它与完全线性变换类似,其不同之处
在于其变换函数是分段的。其变换函数表达式如下:
4
)(
rf
s
1
r
1
s
s
1
2
r
r
2
1
255
s
2
255
r
2
r
r
r
1
(
r
r
1
)
r
1
r
r
2
(
r
r
2
)
r
r
2
(3)
灰度拉伸可以更加灵活地控制输出灰度直方图的分布,它可以有选择地拉伸
某段灰度区间以改善输出图像。如果一幅图像灰度集中在较暗的区域而导致图像
偏暗,可以用灰度拉伸功能来拉伸(斜率>1)物体灰度区间以改善图像;同样如果
图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰度拉伸功能来压缩(斜
率<1)物体灰度区间来改善图像质量。
代码实现:
Matlab 中 有 自 带 的 库 函 数 imadjust
(I,[low_in; high_in],[low_out;
high_out][,gamma])完成这项工作,其中中间两组参数用比例值的方式分别指定了
原灰度值到灰度变换后的灰度值的映射。也即对应式(3)中的 r1、r2、s1 和 s2。
gamma 指定描述值 I 和值 J 关系的曲线形状。如果 gamma 小于 1,此映射偏
重更高数值(明亮)输出,如果 gamma 大于 1,此映射偏重更低数值(灰暗)输出,
如果省略此参数,默认为(线性映射)。所以分段线性灰度变换,只需要给 gamma
赋值 1 或者缺省就可以了。
调用该函数编写处理程序比较简单,源码如下:
I = imread('pic/h2.jpg');
[d1,d2,d3] = size(I);
if(d3 > 1)
I = rgb2gray(I);%如果是灰度图就不用先变换
end
I = double(I) / 255;
Im = uint8(255 * I * 0.5 + 0.5);
Jm=imadjust(Im,[0.03,0.53],[0,1]);%分段点,gamma 缺省,线性映射
subplot(2,2,1);imshow(Im);title('原图');
subplot(2,2,2);imhist(Im);title('原图灰度直方图');
subplot(2,2,3);imshow(Jm);title('分段线性变换后');
subplot(2,2,4);imhist(Jm);title('变换后直方图');
5
原 图
原 图 灰 度 直 方 图
分 段 线 性 变 换 后
1000
500
0
0
1000
500
0
0
50
100
150
200
250
变 换 后 直 方 图
50
100
150
200
250
图 3. 调用 matlab 函数分段线性变换增强
图 3 展示了调用库函数均衡化的效果对比。可以看出虽然整体对比度并没有
改变,但是植物的细节部分更加清晰了。
小结:
在程序中,高低两端的对应比值需要自己根据均衡化前的直方图来进行人为
判断设定,很自由,也能细调至自己满意的效果,就跟 Photoshop 中调整对比度
的操作是一样的。但是每张图都需要这样调整,增加了繁琐度。当然,也可以根
据上式(1),自己编写代码实现处理,在此过程中设定两端映射的值,不需要人
为指定,使得直方图分布较为均衡。虽然效果没有库函数实现得完美,但是操作
简便。
3. 对数函数灰度变换
原理:
当用某些非线性函数作为图像的映射函数时,可实现图像灰度的非线性变
换,如利用对数函数、指数函数等可实现对数变换和指数变换。
对数变换主要用于将图像的低灰度值部分扩展,将其高灰度值部分压缩,以
达到强调图像低灰度部分的目的。变换方法由下式给出。
s
c
log 1
v
1(
rv
)
r
]1,0[
(4)
这里的对数变换,底数为 v+1,实际计算的时候,需要用换底公式。底数越大,
对低灰度部分的强调就越强,对高灰度部分的压缩也就越强。相反的,如果想强
调高灰度部分,则用反对数函数就可以了。
代码实现:
6
a).原 图
b).v=5
c).v=10
d).v=200
图 4. 对数函数灰度变换增强
有了前面两例的介绍,代码其实很容易编写,只需要结合式(4)对变换函数
进行修改就可以了:
Im= imread('pic/h2.jpg');
f = mat2gray(Im,[0 255]);
v = 5;
g_1 = log2(1 + v*f)/log2(v+1);
v = 10;
g_2 = log2(1 + v*f)/log2(v+1);
v = 200;
g_3 = log2(1 + v*f)/log2(v+1);
subplot(2,2,1);
imshow(f,[0 1]);
xlabel('a).原图');
subplot(2,2,2);
imshow(g_1,[0 1]);
xlabel('b).\fontname{Times New Roman}\itv\rm=5');
subplot(2,2,3);
imshow(g_2,[0 1]);
xlabel('c).\fontname{Times New Roman}\itv\rm=10');
subplot(2,2,4);
imshow(g_3,[0 1]);
xlabel('d).\fontname{Times New Roman}\itv\rm=200');
7
小结:
运行本例中提供的源码,得到了图 4 的处理效果。可以看出,图像的暗部被
压缩弱化,而亮部得到增强,随着底数 v+1 的增大,图片逐渐变亮。
4. 反对数函数灰度变换
原理:
与对数函数不同的是,反对数强调高灰度部分,其原理已在上例中详述。只
要将 s 和 r 互换就可以得到图像之间的关系。
s
((1
v
r
c
)
1
v
)1
(5)
代码实现:
a).原 图
b).v=2
c).v=5
d).v=20
图 5. 反对数函数灰度变换
Im = imread('pic/h2.jpg');
f = mat2gray(Im,[0 255]);
v = 2;
g_1 = ((f.^(v+1)))/v;
disp(g_1);
v = 5;
g_2 = ((f.^(v+1)))/v;
disp(g_2);
v = 20;
g_3 = ((f.^(v+1)))/v;
subplot(2,2,1);
imshow(f,[0 1]);
xlabel('a).原图');
8