1、图像处理灰度变换实验一. 实验名称: 空间图像增强(一)一 实验目的1 熟悉和掌握利用 matlab 工具进行数字图像的读、写、显示、像素处理等数字图像处理的基本步骤和流程。2 熟练掌握各种空间域图像增强的基本原理及方法。3 熟悉通过灰度变换方式进行图像增强的基本原理、方法和实现。4 熟悉直方图均衡化的基本原理、方法和实现。二 实验原理(一)数字图像的灰度变换灰度变换是图像增强的一种经典而有效的方法。 灰度变换的原理是将图像的每一个像素的灰度值通过一个函数, 对应到另一个灰度值上去从而实现灰度的变换。常见的灰度变换有线性灰度变换和非线性灰度变换, 其中非线性灰度变换包括对数变换和幂律(伽马)变
2、换等。1、线性灰度变换1)当图像成像过程曝光不足或过度, 或由于成像设备的非线性和图像记录设备动态范围太窄等因素, 都会产生对比度不足的弊病, 使图像中的细节分辨不清,图像缺少层次。 这时,可将灰度范围进行线性的扩展或压缩, 这种处理过程被称为图像的线性灰度变换。 对灰度图像进行线性灰度变换能将输入图像的灰度值的动态范围按线性关系公式拉伸扩展至指定范围或整个动态范围。2)令原图像 f(x,y)的灰度范围为 a,b,线性变换后得到图像 g(x,y),其灰度范围为 c,d,则线性灰度变换公式可表示为d ,f ( x, y)bg(x, y)dc f (x, y) a c, a f ( x, y) b
3、 (1)baac,f ( x, y)由(1)式可知,对于介于原图像 f(x,y)的最大和最小灰度值之间的灰度值,可通过线性变换公式, 一一对应到灰度范围 c,d之间,其斜率为 (d-c)/(b-a);对于小于原图像的最小灰度值或大于原图像的最大灰度值的灰度值, 令其分别恒等于变换后的最小和最大灰度值。变换示意图如图 1 所示。图 1 线性灰度变换示意图当斜率大于一时, 变换后的灰度值范围得到拉伸, 图像对比度得到提高; 当斜率小于一时, 变换后的灰度值范围被压缩, 最小与最大灰度值的差变小, 图像对比度降低;当斜率等于一时,相当于对图像不做变换。3)由上述性质可知,线性灰度变换能选择性地加强或
4、降低特定灰度值范围内的对比度, 故线性灰度变换同样也可做分段处理: 对于有价值的灰度范围, 将斜率调整为大于一,用于图像细节;对于不重要的灰度范围,将图像压缩,降低对比度,减轻无用信息的干扰。 最常用的分段线性变换的方法是分三段进行线性变换。在原图像灰度值的最大值和最小值之间设置两个拐点, 在拐点处,原图像的灰度值分别为 r 1,r2,该拐点对应的变换后的图像的灰度值分别为 s1,s2,另外,取原图像灰度的最小值为 r 0,最大值为 rm,对应的变换后的灰度值分别为 s0,sm。则分段线性灰度变换公式为s1s0 f ( x, y) r0 s0 , r0 f ( x, y) r1g( x, y)
5、r1s2r2r0s1 f ( x, y) r1 s1 , r1 f ( x, y) r2(2)r1smrms2 f ( x, y) r2 s2 , r2 f ( x, y) rm r2调整公式中的各个参数,即可得到不同的变换效果4)在线性灰度变换中,有一种特殊的变换,叫做图像反色。通过图像反色变换,每一个像素点的变换前后的灰度值之和为白色( 255)。图像反色的变换公式为g( x, y) L 1 f (x, y)(3)当 L 取为 256 时,实现图像反转变色2、非线性灰度变换除了图像灰度的线性变换外, 还有非线性灰度变换。 非线性灰度变换不是对图像的所有灰度值进行拉伸, 一部分被拉伸, 另一
6、部分则会被压缩。 非线性灰度变换在整个灰度值范围内采用统一的变换函数。比较常见的有对数变换和幂律(伽马)变换等。1)对数变换设原图像为 f(x,y),变换后的图像为 g(x,y),对数变换的变换函数为g( x, y) c log(1 f ( x, y)(4)(4)式中,c 是一个比例因子, log 是求以 e 为底的数值的对数, 原图像灰度值加 1 的目的是保证对数变化对于任何灰度值都有意义。 c 取适当的值,可得到对数变换的函数图像如图 2 所示。图 2 对数变换函数曲线由图 2 可知,通过对数变换, 对于较低的灰度值起到较大程度的拉伸作用, 而对于较高的灰度值起到压缩作用,从而将整幅图像的
7、灰度值均匀化。2)幂律(伽马)变换伽马变换可通过调节幂指数参数来改变其变换特性, 设 f(x,y)和变换前后的图像, 为幂指数, c 为比例系数,则伽马变换的公式如下g(x,y)分别为g( x, y)cf ( x, y)(5)对于 c 为正值的情况,当 1 时,伽马变换将低灰度值压缩,高灰度值拉伸;当1I1=rgb2gray(I1); %满足条件,将看似为黑白图的多通道图转化为灰度图endI1=double(I1);%将图片灰度的数据类型转变为double 型%这一部转化很重要,在后续的计算中,尤其是除法,运算结果能保证更高的精度lo,wi=size(I1);%获得矩阵 I1的行列尺寸,以备单
8、个像素处理时的循环算法a=min(min(I1);%得到原图( I1)所有像素灰度的最小值b=max(max(I1);%得到原图(I1 )所有像素灰度的最小值I2=zeros(lo,wi);%初始化矩阵 I2 ,为处理后的图像分配内存c=10;d=250;%设置灰度线性拉伸后的灰度最小值和最大值%接下来,对矩阵I1 中的逐个像素进行线性灰度变换,并存到I2 相应位置fori=1:loforj=1:wiI2(i,j)=(d-c)/(b-a)*(I1(i,j)-a)+c;%线性灰度变换公式endendI1=mat2gray(I1);I2=mat2gray(I2);%将变换后的矩阵 I1 、 I2转
9、换为 8 位整型subplot(2,2,2),imshow(I2);%在一张 22图的第 2个位置显示 I2title(线性灰度变换后的图片 );imwrite(I2, 线性灰度变换后的图片.bmp, bmp ) %以另一个文件名形式保存图像subplot(2,2,3),imhist(I1);%在一张 22图的第3 个位置显示 I1的灰度直方图ylim(0,7000),title(原图片灰度直方图 );subplot(2,2,4),imhist(I2);%在一张 22图的第4 个位置显示 I2的灰度直方图ylim(0,7000),title(变换后图片灰度直方图 );%画灰度变换曲线x=0:2
10、55; %设置 0 到 255 共 256 级灰度级y=zeros(1,256); %设置全 0 向量,为线性灰度变换后的数值分配内存%按灰度级,从 0 到 255 开始循环,即 x(1) 到 x(256)for i=1:256if x(i)=a&x(i)by(i)=d; %当原图灰度介于 a,b 之间,用公式变换endendfigure,plot(x,y) %创建新的图片窗口,显示变换函数曲线title( 线性变换曲线图 ),xlim(0,255),ylim(0,255)ylim(0,255); %限定横坐标范围为 0 到 2552、非线性灰度变换%对图像做非线性变换clear,clcI1=
11、imread(Ein.jpg); %读取图像文件Ein.jpg,赋值给矩阵I1figure,imshow(I1);%创建一个图像显示窗口并显示图像title( 原图像 )ifsize(I1,3)1I1=rgb2gray(I1);%满足条件,将三通道的图片变为灰度图endI1=double(I1);lo,wi=size(I1);%将图片的数据类型转变为 double 型,以便后续计算准确%得到矩阵 I1 的行数和列数,即像素个数I2=zeros(lo,wi);I3=zeros(lo,wi);%创建两个全零矩阵用于存放对数和伽马变换后的矩阵%对图像做对数变换c=5;d=1/255; %令对数变换中的比例系数为 5 ,伽马变换中的比例系数为 1/255%对每一个像素的灰度值,用循环分别进行变换fo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1