没有合适的资源?快使用搜索试试~ 我知道了~
首页图像增强和去噪的原理+实践操作+matlab代码.docx
资源详情
资源评论
资源推荐

P1 图像灰度变换增强
1. 前言
灰度变换是基于点操作的增强方法,它将每一个像素的灰度值按照一定的
数学变换公式转换为一个新的灰度值,如增强处理中的对比度增强。对比度增
强可以采用线性拉伸和非线性拉伸。线性拉伸可以将原始输入图像中的灰度值
不加区别地扩展。如果要求对局部扩展拉伸某一范围的灰度值,或对不同范围
的灰度值进行不同的拉伸处理时,采用分段线性拉伸。非线性拉伸常采用对数
扩展和指数扩展。对数扩展拉伸低亮度去,压缩高亮度区;指数扩展拉伸了高
亮区,压缩了低亮度区。
影响系统图像清晰程度的因素很多,例如室外光照度不够均匀就会造成图
像灰度过于集中;由 CCD(摄像头)获得的图像经过 A/D(数/模转换,该功能在图
像系统中由数字采集卡来实现)转换、线路传送都会产生噪声污染等等。因此图
像质量不可避免的降低了,轻者表现为图像不干净,难于看清细节;重者表现
为图像模糊不清,连概貌也看不出来。因此,在对图像进行分析之前,必须要
对图像质量进行改善,一般情况下改善的方法有两类:图像增强和图像复原。
图像增强不考虑图像质量下降的原因,只将图像中感兴趣的特征有选择的突出,
而衰减不需要的特征,它的目的主要是提高图像的可懂度。图像复原技术与增
强技术不同,它需要了解图像质量下降的原因,首先要建立"降质模型",再利
用该模型,恢复原始图像。
根据图像增强处理过程所在的空间不同,图像增强可分为空域增强法和频
域增强法两大类。频域增强是在图像的某种变换域内,对图像的变换系数值进
行运算,即作某种修正,然后通过逆变换获得增强了的图像。空域增强则是指
直接在图像所在的二维空间进行增强处理,既增强构成图像的像素。空域增强
法主要有灰度变换增强,直方图增强,图像平滑和图像锐化等。
图像的灰度变换处理是图像增强处理技术中一种非常基础、直接的空间域
图像处理法,也是图像数字化软件和图像显示软件的一个重要组成部分。灰度
变换是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度
值的方法。目的是为了改善画质,使图像的显示效果更加清晰。
2. 灰度变换增强的方法及其实现
灰度变换法又可分为:线性、分段线性和非线性变换。主要的灰度变换函
数如图 1 所示。
1. 线性灰度变换
原理 :
当图像由于成像时曝光不足或过度,由于成像设备的非线性或图像记录设

备 动态范围太窄等因素,都会产生对比度不足的弊病,使图像中的细节分辨不
清。这时如将图像灰度线性扩展,常能显著改善图像的主观质量。假设原图像
f(x,y) 的灰度范围是[a, b],希望变换后图像的灰度范围扩展到[c, d],则可采用
如下的线性变换来实现:
{
g( x , y )=c 0≤f ( x , y )≤a
g ( x , y )=
{
[
(
d−c
)
/
(
b−a
)
]
f
(
x , y
)
}
+c a≤f ( x , y )≤b
g( x , y)=d b≤f ( x, y)≤M
f
(1)
其中,M
f
表示 f(x,y)的最大值。该线性灰度变换函数是个一维线性函数:
f (r)=a⋅r+b
(2)
在灰度的线性变换中,当 a>1 时,输出图像的对比度将增大;当 a<1 时,
输出图像的对比度将减小;当 a=1 且 b≠0 时,所进行的操作仅使所有像素的灰
度值上移或下移,其效果是使整个图像更暗或更亮;如果 a<0,则暗区域将变
亮,亮区域将变暗。
图 1. 基本灰度变换函数
代码实现:
2

原 图
a=0.5 减 小 对 比 度
a=1 灰 度 值 上 移
a=1.5 增 大 对 比 度
a=-1 反 相
图 2. 线性灰度变换
依据式(1)即可对图片像素点进行运算,处理前需要先将色彩图像灰度化,
需要先调用 rgb2gray(I)。代码如下:
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 反相');
小结:
3

运行上述代码后得到如图 2 所示的结果,当 a=0.5 的时候,图片的对比度
减小,整体偏灰蒙蒙的感觉;当 a=1.5 时,图片的对比度增大,由于黑色部分
比白色部分面积少,白色的增强使得整张图片显亮;当 a=1,b=30 时,对比度
不变,但是所有像素点的灰度值都加 30,使得整体均匀提亮;a=-1,b=255 时,
相当于求每个像素点灰度值的补,也就是黑的变白,白的变黑,做了反相运算,
也就是负片变换。当图片整体偏黑,遮盖了细节时,可以负片处理。
2. 分段线性灰度变换
原理:
为了突出感兴趣的目标或者灰度区间,相对抑制那些不感兴趣的灰度区域,
可采用分段线性法。常用的是三段线性变换。
分段线性变换称为图像直方图的拉伸,它与完全线性变换类似,其不同之
处在于其变换函数是分段的。其变换函数表达式如下:
f (r)=
{
s
1
r
1
r r<r
1
s
2
−s
1
r
2
−r
1
(r−r
1
) r
1
≤r ≤r
2
255−s
2
255−r
2
(r−r
2
) r>r
2
(3)
灰度拉伸可以更加灵活地控制输出灰度直方图的分布,它可以有选择地拉
伸某段灰度区间以改善输出图像。如果一幅图像灰度集中在较暗的区域而导致
图像偏暗,可以用灰度拉伸功能来拉伸(斜率>1)物体灰度区间以改善图像;同
样如果图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰度拉伸功能来
压缩(斜率<1)物体灰度区间来改善图像质量。
代码实现:
Matlab 中有 自 带的 库函数 imadjust (I,[low_in; high_in],[low_out; high_out]
[,gamma])完成这项工作,其中中间两组参数用比例值的方式分别指定了原灰度
值到灰度变换后的灰度值的映射。也即对应式(3)中的 r
1
、r
2
、s
1
和 s
2
。
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
4

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('变换后直方图');
原 图
0
500
1000
原 图 灰 度 直 方 图
0 50 100 150 200 250
分 段 线 性 变 换 后
0
500
1000
变 换 后 直 方 图
0 50 100 150 200 250
图 3. 调用 matlab 函数分段线性变换增强
图 3 展示了调用库函数均衡化的效果对比。可以看出虽然整体对比度并没
有改变,但是植物的细节部分更加清晰了。
小结:
在程序中,高低两端的对应比值需要自己根据均衡化前的直方图来进行人
为判断设定,很自由,也能细调至自己满意的效果,就跟 Photoshop 中调整对
比度的操作是一样的。但是每张图都需要这样调整,增加了繁琐度。当然,也
可以根据上式(1),自己编写代码实现处理,在此过程中设定两端映射的值,不
需要人为指定,使得直方图分布较为均衡。虽然效果没有库函数实现得完美,
但是操作简便。
3. 对数函数灰度变换
原理:
当用某些非线性函数作为图像的映射函数时,可实现图像灰度的非线性变
换,如利用对数函数、指数函数等可实现对数变换和指数变换。
对数变换主要用于将图像的低灰度值部分扩展,将其高灰度值部分压缩,
5
剩余34页未读,继续阅读












安全验证
文档复制为VIP权益,开通VIP直接复制

评论0