数字图像处理实验指导书Word格式.docx
《数字图像处理实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验指导书Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
8.以上各部分内容的综合处理
三、实验工具:
计算机.
四、实验考核方式:
考察实验报告,独立评定各次实验成绩,四个报告的平均成绩为最后实验成绩,实验成绩占课程成绩20%。
五、实验项目
实验一、Matlab语言、数字图像基本操作
一、实验目的与要求
1、掌握MATLAB语言的基本用法;
2、掌握MATLAB语言中图像存取方法;
3、掌握图像数据类型与数据类及其相互转换;
4、掌握在MATLAB中绘制灰度直方图的方法;
5、了解灰度直方图的均衡化的方法。
二、实验原理
MATLAB是研究、开发和分析的首选的计算工具,尤其对于技术计算来讲,是一种高性能语言。
它以易于应用的环境集成了计算、可视化和编程。
作为强大的科学计算平台,它几乎能够满足所有的计算需求。
MATLAB中补充了针对特定应用的工具箱(Toolbox),图像处理工具箱(IPT)是一个MATLAB的函数集,它扩展了MATLAB图像处理能力,信号处理、神经网络、模糊逻辑和小波工具箱有时候用于补充图像处理工具箱。
MATLAB对图像的处理功能主要集中在它的图像处理工具箱中。
图像处理工具箱是由一系列图像处理操作函数组成,可以进行诸如图像数据转换、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。
1、图像的矩阵表示
一幅图像可以被定义为一个二维函数f(x,y),其中x,y是空间坐标,f在任何点(x,y)处的振幅称为图像在该点的亮度。
灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合而成。
一幅图像在MATLAB中可以表示为矩阵
其中f(1,1)=f(0,0)
其中f为数字图像f在matlab中的表示,
MATLAB全称是MatrixLaboratory,最初用于矩阵处理,发展到现在,它在解决可用矩阵表示的问题时,可以公式化地解决许多技术计算问题。
由于图像经采样、量化后在计算机中的存储即数字图像就是一个矩阵,因此用MATLAB处理数字图像非常的方便。
在MATLAB中,矩阵以变量的形式来存储。
2、读取图像
使用imread可以将图像读入MATLAB环境,imread的语法为
imread(‘filename’)
其中,filename是一个含有图像文件全名的字符串(包括任何可用的扩展名,见下表),filename中可以包含路径,以便从指定的路径下读取图像。
例如,命令行
>
f=imread('
c:
\mydocument\lena.jpg'
)
将c盘根目录下mydocument文件夹中的JPEG图像lena读入图像数组f。
helpfunction
可以得到命令function的较为详细地使用说明,这里function指代matlab自带的任意一个函数。
下表为MATLAB6.5中imread和imwrite所支持的一些常用图像/图形格式,更多细节可参阅matlab帮助文档。
格式名称
描述
扩展符
TIFF
加标识的图像文件格式
.tif,.tiff
JPEG
联合图像专家组
.jpg
BMP
Windows位图
.bmp
GIF
图形交换格式(imwrite不支持)
.gif
PNG
可移植网络图形
.png
函数size可给出一幅图像的行数和列数,经常使用的格式:
[M,N]=size(f)
M=
1024
N=
1024
在图像处理编程时经常用到。
3、显示图像
MATLAB中图像一般是用函数imshow来显示,该函数基本语法如下:
imshow(f,G)
其中f是图像数据矩阵,G是显示该图像的灰度级数,省略时默认为256。
语法
imshow(f,[low,high])
会将所有小于等于low的值显示为黑色,所有大于等于high的值显示为白色。
界于low和high之间的值将以默认的级数显示为中等亮度值。
imshow(f,[])
会将low的值设置为f的最小值,会将high的值设置为f的最大值。
函数imshow的这一形式在显示一幅动态范围较小的图像或既有正值又有负值的图像时非常有用。
需要显示多幅图像时,可以使用figure语句,它的功能是打开一个新的图像显示窗口。
例:
命令
I=imread(‘rice.tif’);
Imshow(I);
J=imread(‘flowers.tif’);
figure,imshow(J);
将打开两个图形窗口,分别显示图像ric.tif与flowers.tif。
4、保存图像
使用imwrite可以将图像到磁盘上,imwrite的语法为
imwrite(f,‘filename’)
其中,filename是一个含有图像文件全名的字符串(包括任何可用的扩展名,见下表),filename中可以包含路径,以便将图像存到指定的路径,没有路径信息时图像将保存到当前工作目录。
imwrite(f,'
fafter.jpg'
)
将图像f存成当前目录下名字为fafter.jpg的图像文件。
5、数据类与图像类型
虽然我们处理的是整数坐标,但MATLAB中的像素值本身并不是整数,IPT支持的各种像素类有double、uint8、uint16、uint32、int8、int16、int32、single、char、logical。
MATLAB中所有的数值计算都可用double类进行。
IPT支持四种图像类型,即亮度图像、二值图像、索引图像、RGB图像,大多数单色图像的处理运算是通过二值图像或亮度图像来进行,当提到图像时,是指一幅‘数据类图像类型图像’,例'
uint8亮度图'
。
数据类间的转换语法为
B=data_class_name(A)
g=im2uint8(f)
将图像f数据类转换为8bitunsignedint型数据。
图像类和类型间的转换常用命令有
名称
将输入转换为
有效的输入图像数据类
im2uint8
uint8
logical,uint8,uint16,double
im2uint16
uint16
mat2gray
double
im2double
im2bw
logical
uint8,uint16,double
这些命令今后将经常使用。
6、imfinfo
imfinfo函数用于读取图像文件的有关信息,其语法格式为
imfinfo(filename,fmt)
imfinfo函数返回一个结构数组info,它反映了该图像的各方面信息,其主要数据包括:
文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图像的类型等。
imfinfoflowers.tif
ans=
Filename:
'
D:
\MATLAB6p5\toolbox\images\imdemos\flowers.tif'
FileModDate:
25-Oct-199622:
11:
10'
FileSize:
543962
Format:
tif'
FormatVersion:
[]
Width:
500
Height:
362
BitDepth:
24
ColorType:
truecolor'
FormatSignature:
[7373420]
ByteOrder:
little-endian'
NewSubfileType:
0
BitsPerSample:
[888]
Compression:
Uncompressed'
PhotometricInterpretation:
RGB'
StripOffsets:
[73x1double]
SamplesPerPixel:
3
RowsPerStrip:
5
StripByteCounts:
XResolution:
72
YResolution:
ResolutionUnit:
Inch'
Colormap:
PlanarConfiguration:
Chunky'
TileWidth:
TileLength:
TileOffsets:
TileByteCounts:
Orientation:
1
FillOrder:
GrayResponseUnit:
0.0100
MaxSampleValue:
[255255255]
MinSampleValue:
Thresholding:
ImageDescription:
[1x173char]
7、在图像处理工具箱中,处理直方图的核心函数是imhist,其基本语法为:
h=imhist(f,b)
其中,f为输入图像,h为其直方图h(rk),b是用于形成直方图的灰度级个数,默认为256,b=2时,将分别收集[0,127]内像素总数与[128,255]内像素总数。
p=imhist(f,b)/numel(f)
可简单地获得归一化直方图。
直方图还可以用条形图来绘制,函数格式为:
bar(horz,v,width)
其中,v是一个行向量,它包含将被绘制的点;
horz是一个与v有着相同维数的向量,它包含水平标度值的的增量;
width是一个值在0和1之间的数,用来表示条形图竖条的宽度。
直方图均衡化由IPT中的函数histeq实现,该函数的语法为:
g=histeq(f,newlev)
式中,f为输入图像,newlev是为输出图像指定的灰度级数,默认值为64,一般来说,我们将newlev赋值为灰度级的最大可能数量,这时往往可以得到较为正确的结果。
8、亮度变换
因为亮度变换函数仅仅取决于亮度的值,而与位置无关,所以亮度变换函数通常可写作如下形式:
s=T(r)
式中,r为变换前亮度,s为变换后亮度。
函数imadjust是进行亮度变换的基本IPT工具,其语法为:
g=imadjust(f,[low_inhigh_in],[low_outhigh_out],gamma)
此函数将图像f中亮度映射为g中的新值,即
[low_inhigh_in]→[low_outhigh_out]
三、实验任务:
复制图形文件lena.bmp、Fig3.15(a)1.jpg到MATLAB目录下work文件夹中。
1、
将MATLAB目录下work文件夹中的lena.bmp图像文件读出.用到imread,imfinfo等命令,观察一下图像数据,了解数字图像在MATLAB中的处理就是处理一个矩阵。
将这个图像显示出来,修改灰度矩阵的值,再将图像显示出来,观察图像颜色的变化。
2、
将Fig3.15(a)1.jpg图像文件读出,显示它的图像及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust函数将它的灰度值调整到[0,1]之间,并观察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别,总结imadjust的用法。
实验二、图像运算
本实验是综合性实验,考察图像点运算、代数运算、几何运算、图像缩放等基本知识及其应用。
需四个学时。
一、实验目的
1、理解图像点运算、代数运算、几何运算的基本定义和常见方法;
2、掌握在MTLAB中对图像进行直方图均衡化、空域滤波方法;
3、掌握在MATLAB中图像插值的方法;
4、运用MATLAB语言进行图像的插值缩放和插值旋转,进一步熟悉MATLAB语言的应用。
空间域方法是指对图像中每个像素值直接进行处理,改善图像显示效果的操作,主要方法有对比度增强、对比度拉伸、灰度变换、空域滤波等方法,空间域方法可以表示为
g(x,y)=T(f(x,y)).
其中,f(x,y)是输入图像,g(x,y)是处理后图像,T是对f的操作。
其定义在f(x,y)的邻域。
T还可以对输入图像集进行操作。
基本点处理方法:
1、基本灰度变换(线性的、对数的、幂次的):
T的最简单的形式
其中r,s分别是图像f(x,y)和g(x,y)在任意点(x,y)的灰度级,这时,空间域方法又称为点运算。
以下为常用图像点运算方法:
a)图像反转
s=L-1–r
其中图像灰度级范围为[L-1]
b)对数变换
s=clog(1+r)
其中,c是一个常数,并假设r>
=0
c)幂次变换
s=cr
其中,c和为正常数。
d)分段线性变换函数:
对比拉伸、灰度切割、位图切割
2、直方图处理
灰度直方图的定义:
设数字图像尺寸为M×
N,灰度级范围[0,L-1],rk是第k级灰度,nk是灰度级为rk的像素个数,则该图像的直方图为:
通常归一化为:
a)直方图均衡化
定义:
将原始图像的直方图变换为均匀分布的形式,从而增加像素灰度值的动态范围,达到增强图像整体对比度的效果。
方法:
计算累计分布函数(CumulativeDistributionFunction,CDF),并将其作为灰度变换函数s=T(r),从而将原始图像的关于灰度r的分布直方图,转换为关于灰度s的均匀分布。
原理:
从连续图像的情形出发加以说明,一幅图像的灰度级r可被视为[0,1]的随机变量。
对于连续图像,常见的均衡化变换函数是:
由上式对r求导可得:
对于离散图像,变换函数如下:
b)直方图匹配
指定希望处理的图像所具有的直方图的形状的直方图的图像处理方法称为直方图匹配或直方图规定化处理。
原理与操作方法参考教材p74~80。
3.算术/逻辑操作增强
算术运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。
对于相加和相乘的情形,可能不止有两幅图像参加运算。
在一般情况下,输入情况之一可能为常数。
四种图像处理代数运算的数学表达式如下:
C(x,y)=A(x,y)+B(x,y)
C(x,y)=A(x,y)-B(x,y)
C(x,y)=A(x,y)*B(x,y)
C(x,y)=A(x,y)/B(x,y)
其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。
还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。
逻辑运算主要用来从一幅图像中提取子图像。
在四种算术操作中,减法和加法在图像增强中最为有用。
两幅图像相除,可看作用一幅的取反图像与另一幅相乘。
减法处理的最主要作用就是增强两幅图像的差异。
图像平均处理可以减少噪声。
4.插值
插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。
最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。
最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。
当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。
双线性插值法的输出像素值是它在输入图像中2×
2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。
双三次插值的插值核为三次函数,其插值邻域的大小为4×
4。
它的插值效果比较好,但相应的计算量也比较大。
MATLAB图像处理工具箱中的函数imresize可以用上述的3种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。
Imresize函数的语法格式为:
B=imresize(A,m,method)
参数method用于指定插值的方法,可选用的值为'
nearest'
(最邻近法),'
bilinear'
(双线性插值),'
bicubic'
(双三次插值),默认为'
B=imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。
I=imread('
ic.tif'
);
J=imresize(I,1.25);
imshow(I),title('
原图像'
figure,imshow(J),title('
放大后的图像'
在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。
Imrotate的语法格式为:
B=imrotate(A,angle,method)
函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选用的值为'
一般说来旋转后的图像会比原图大,超出原图部分值为0。
rice.tif'
J=imrotate(I,30,'
imshow(I);
title('
旋转后的图像'
5.空间滤波器
某些领域处理工作是操作领域的图像像素值以及相应的领域有相同维数的子图像的值。
这些子图像可以被称为滤波器。
在滤波器子图像中的值是系数值而不是像素值。
3×
3滤波响应R为:
m×
n滤波响应R为:
滤波器类型有:
平滑线性滤波器、统计排序滤波器、锐化空间滤波器等。
6.往一幅图像中加入随机噪声,并通过多次相加求平均的方法消除所加入的噪声。
在MATLAB中提供了给图像加入噪声的函数imnoise,imnoise的语法格式:
J=imnoise(I,type)、J=imnoise(I,type,parameters)
其中J=imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。
参数type和parameters用于确定噪声的类型和相应的参数。
下面的命令是对图像lena.jpg分别加入高斯噪声、椒盐噪声和乘性噪声。
I=imread('
lena.jpg'
J1=imnoise(I,'
gaussian'
0,0.02);
J2=imnoise(I,'
salt&
pepper'
0.02);
J3=imnoise(I,'
speckle'
subplot(2,2,1),imshow(I),title('
subplot(2,2,2),imshow(J1),title('
加高斯噪声'
subplot(2,2,3),imshow(J2),title('
加椒盐噪声'
subplot(2,2,4),imshow(J3),title('
加乘性噪声'
在上面的例子中使用了一个函数subplot。
其作用就是将多幅图像显示再同一幅图像显示对话框中。
其语法格式为:
subplot(m,n,p)
其作用就是将一个图像显示对话框分成m行n列,并显示第p幅图像。
在MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。
代数运算中为了仿真若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。
MATLAB中FOREND循环的用法如下:
forend循环这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:
forvariable=expr
statements
end
举例如下:
%一个简单的for循环的例子。
fori=1:
10;
y(i)=i;
end;
y%显示y的结果
y=
12345678910
在实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。
因此读出的图像数据不能直接进行相加求平均,因此必须使用一个函数将图像数据转换成双精度型数据。
MATLAB中提供了im2double函数,其语法格式为:
I2=im2double(I1)
其中I1是输入的图像数据,它可能是unit8或unit16型数据,通过函数的变化输出I2为一个double型数据,这样两图像数据就可以方便的进行相加等代数运算。
这点对于初学者很容易忽略。
作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。
在图像中我们给图像加的是均值为0,方差为0.02的高斯噪声,将图像相加了一百遍,再求其平均值。
程序如下:
%例图像加噪声再通过多次相加求平均的方法祛除噪声
[I,M]=imread('
eight.tif'
J=imnoise(I,'
subplot(1,2,1),imshow(I,M),title('
subplot(1,2,2),imshow(J,M),title('
加噪声后图像'
K=zeros(242,308);
fori=1:
100
J=imnoise(I,'
J1=im2double(J);
K=K+J1;
K=K/100;
%求图像的平均
figure,imshow(K),title('
相加求平均后的图像'
三、实验任务