实验一 图像的显示运算与灰度变
实验一 图像的显示运算与灰度变换
实验目的
熟悉Matlab图像运算的基础——矩阵运算;
熟悉图像矩阵的显示方法(灰度、彩色);
熟悉亮度变换函数的使用
熟悉灰度图像的直方图的表示;
掌握图像增强的基本方法:灰度变换、直方图均衡;
实验内容
Matlab图像处理工具箱的初步练习。
练习图像读写命令imread和imwrite等函数进行图像文件显示、存储、运算。
灰度线性变换、灰度直方图、直方图均衡处理;
灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像增强。
实验原理
点击Matlab快捷键图标, 打开Matlab的工作窗(或指令窗)

Matlab的使用方式
①指令行操作之直接交互工作方式;
②使用matlab编程语言之程序设计方式.
交互方式的使用:
在Matlab工作窗中一般输入以下三种指令行:
①命令
②表达式
③赋值语句:变量 = 表达式;
基本命令:
键盘快捷键——上、下箭头的使用
clc %清除指令窗口
clear %从内存中清除变量和函数
clf %清除当前图
cd %改变或显示当前工作目录
基本函数:
矩阵索引
在Matlab中,矩阵可以很方便地用一列被方括号括起并用分号隔开的行向量表示。
例如:>>A = [1 2 3; 4 5 6; 7 8 9]
冒号操作符“:”的使用——枚举
例如:>>B = A(:, 2) %将第二列提取出来,相当于>>B = A(1:3, 2)
实验报告
1. 请自行输入一个矩阵并随意提取行列。
读取图像
imread %将图像读入MATLAB环境,语法为:
imread(‘filename’)
例:>>f = imread('E:\教学课件\医学图像处理\实验讲义\实验一\实验一用图像\lena_gray.bmp') %将图像二维矩阵赋给了二维数组f,单击左侧Workspace窗口,察看二维数组f的值。
size %确定矩阵的维数,语法为:
>>size(f)
下面的语法将自动确定一幅图像的大小,即将行和列的大小数值赋给矩阵[M,N]
>>[M,N] = size(f)
whos %列出图像(实际是数组形式存储)的基本信息
>>whos f
matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像
实验报告
2. 用imread函数读取实验一图像文件夹中图像,.bmp和.jpg格式各一个;
用imshow函数显示各图像;
并用size函数和whos函数查看图像信息,并记录(注明每个图像名称、信息内容)。
显示图像
imshow %显示图象,语法为:
>>imshow(f, G) %G是显示该图像的灰度级(数字),若将G省略,则默认的灰度%级是256。
>>imshow(f, [low high]) %将所有小于或等于low的值都显示为黑色,即为%0;所有大于或等于high的值显示为白色,即255。
>>imshow(f, [ ]) %能自动调整灰度级动态范围
impixelinfo %显示单个像素的亮度值(灰度级),处理彩色图像时,其RGB分量也显示出来。
实验报告
3. 用imshow(f)显示原图, imshow(f, [ ])函数显示图像“chest-xray”灰度级自动动态调整后的图像以及128灰度级图像,与原图像比较,观察发生了什么变化,并记录。
对图像“lena_gray”和“lena_color”使用impixelinfo函数,观察彩色和灰度图像的坐标点、灰度级大小。截图记录任一点的数据。
画图
plot %该函数将一组点用直线连接起来,形成曲线图
例:>>f = imread('E:\教学课件\医学图像处理\实验讲义\实验一\实验一用图像\rose.bmp')
>>g=f(257:768, 257:768)
>>imshow(g)
>>h=f(512, :)
>>plot(h) %显示rose图像中部一条水平扫描线,曲线图。

实验报告
4. 对图像“rose”使用plot函数,观察水平扫描线的曲线图。
保存图像
imwrite %将图像保存到磁盘上,语法为:
>>imwrite(f, ‘filename’) %若filename中不包含路径信息,则imwrite会将文%件保存到当前的工作目录中。
例:>>imwrite(f, 'E:\教学课件\医学图像处理\实验讲义\实验一\load.bmp')
另一种常用但只适用于JPEG(后缀为.jpg)格式图像的函数imwrite语法为:
>> imwrite(f, ‘filename’, ‘quality’, q) %q是一个在0到100之间的整数
例:>>imwrite(f, 'E:\教学课件\医学图像处理\实验讲义\实验一\load15.jpg', 'quality', 15)
实验报告
5. 用imwrite(f, ‘filename’)函数保存已经切割的bmp格式图像“rose”
用imwrite(f, ‘filename’, ‘quality’, q)函数保存jpg格式图像“bubbles”,q值分别取:50,25,15,5,0并做比较
6)函数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)
实验报告
6. 对图像breast.bmp进行亮度变换函数imadjust实验,分别写出图像反转、灰度变换、gamma取0.5和2的MATLAB程序,观察对比结果
7)直方图处理与函数绘图
图像的直方图定义为离散函数:
h(rk) = nk
绘制图像的直方图,函数imhist,语法为:
h = imhist(f, b)
f为输入图像,h为直方图h(rk),b是用于形成直方图的灰度级个数,若b省略,则默认值为256。
>>imhist(f) %MTALAB默认显示的图像f的直方图
函数numel(f)可给出图像f的象素个数,有了它可归一化直方图:
p = imhist(f, b) / numel(f)
MATLAB中其它一些有代表性的绘制函数选项:
用条形图绘制直方图
函数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’)可以自动设定坐标轴的取值范围和刻度线。
用杆状图绘制直方图
函数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)
用曲线图绘制直方图
函数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)
用以上四种方法绘制直方图得到的结果:

实验报告
7. 对图像breast.bmp进行直方图绘制,要求分别用上述4个绘图函数,写出各自的MATLAB程序。
8)直方图均衡
直方图均衡化由函数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’)
matlab中的ylim([4 78]:y轴上下限设定范围[4,78];
x轴上下限设定xlim([a,b]);
y轴上下限设定ylim([a,b])
注意:[a,b] a、分别代表坐标范围;

实验报告
8. 对图像pollen.bmp和lena.bmp进行图像增强——直方图均衡,对比增强前后的图像,并给出增强前后的直方图,写出MATLAB程序。
学习参考链接: