实验二 图像灰度变换实验一、 实验目的熟悉亮度变换函数的使用熟悉灰度图像的直方图的表示;掌握图像增强的基本方法:灰度变换、直方图均衡;二、 实验内容灰度线性变换、灰度直方图、直方图均衡处理;灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像增强三、 实验原理1. 函数imadjust 函数imadjust是对灰度图像进行亮度变换的基本命令,语法为: g = imadjust(f, [low_in high_in], [low_out high_out], gamma) 将图像f中的亮度值(灰度值)映射到新图像g中,即将low_in至high_in之间的值映射到low_out至high_out之间的值low_in以下的灰度值映射为low_out,high_in以上的灰度值映射为high_out,函数imadjust的矩阵[ ]内参数均指定在0和1之间,[low_in high_in]和[low_out high_out]使用空矩阵[ ]会得到默认值[0 1]若high_out小于low_out,则输出图像会反转。
参数gamma指定了曲线(变换函数)的形状,若gamma小于1,则映射被加权至更高(更亮)的输出值;若gamma大于1,则映射被加权至更低(更暗)的输出值若省略了函数的参量gamma,则gamma默认为1——即线性映射>>f = imread(‘filename’)>>imshow(f)>>g1 = imadjust(f, [0 1], [1 0]); %图像反转>>figure, imshow(g1) %figure命令表示同时显示多个窗口 >>g2 = imadjust(f, [0.5 0.75], [0 1]); %将0.5至0.75之间的灰度级扩展到范围0和1之间>>figure, imshow(g2)>>g3 = imadjust(f, [ ], [ ], 2) %使用gamma值>>figure, imshow(g3)2. 直方图处理与函数绘图图像的直方图定义为离散函数: h(rk) = nk绘制图像的直方图,函数imhist,语法为:h = imhist(f, b)f为输入图像,h为直方图h(rk),b是用于形成直方图的灰度级个数,若b省略,则默认值为256。
函数numel(f)可给出图像f的象素个数,有了它可归一化直方图: p = imhist(f, b) / numel(f)>>imhist(f) %MTALAB默认显示的图像f的直方图MATLAB中其它一些有代表性的绘制函数选项:(1) 用条形图绘制直方图函数bar(horz, v, width),其中,v是一个行(列)向量,它包含将被绘制的点;horz是一个与v有相同维数的向量,它包含水平标度值的增量;width是一个在0到1之间的数,表示竖条宽度,width值为1时,竖条较明显;当width的值为0时,竖条是简单的垂直线;width的默认值是0.8在绘制条形图时,我们通常会将水平轴等分为几段,以便降低水平轴的分辨率下面的语句将生成一副条形图,其水平轴以10个灰度级为一组:>>h = imhist(f)>>h1 = h(1:10:256)>>horz = 1:10:256>>bar(horz, h1)>>axis([0 255 0 15000]) %axis函数设置了水平轴和垂直轴的最大和最小值,语法为:%axis([horzmin horzmax vertmin vertmax]) >>set(gca, ‘xtick’, 0:50:255) >>set(gca, ‘ytick’, 0:2000:15000) %参数gca表示“获得当前轴”(即最终显示的图形的轴),参数xtick和%ytick按所示的间隔设置水平轴和的垂直轴的刻度。
%这两个语句中,坐标轴的取值范围和刻度线都是人工设定的使用函数%xlim(‘auto’)和ylim(‘auto’)可以自动设定坐标轴的取值范围和刻度线2) 用杆状图绘制直方图函数stem(horz, v, ‘color_linestyle_marker’, ‘fill’),参量color_linestyle_marker来自下表的三个值:颜色_线形_标记例如,stem(v, ‘r--s’)生成一副杆状图,其线条与标记点都为红色,线条为虚线,标记点为方形若使用fill,且标记点为圆形、方形、菱形,则标记点的颜色会是color指定的颜色默认颜色是black黑色,默认线条为solid实线,默认标记点的形状是circle圆形>>h = imhist(f)>>h1 = h(1:10:256)>>horz = 1:10:256>>stem(horz, h1, ‘fill’)>>axis([0 255 0 15000]) >>set(gca, ‘xtick’, 0:50:255) >>set(gca, ‘ytick’, 0:2000:15000)(3) 用曲线图绘制直方图函数plot(X, Y, ‘color_linestyle_marker’)绘制以X、Y元素为横、纵坐标的曲线。
plot(X, ‘color_linestyle_marker’)绘制以向量元素X的下标为横坐标、元素值为纵坐标的连续曲线plot的默认值为黑色无标记实线>>h = imhist(f)>>plot(h) %使用默认值>>axis([0 255 0 15000]) >>set(gca, ‘xtick’, 0:50:255) >>set(gca, ‘ytick’, 0:2000:15000)用以上四种方法绘制直方图得到的结果:3. 直方图均衡直方图均衡化由函数histeq实现,语法为: g = histeq(f, nlev)式中f是输入图像,nlev是为输出图像指定的灰度级,其默认值为64,我们要将nlev赋值为灰度级的最大可能数(通常为256)>>imshow(f)>>figure, imhist(f)>>ylim(‘auto’)>>g = histeq(f, 256) %进行直方图均衡化处理图像>>figure, imshow(g)>>figure, imhist(g) %显示出图像g的直方图>>ylim(‘auto’)四、 实验步骤与报告1. 对图像breast.bmp进行亮度变换函数imadjust实验,分别写出图像反转、灰度变换、gamma取0.5和2的MATLAB程序,观察对比结果。
2. 对图像breast.bmp进行直方图绘制,要求分别用上述4个绘图函数,写出各自的MATLAB程序3. 对图像pollen.bmp和lena.bmp进行图像增强——直方图均衡,对比增强前后的图像,并给出增强前后的直方图,写出MATLAB程序。