【转】Matlab语言、数字图象基本操作
2009-11-08 10:41
225 查看
一、实验目的
%fo-e
BJ$p0
1、复习MATLAB语言的基本用法;
a*vK
z&Z0
2、掌握MATLAB语言中图象数据与信息的读取方法;
n.bx/ix0
3、掌握在MATLAB中绘制灰度直方图的方法,了解灰度直方图的均衡化的方法。百思博客:~/E2YR
zF#s+e
二、实验原理
:Bj2fm4|(w7v0Vs0
MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。作为强大的科学计算平台,它几乎能够满足所有的计算需求。百思博客s;ui
_2Bgfp
MATLAB
软件具有很强的开放性和适用性。在保持内核不变的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。目前,MATLAB已
经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己
的一席之地。在实验中我们主要用到MATLAB提供图象处理工具箱(Image Processing Toolbox)。
w.qG A"D�o.v0
1、MATLAB与数字图像处理百思博客LM,j�?V
MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件
,
从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。这一特点也就决定了
MATLAB在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进
行数字化,这就是图像的采样和量化的过程。二维图像进行均匀采样,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来
描述该数字图像是最直观最简便的了。而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。
2Uo'ED./G?T5H0
MATLAB
支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、
XWD、CUR、ICO等图像文件格式的读,写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱
(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波
器设计、图像变换、图像分析
与图像增强、二值图像操作以及形态学处理等图像处理操作。
(o[aH1GY0
2、MATLAB语言的基本操作
d
K.~VO0
MATLAB
语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独
一个数据可以认为是一维向量);其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。针对数字图象处理的需要,可以重点掌握以下几个内容:矩
阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、
减、点乘等)
Y1|%G1cY0
以下主要介绍一下如何读取矩阵的指定行或指定列,举例说明:
)G
P@Tk2Ac0
x=4:6 %产生一个一维数组,范围从4到6,步长为1百思博客vI'mR%Rp0wZ
x =
G5@gOV-C.N4Vv0
4 5 6百思博客/;/0S;~!{
插入:通过对x进行插入运算创建矩阵A
i1_
Dx[Ls0
>> A=[x-3;x;x+3] %当然也可以用别的方法产生A矩阵此处只作为示例
D9vL;W
K5zT*u'Y*l0
A =
$[z%a�Z
b.u2TR'@6a0
1 2 3
%xs7GyUA[0
4 5 6
[V7IA
vy
jM1A0
7 8 9
$[RGyN*L�l0M"j0
提取:提取A的前两行和后两列形成矩阵C。百思博客/SdT3[&DF
>> C=A(1:2,2:3)
.Gsv{2X%{0
C =
M,zL+VO{Yy0
2 3
fEu;wh0
5 6百思博客q[K1vljj7a
置零:将矩阵A 的第二行第二列的元素置零百思博客#MD+D /)Sy c&}
>> A(2,2)=0百思博客-B(j-GP3W9}5Q:@#u
A =
#Gi
l+JLS8c#SoQl@0
1 2 3
u8X!Q6F(E{
D$~G.^0
4 0 6百思博客"c;X+LNb6T G
7 8 9百思博客B]#[I^
T f}6zK
将矩阵A的第一列全置1
F
W4v(^
{t�}al0
A(:,1)=1
E
V.r'tFX0
A =
jg6fo U0
1 2 3
E&` D$YL6A5oz~0
1 0 6
~v9L6~*Y.}a#U0F;J0
1 8 9
*a{Uz"R&s0
强调一下矩阵的乘法与矩阵的点乘的不同,举例说明:百思博客'_(vX1/*e
A=eye(2) %产生二维单位矩阵
$oEIu_E0
A =
L8N9lGF!a5K0
1 0
/p/E8sc idW6g0
0 1
6Tn[6z Aa"a S0
>> B=[1,2;3,4] %直接法输入矩阵
U]1t}Ir!X0
B =
[{]F$v*z8VUn0
1 2百思博客De-u$Do'b
IR
3 4百思博客b{9ND+K8@,PU
>> A+B %求A与B的和(符合矩阵求和原则)
&L*Sc]/CV.F4CPO0
ans =百思博客D+^qpa]2zZ:w!Ub
2 2百思博客VxX
E!V:w
3 5
|c:v$N-mG]
H#m0
>> A.*B %求A与B的点积(即两矩阵中对应元素分别相乘百思博客"/*yZ"m9nl
ans =百思博客)e5oh cc D*UY#b
1 0
,mo.V1/a0
0 4百思博客"h
s"?u#c3E)J
>> A*B %求A与B的乘积(符合矩阵乘积原则A的列数与B的行数相等)百思博客-m:c!_0`"wT
ans =百思博客#N�k/
_#n�/ S
1 2
o)aW&R3Y(u
r0
3 4百思博客zlLkU1E:F7Be
注意:请大家在E盘建一个目录(imp),在每次启动时都要将这个目录加入到MATLAB的搜索路径中,添加的方法为File----Set Path----Tool---Add Path
ZUh_c9g&p0
3、MATLAB中图象数据的读取
K}im0U)J;}:lq0
A、 imread百思博客~.Q�g*x!Q8e3iu[
imread函数用于读入各种图象文件,其一般的用法为
b*sk#dWQ&v!Y]F8i0
[X,MAP]=imread(‘filename’,‘fmt’)
;^'/
E:~`@0
其中,X,MAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename为读取的图象文件(可以加上文件的路径)。百思博客.dPa)v
gJH
例:[X,MAP]=imread(’flowers.tif’,’tif’);百思博客"G,yzne}
B、 imwrite百思博客yIqH({j|
imwrite函数用于输出图象,其语法格式为:
'auu3m1?3bu0
imwrite(X,map,filename,fmt)按照fmt指定的格式将图象数据矩阵X和调色板map写入文件filename。百思博客&R#n:I
~Dn:`(o9be
C、 imfinfo百思博客+H'/1{9|3lU]A
imfinfo函数用于读取图象文件的有关信息,其语法格式为百思博客IR7LJij1y*X
imfinfo(filename,fmt)
p P w5ra5R.^0
imfinfo函数返回一个结构info,它反映了该图象的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图象的类型等。
^$Od
eH6P0
例:
x9_I6Q/v,{7I0
imfinfo('rice.tif')百思博客v X4wO8S)R?B4q
ans =
$zdg9MAw*M(Hg0
Filename: 'C:/MATLAB6p5/toolbox/images/imdemos/rice.tif'百思博客d
y/Awc5ioxv
FileModDate: '26-Oct-1996 06:11:58'
#UwJELp+Gs0
FileSize: 65966
jF n9R?@Hd0
Format: 'tif'百思博客 K7QM`j)]9g:O2/Uf
FormatVersion: []
JuO;b;w-k0
Width: 256百思博客^(i
c7k}#}3e
Height: 256
?vz�iq P9{0
BitDepth: 8百思博客.Q[y^&x(D*j|i[
ColorType: 'grayscale'百思博客bPKzx%`�bFJY
FormatSignature: [73 73 42 0]百思博客@#g-yeD/n
ByteOrder: 'little-endian'百思博客!O-O~h]u
NewSubfileType: 0
S{6TWU0
BitsPerSample: 8百思博客)HKC8{$_gg
Compression: 'Uncompressed'
o9](F TMAN0
PhotometricInterpretation: 'BlackIsZero'百思博客
O2]?sv8D
StripOffsets: [8x1 double]
5{3OCWe
/0
SamplesPerPixel: 1
LavZU/~r/wp0
RowsPerStrip: 32百思博客N$[g#RqL3~ym
p0zE
StripByteCounts: [8x1 double]百思博客i.T~` J,U8f+j{ }5x
XResolution: 72
x7`.R*baJ(t0
YResolution: 72百思博客b:M
H)Ti6X9Z
ResolutionUnit: 'Inch'百思博客3^[rB%xx,t&^:[c-G
Colormap: []
ew_A/.W C0
PlanarConfiguration: 'Chunky'百思博客w{t,e&c
TileWidth: []
[7w`%qW1cc
X2c0
TileLength: []百思博客z%]W0L#zKp:{2^
TileOffsets: []百思博客g bKo&K$nx-]g"q
TileByteCounts: []
1_O,Rp8i7A/0
Orientation: 1
d+/.O&D+o+Gh0
FillOrder: 1
0t o6/}K&pfr1ex0
GrayResponseUnit: 0.0100百思博客iT(@4n$W}wj
MaxSamplev alue: 255
*Vv{5v1a0
MinSamplev alue: 0百思博客 K~4Lz�P6p /oD;U
Thresholding: 1百思博客|*S!s9~f@7[(V�]A
ImageDescription: [1x166 char]
,N#fi@`&Y1LS0
4、 MATLAB中图象文件的显示百思博客`I+Vs(l4?
bm
imshow百思博客'sni*_/d}&W
imshow函数是最常用的显示各种图象的函数,其语法如下:百思博客0tJ^NV
imshow(X,map)
gDE5uf6O0
其中X是图象数据矩阵,map是其对应的颜色矩阵,若进行图象处理后不知道图象数据的值域可以用[]代替map。百思博客[:v/E$F5Oa`8B$j
需要显示多幅图象时,可以使用figure语句,它的功能就是重新打开一个图象显示窗口。百思博客9h4uZ0T5ub!p0n2Kx$U-X2Q
例:百思博客$/
H#m,x#/:h
I=imread(‘rice.tif’);百思博客?W
rv&CeT
Imshow(I);百思博客3fo:~
k,m Kl
J=imread(‘flowers.tif’);
H)TM.V[&M)nSI0
figure,imshow(J);百思博客d1K
t
r YM6`c
5、 MATLAB中灰度直方图的显示
![P8e_iV0MD�y
qu0
MATLAB图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist函数的语法格式为:百思博客#UFtQ9Mw&mN
imhist(I,n)百思博客#sv-z1q2R1u
imhist(X,map)百思博客W;^
@n
k9r
其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。百思博客c8|9KV#k^.c
例:
5[Fg;I`
j0
I = imread('rice.tif');
&{u(KFx6}ui0
imshow(I)
$^Su UhM'?y2b R0
figure, imhist(I)
`:D�Z@M}4BMP0
6、 对比度增强
&O!PU]6p0
如果原图象f(x,y)的灰度范围是[m,M],我们希望调整后的图象g(x,y)的灰度范围是[n,N],那么下述变换,,就可以实现这一要求。百思博客
{;N/| yF-ts
MATLAB图象处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强。Imadjust函数的语法格式为:百思博客K:o*d6MT
J = imadjust(I,[low_in high_in],[low_out high_out])
+EF7g&w"~"I'z4i0
J = imadjust(I,
[low_in high_in],[low_out high_out])返回图象I经过直方图调整后的图象J,[low_in high_in]为原
图象中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围。百思博客6W
`Yh6e
例:百思博客$@#Ih`CoH$Yq
I = imread('pout.tif');百思博客#B#H5/6gy.k
q
J = imadjust(I,[0.3 0.7],[]);
j/I2g'o
o2vmM�L0
imshow(I), figure, imshow(J)百思博客m+O[9D�mR
三、实验要求
Zo-oY'?%B0
copy两个图形文件girl1.bmp和girl2.bmp到MATLAB目录下work文件夹中。百思博客c'x-g
e%`b*_;QC4D!}
1、 将
MATLAB目录下work文件夹中的girl.bmp图象文件读出.用到imread,imfinfo等文件,观察一下图象数据,了解一下数字图象在
MATLAB中的处理就是处理一个矩阵。将这个图象显示出来(用imshow),尝试修改map颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。百思博客e{,JZ
CH"vq
2、 将
MATLAB目录下work文件夹中的girl2.bmp图象文件读出,显示它的图象及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust
函数将它的灰度值调整到[0,1]之间,并观察调整后的图象与原图象的差别,调整后的灰度直方图与原灰度直方图的区别。百思博客n%|O{gl"x
|]
[Qc7d [}0
实验二 图像运算
百思博客5w3U%uUaWw%O
-hN�kA&q:}0QX0
本实验是综合性实验,涵盖Matlab程序设计、图像点运算、代数运算、几何运算等多章基本知识及其应用。需四个学时。
3?
w1B1B3F�V+Uu s0
一、实验目的与要求百思博客-i!~&o{0I�Uc
理解图像点运算、代数运算、几何运算的基本定义和常见方法;百思博客k~6TB*M3X
掌握在MTLAB中对图像进行点运算、代数运算、几何运算的方法;百思博客'}U_l'd9h
掌握在MATLAB中进行插值的方法
C4`,[:v/Z}-`_0
运用MATLAB语言进行图像的插值缩放和插值旋转百思博客
T.U7Tx(i'KB3qY
进一步熟悉了解MATLAB语言的应用。
e7Q0M
f&POF5z0
二、实验原理与功能
FTk5xUlw0
点运算是通过对图像中每个像素值进行计算,改善图像显示效果的操作,也称对比度增强,对比度拉伸,灰度变换.可以表示为B(x,y)=f(A(x,y)).进行逐点运算,输入映射为输出,不改变
图像像素的空间关系.百思博客5IDuJa
代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。
#OX2A.HG0
四种图像处理代数运算的数学表达式如下:
7H`m&Vy#Q"b0
C(x,y)=A(x,y)+B(x,y)百思博客t.l-]o-@B/
C(x,y)=A(x,y)-B(x,y)
M)A*E p%FR0
C(x,y)=A(x,y)*B(x,y)
mRP%^1Q8ge$Ll)Y0
C(x,y)=A(x,y)/B(x,y)
xD?
g!cA3bI^3h0
其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。
,_E#X8DE&s1m+af4z_0
在
MATLAB中,我们可以用函数简单的得到数字图像的图像数据矩阵(即A(x,y)和B(x,y)),有了这些矩阵后我们只要适当的设计代数运算的形式并
写出方程,就可以得到一个输出图像的矩阵(即C(x,y))图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪
声的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则过累积很慢。对M幅图像进行平均,使图像中每一点的平方信
噪比提高了M倍幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。
z1nQH
Bg]0
几
何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。一个几何运算需要两个独立的算法。首先,需要一个算法来定义空
间变换本身,用它来描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动”。同时,还需要一个用于灰度插值的算法,这是因为,在一般情况
下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。
MATLAB提供了一些函数实现这些功能。百思博客U)C} P~z
插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。百思博客,Vei'r6A
最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。最近邻插值是工具箱函数默认使用
的插值方法,而且这种插值方法的运算量非常小。当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。百思博客]-^&qc$x!P7w
双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。
1`@Eid M-P0
双三次插值的插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量也比较大。百思博客b7ym`l1T.@p
MATLAB图像处理工具箱中的函数imresize可以用上述的3种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。
HF:t(BY"B0
Imresize函数的语法格式为:
CX_"R/r5t�EW!yv8Y+DO0
B = imresize(A,m,method)
0j-r+cBh(Tq,w0
参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。
dFRc"E:n8F6C0
B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。
8`'B]P1h(o0
三 实验设计例子与调试百思博客O&F9{4bk9Yg
1. 完成人为的往一幅图像中加入噪声,并通过多次相加求平均的方法消除所加入的噪声。百思博客;@#Ds{(Ekq ]
在MATLAB中提供了给图像加入噪声的函数imnoise百思博客9Xocr[;z/
imnoise的语法格式为
'S1f/&vZ.d3N0
J = imnoise(I,type)
9Q(y(V+]4v$e(][&|)H0
J = imnoise(I,type,parameters)百思博客 b*NX_K1do
其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。
A
N`-Ac `�N0
参数type和parameters用于确定噪声的类型和相应的参数
。
s,PPr:GuXP/0
下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:
XK8@2M+i1u(O�h o0
例:百思博客,]W
`buJ
I=imread('eight.tif');
6W`�Vbd#kE3/c3pr0
J1=imnoise(I,'gaussian',0,0.02);百思博客1QL Czy&Z5b
J2=imnoise(I,'salt & pepper',0.02);
/Uv^KY#G(j6a3mCxM0
J3=imnoise(I,'speckle',0.02);百思博客XB2U
`;SOx
subplot(2,2,1),imshow(I),title('原图像');百思博客o[S8n4?R0H
subplot(2,2,2),imshow(J1),title('加高斯噪声');
7CS3W7k
^h}M2X0
subplot(2,2,3),imshow(J2),title('加椒盐噪声');百思博客!p9CU4bu
Zz*d [h
subplot(2,2,4),imshow(J3),title('加乘性噪声');
@7WC#GrT0
在上面的例子中使用了一个函数subplot。其作用就是将多幅图像显示再同一幅图像显示对话框中。其语法格式为:
puR+Fw0
subplot(m,n,p)
+S
Io2_2y+yiCQi0
其作用就是将一个图像显示对话框分成m行n列,并显示第p幅图像。百思博客&dC5N!mD|�oP
在MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。
e6?4ug+b0
代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR END循环的用法如下:
MM r-FK
zM0
for end循环百思博客8_%`/B g}V
这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:
@ED6qv&^
EWJv0
for variable = expression
cs2rLwSpXk0
statements百思博客lO J1Pv,z$y%X
end
/"e,j8j6wHlS0
举例如下:
'~CeUQSYD0
例:
iLO9xhB0
%一个简单的for循环的例子。百思博客Arf#sK
eE
for i=1:10;百思博客T)lO5c2B"ld
y(i)=i;
8hx#u([D$zL!yU,f0
end;
4o.}"Au
VX
vm1P%Y[0
y %显示y的结果
(Aum
te roi0
y =百思博客Y+Y*_]1e2A
^
1 2 3 4 5 6 7 8 9 10
n�Y7vN!cOE%r0
为
了得到最大的速度,在for循环被执行之前,应预先分配数组。例如前面所考虑的第一种情况,在for循环内每执行一次命令,向量y的维数增加1。这样就使
得MATLAB每通过一次循环对y分配更多的内存,这当然要花费一定的时间。为了可以不执行这个步骤,for循环的例子应重写为:
+E9Jv&a$b
f0
y=zeros(1,10);百思博客D]ss5h%O%V!v
for i=1:10;
8KDw6?0BgV$?nN0
y(i)=i;
g+cU/Az6@T_0
end;
XM,` n/n S'Ji0
y
*WL.OJ9Z3xL0
在
实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此读出的
图像数据不能直接进行相加求平均,因此必须使用一个函数将图像数据转换成双精度型数据。MATLAB中提供了这样的函数:
+^&W3^6v:AL!O'M@0
im2double函数,其语法格式为:
,u1c4sm/]`(PaA0
I2 = im2double(I1)百思博客&f/H:k:o E;aT1]
其中I1是输入的图像数据,它可能是unit8或unit16型数据,通过函数的变化输出I2为一个double型数据,这样两图像数据就可以方便的进行相加等代数运算.百思博客K`wA�Zx[-^
作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。在图像中我们给图像加的是均值为0,方差为0.02的高斯噪声,将图像相加了一百遍,再求其平均值。程序如下:
0Ep/N3K#fa@n0
%例图像加噪声再通过多次相加求平均的方法祛除噪声百思博客A
^(}khu
[I,M]=imread('eight.tif');百思博客+[S t4};M
J=imnoise(I,'gaussian',0,0.02);百思博客5[As9^Ne
subplot(1,2,1),imshow(I,M),title('原图像');
'g#ua
Sa�rtY0
subplot(1,2,2),imshow(J,M),title('加噪声后图像');百思博客M%F M
G*L0Q7dq,cq/WW
K=zeros(242,308);百思博客o|se7|
for i=1:100
E6s2Z4{z5h0
J=imnoise(I,'gaussian',0,0.02);百思博客*E]+THJPN
Nj�C
J1=im2double(J);
#c*uv*R9f[0
K=K+J1;
.I]|)@]-I6m0
end
K#]3Tqt5?�d0
K=K/100; %求图像的平均
*^:V
mR$F*eQ0
figure;imshow(K),title('相加求平均后的图像');
^H0q8?O$KBS$IS x En0
例子2百思博客'X(TK| wAx
Imresize函数的语法格式为:百思博客@3u|?(X'Y^f}S
B = imresize(A,m,method)百思博客WRF9L!C
这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。
!H.?r#mA3P*^Y7FA
B0
B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。百思博客BR$a(F.D
例:
1os@5x7M/m0z+^+H0
I=imread('ic.tif');
dMmO4Sj/0
J = imresize(I,1.25);
o'T!U^9Scwlir0
imshow(I),title('原图像')
I+q)AdIz5o;Y-s%q$vZ0
figure,imshow(J),title('放大后的图像')
B7VTYO'e4t7bV0
在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。
Zw/2cKp-PYF0
Imrotate的语法格式为:百思博客C/lvA*{4z#A
B = imrotate(A,angle,method
S$x&zh d$E7s0
函
数imrotate对图像进行旋转,参数method用于指定插值的方法,,可选用的值为'nearest'(最邻近法),'bilinear'(双线性
插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。百思博客$Z4f8I9y&a#Q/S
例:
&m#k!hjW*/5Z8PL0
I=imread('rice.tif');
G[M7|/pK H0
J=imrotate(I,30,'bilinear');
m*BMqNPa(@A X0
imshow(I);title('原图像')
)P$EE
vJ�iPZ0
figure,imshow(J),title('旋转后的图像')
M3WWJY
N2m0
四、实验任务
c-sN!k
Okg0
实验要求设计一个程序完成下列要求:
http://blog.baisi.net/?uid-110653-action-viewspace-itemid-936
百思博客&g
百思博客&g
%fo-e
BJ$p0
1、复习MATLAB语言的基本用法;
a*vK
z&Z0
2、掌握MATLAB语言中图象数据与信息的读取方法;
n.bx/ix0
3、掌握在MATLAB中绘制灰度直方图的方法,了解灰度直方图的均衡化的方法。百思博客:~/E2YR
zF#s+e
二、实验原理
:Bj2fm4|(w7v0Vs0
MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。作为强大的科学计算平台,它几乎能够满足所有的计算需求。百思博客s;ui
_2Bgfp
MATLAB
软件具有很强的开放性和适用性。在保持内核不变的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。目前,MATLAB已
经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己
的一席之地。在实验中我们主要用到MATLAB提供图象处理工具箱(Image Processing Toolbox)。
w.qG A"D�o.v0
1、MATLAB与数字图像处理百思博客LM,j�?V
MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件
,
从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。这一特点也就决定了
MATLAB在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进
行数字化,这就是图像的采样和量化的过程。二维图像进行均匀采样,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来
描述该数字图像是最直观最简便的了。而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。
2Uo'ED./G?T5H0
MATLAB
支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、
XWD、CUR、ICO等图像文件格式的读,写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱
(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波
器设计、图像变换、图像分析
与图像增强、二值图像操作以及形态学处理等图像处理操作。
(o[aH1GY0
2、MATLAB语言的基本操作
d
K.~VO0
MATLAB
语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独
一个数据可以认为是一维向量);其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。针对数字图象处理的需要,可以重点掌握以下几个内容:矩
阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、
减、点乘等)
Y1|%G1cY0
以下主要介绍一下如何读取矩阵的指定行或指定列,举例说明:
)G
P@Tk2Ac0
x=4:6 %产生一个一维数组,范围从4到6,步长为1百思博客vI'mR%Rp0wZ
x =
G5@gOV-C.N4Vv0
4 5 6百思博客/;/0S;~!{
插入:通过对x进行插入运算创建矩阵A
i1_
Dx[Ls0
>> A=[x-3;x;x+3] %当然也可以用别的方法产生A矩阵此处只作为示例
D9vL;W
K5zT*u'Y*l0
A =
$[z%a�Z
b.u2TR'@6a0
1 2 3
%xs7GyUA[0
4 5 6
[V7IA
vy
jM1A0
7 8 9
$[RGyN*L�l0M"j0
提取:提取A的前两行和后两列形成矩阵C。百思博客/SdT3[&DF
>> C=A(1:2,2:3)
.Gsv{2X%{0
C =
M,zL+VO{Yy0
2 3
fEu;wh0
5 6百思博客q[K1vljj7a
置零:将矩阵A 的第二行第二列的元素置零百思博客#MD+D /)Sy c&}
>> A(2,2)=0百思博客-B(j-GP3W9}5Q:@#u
A =
#Gi
l+JLS8c#SoQl@0
1 2 3
u8X!Q6F(E{
D$~G.^0
4 0 6百思博客"c;X+LNb6T G
7 8 9百思博客B]#[I^
T f}6zK
将矩阵A的第一列全置1
F
W4v(^
{t�}al0
A(:,1)=1
E
V.r'tFX0
A =
jg6fo U0
1 2 3
E&` D$YL6A5oz~0
1 0 6
~v9L6~*Y.}a#U0F;J0
1 8 9
*a{Uz"R&s0
强调一下矩阵的乘法与矩阵的点乘的不同,举例说明:百思博客'_(vX1/*e
A=eye(2) %产生二维单位矩阵
$oEIu_E0
A =
L8N9lGF!a5K0
1 0
/p/E8sc idW6g0
0 1
6Tn[6z Aa"a S0
>> B=[1,2;3,4] %直接法输入矩阵
U]1t}Ir!X0
B =
[{]F$v*z8VUn0
1 2百思博客De-u$Do'b
IR
3 4百思博客b{9ND+K8@,PU
>> A+B %求A与B的和(符合矩阵求和原则)
&L*Sc]/CV.F4CPO0
ans =百思博客D+^qpa]2zZ:w!Ub
2 2百思博客VxX
E!V:w
3 5
|c:v$N-mG]
H#m0
>> A.*B %求A与B的点积(即两矩阵中对应元素分别相乘百思博客"/*yZ"m9nl
ans =百思博客)e5oh cc D*UY#b
1 0
,mo.V1/a0
0 4百思博客"h
s"?u#c3E)J
>> A*B %求A与B的乘积(符合矩阵乘积原则A的列数与B的行数相等)百思博客-m:c!_0`"wT
ans =百思博客#N�k/
_#n�/ S
1 2
o)aW&R3Y(u
r0
3 4百思博客zlLkU1E:F7Be
注意:请大家在E盘建一个目录(imp),在每次启动时都要将这个目录加入到MATLAB的搜索路径中,添加的方法为File----Set Path----Tool---Add Path
ZUh_c9g&p0
3、MATLAB中图象数据的读取
K}im0U)J;}:lq0
A、 imread百思博客~.Q�g*x!Q8e3iu[
imread函数用于读入各种图象文件,其一般的用法为
b*sk#dWQ&v!Y]F8i0
[X,MAP]=imread(‘filename’,‘fmt’)
;^'/
E:~`@0
其中,X,MAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename为读取的图象文件(可以加上文件的路径)。百思博客.dPa)v
gJH
例:[X,MAP]=imread(’flowers.tif’,’tif’);百思博客"G,yzne}
B、 imwrite百思博客yIqH({j|
imwrite函数用于输出图象,其语法格式为:
'auu3m1?3bu0
imwrite(X,map,filename,fmt)按照fmt指定的格式将图象数据矩阵X和调色板map写入文件filename。百思博客&R#n:I
~Dn:`(o9be
C、 imfinfo百思博客+H'/1{9|3lU]A
imfinfo函数用于读取图象文件的有关信息,其语法格式为百思博客IR7LJij1y*X
imfinfo(filename,fmt)
p P w5ra5R.^0
imfinfo函数返回一个结构info,它反映了该图象的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图象的类型等。
^$Od
eH6P0
例:
x9_I6Q/v,{7I0
imfinfo('rice.tif')百思博客v X4wO8S)R?B4q
ans =
$zdg9MAw*M(Hg0
Filename: 'C:/MATLAB6p5/toolbox/images/imdemos/rice.tif'百思博客d
y/Awc5ioxv
FileModDate: '26-Oct-1996 06:11:58'
#UwJELp+Gs0
FileSize: 65966
jF n9R?@Hd0
Format: 'tif'百思博客 K7QM`j)]9g:O2/Uf
FormatVersion: []
JuO;b;w-k0
Width: 256百思博客^(i
c7k}#}3e
Height: 256
?vz�iq P9{0
BitDepth: 8百思博客.Q[y^&x(D*j|i[
ColorType: 'grayscale'百思博客bPKzx%`�bFJY
FormatSignature: [73 73 42 0]百思博客@#g-yeD/n
ByteOrder: 'little-endian'百思博客!O-O~h]u
NewSubfileType: 0
S{6TWU0
BitsPerSample: 8百思博客)HKC8{$_gg
Compression: 'Uncompressed'
o9](F TMAN0
PhotometricInterpretation: 'BlackIsZero'百思博客
O2]?sv8D
StripOffsets: [8x1 double]
5{3OCWe
/0
SamplesPerPixel: 1
LavZU/~r/wp0
RowsPerStrip: 32百思博客N$[g#RqL3~ym
p0zE
StripByteCounts: [8x1 double]百思博客i.T~` J,U8f+j{ }5x
XResolution: 72
x7`.R*baJ(t0
YResolution: 72百思博客b:M
H)Ti6X9Z
ResolutionUnit: 'Inch'百思博客3^[rB%xx,t&^:[c-G
Colormap: []
ew_A/.W C0
PlanarConfiguration: 'Chunky'百思博客w{t,e&c
TileWidth: []
[7w`%qW1cc
X2c0
TileLength: []百思博客z%]W0L#zKp:{2^
TileOffsets: []百思博客g bKo&K$nx-]g"q
TileByteCounts: []
1_O,Rp8i7A/0
Orientation: 1
d+/.O&D+o+Gh0
FillOrder: 1
0t o6/}K&pfr1ex0
GrayResponseUnit: 0.0100百思博客iT(@4n$W}wj
MaxSamplev alue: 255
*Vv{5v1a0
MinSamplev alue: 0百思博客 K~4Lz�P6p /oD;U
Thresholding: 1百思博客|*S!s9~f@7[(V�]A
ImageDescription: [1x166 char]
,N#fi@`&Y1LS0
4、 MATLAB中图象文件的显示百思博客`I+Vs(l4?
bm
imshow百思博客'sni*_/d}&W
imshow函数是最常用的显示各种图象的函数,其语法如下:百思博客0tJ^NV
imshow(X,map)
gDE5uf6O0
其中X是图象数据矩阵,map是其对应的颜色矩阵,若进行图象处理后不知道图象数据的值域可以用[]代替map。百思博客[:v/E$F5Oa`8B$j
需要显示多幅图象时,可以使用figure语句,它的功能就是重新打开一个图象显示窗口。百思博客9h4uZ0T5ub!p0n2Kx$U-X2Q
例:百思博客$/
H#m,x#/:h
I=imread(‘rice.tif’);百思博客?W
rv&CeT
Imshow(I);百思博客3fo:~
k,m Kl
J=imread(‘flowers.tif’);
H)TM.V[&M)nSI0
figure,imshow(J);百思博客d1K
t
r YM6`c
5、 MATLAB中灰度直方图的显示
![P8e_iV0MD�y
qu0
MATLAB图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist函数的语法格式为:百思博客#UFtQ9Mw&mN
imhist(I,n)百思博客#sv-z1q2R1u
imhist(X,map)百思博客W;^
@n
k9r
其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。百思博客c8|9KV#k^.c
例:
5[Fg;I`
j0
I = imread('rice.tif');
&{u(KFx6}ui0
imshow(I)
$^Su UhM'?y2b R0
figure, imhist(I)
`:D�Z@M}4BMP0
6、 对比度增强
&O!PU]6p0
如果原图象f(x,y)的灰度范围是[m,M],我们希望调整后的图象g(x,y)的灰度范围是[n,N],那么下述变换,,就可以实现这一要求。百思博客
{;N/| yF-ts
MATLAB图象处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强。Imadjust函数的语法格式为:百思博客K:o*d6MT
J = imadjust(I,[low_in high_in],[low_out high_out])
+EF7g&w"~"I'z4i0
J = imadjust(I,
[low_in high_in],[low_out high_out])返回图象I经过直方图调整后的图象J,[low_in high_in]为原
图象中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围。百思博客6W
`Yh6e
例:百思博客$@#Ih`CoH$Yq
I = imread('pout.tif');百思博客#B#H5/6gy.k
q
J = imadjust(I,[0.3 0.7],[]);
j/I2g'o
o2vmM�L0
imshow(I), figure, imshow(J)百思博客m+O[9D�mR
三、实验要求
Zo-oY'?%B0
copy两个图形文件girl1.bmp和girl2.bmp到MATLAB目录下work文件夹中。百思博客c'x-g
e%`b*_;QC4D!}
1、 将
MATLAB目录下work文件夹中的girl.bmp图象文件读出.用到imread,imfinfo等文件,观察一下图象数据,了解一下数字图象在
MATLAB中的处理就是处理一个矩阵。将这个图象显示出来(用imshow),尝试修改map颜色矩阵的值,再将图象显示出来,观察图象颜色的变化。百思博客e{,JZ
CH"vq
2、 将
MATLAB目录下work文件夹中的girl2.bmp图象文件读出,显示它的图象及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust
函数将它的灰度值调整到[0,1]之间,并观察调整后的图象与原图象的差别,调整后的灰度直方图与原灰度直方图的区别。百思博客n%|O{gl"x
|]
[Qc7d [}0
实验二 图像运算
百思博客5w3U%uUaWw%O
-hN�kA&q:}0QX0
本实验是综合性实验,涵盖Matlab程序设计、图像点运算、代数运算、几何运算等多章基本知识及其应用。需四个学时。
3?
w1B1B3F�V+Uu s0
一、实验目的与要求百思博客-i!~&o{0I�Uc
理解图像点运算、代数运算、几何运算的基本定义和常见方法;百思博客k~6TB*M3X
掌握在MTLAB中对图像进行点运算、代数运算、几何运算的方法;百思博客'}U_l'd9h
掌握在MATLAB中进行插值的方法
C4`,[:v/Z}-`_0
运用MATLAB语言进行图像的插值缩放和插值旋转百思博客
T.U7Tx(i'KB3qY
进一步熟悉了解MATLAB语言的应用。
e7Q0M
f&POF5z0
二、实验原理与功能
FTk5xUlw0
点运算是通过对图像中每个像素值进行计算,改善图像显示效果的操作,也称对比度增强,对比度拉伸,灰度变换.可以表示为B(x,y)=f(A(x,y)).进行逐点运算,输入映射为输出,不改变
图像像素的空间关系.百思博客5IDuJa
代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。
#OX2A.HG0
四种图像处理代数运算的数学表达式如下:
7H`m&Vy#Q"b0
C(x,y)=A(x,y)+B(x,y)百思博客t.l-]o-@B/
C(x,y)=A(x,y)-B(x,y)
M)A*E p%FR0
C(x,y)=A(x,y)*B(x,y)
mRP%^1Q8ge$Ll)Y0
C(x,y)=A(x,y)/B(x,y)
xD?
g!cA3bI^3h0
其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。
,_E#X8DE&s1m+af4z_0
在
MATLAB中,我们可以用函数简单的得到数字图像的图像数据矩阵(即A(x,y)和B(x,y)),有了这些矩阵后我们只要适当的设计代数运算的形式并
写出方程,就可以得到一个输出图像的矩阵(即C(x,y))图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪
声的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则过累积很慢。对M幅图像进行平均,使图像中每一点的平方信
噪比提高了M倍幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。
z1nQH
Bg]0
几
何运算可改变图像中各物体之间的空间关系。这种运算可以被看成是将(各)物体在图像内移动。一个几何运算需要两个独立的算法。首先,需要一个算法来定义空
间变换本身,用它来描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动”。同时,还需要一个用于灰度插值的算法,这是因为,在一般情况
下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也如此。因此插值就是对变换之后的整数坐标位置的像素值进行估计。
MATLAB提供了一些函数实现这些功能。百思博客U)C} P~z
插值是常用的数学运算,通常是利用曲线拟合的方法,通过离散的采样点建立一个连续函数来逼近真实的曲线,用这个重建的函数便可以求出任意位置的函数值。百思博客,Vei'r6A
最近邻插值是最简便的插值,在这种算法中,每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值。最近邻插值是工具箱函数默认使用
的插值方法,而且这种插值方法的运算量非常小。当图像中包含像素之间灰度级变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。百思博客]-^&qc$x!P7w
双线性插值法的输出像素值是它在输入图像中2×2领域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。
1`@Eid M-P0
双三次插值的插值核为三次函数,其插值邻域的大小为4×4。它的插值效果比较好,但相应的计算量也比较大。百思博客b7ym`l1T.@p
MATLAB图像处理工具箱中的函数imresize可以用上述的3种方法对图像进行插值缩放,如果不指定插值方法,则默认为最邻近插值法。
HF:t(BY"B0
Imresize函数的语法格式为:
CX_"R/r5t�EW!yv8Y+DO0
B = imresize(A,m,method)
0j-r+cBh(Tq,w0
参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。
dFRc"E:n8F6C0
B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。
8`'B]P1h(o0
三 实验设计例子与调试百思博客O&F9{4bk9Yg
1. 完成人为的往一幅图像中加入噪声,并通过多次相加求平均的方法消除所加入的噪声。百思博客;@#Ds{(Ekq ]
在MATLAB中提供了给图像加入噪声的函数imnoise百思博客9Xocr[;z/
imnoise的语法格式为
'S1f/&vZ.d3N0
J = imnoise(I,type)
9Q(y(V+]4v$e(][&|)H0
J = imnoise(I,type,parameters)百思博客 b*NX_K1do
其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。
A
N`-Ac `�N0
参数type和parameters用于确定噪声的类型和相应的参数
。
s,PPr:GuXP/0
下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:
XK8@2M+i1u(O�h o0
例:百思博客,]W
`buJ
I=imread('eight.tif');
6W`�Vbd#kE3/c3pr0
J1=imnoise(I,'gaussian',0,0.02);百思博客1QL Czy&Z5b
J2=imnoise(I,'salt & pepper',0.02);
/Uv^KY#G(j6a3mCxM0
J3=imnoise(I,'speckle',0.02);百思博客XB2U
`;SOx
subplot(2,2,1),imshow(I),title('原图像');百思博客o[S8n4?R0H
subplot(2,2,2),imshow(J1),title('加高斯噪声');
7CS3W7k
^h}M2X0
subplot(2,2,3),imshow(J2),title('加椒盐噪声');百思博客!p9CU4bu
Zz*d [h
subplot(2,2,4),imshow(J3),title('加乘性噪声');
@7WC#GrT0
在上面的例子中使用了一个函数subplot。其作用就是将多幅图像显示再同一幅图像显示对话框中。其语法格式为:
puR+Fw0
subplot(m,n,p)
+S
Io2_2y+yiCQi0
其作用就是将一个图像显示对话框分成m行n列,并显示第p幅图像。百思博客&dC5N!mD|�oP
在MATLAB程序语言中,分号的用处为不显示程序运算中的中间结果,这在一定程度上使系统运算的效率增高,因此在不需知道中间结果的情况下,可以用分号作为一个句子的结尾,而不显示该句运算的中间结果。
e6?4ug+b0
代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR END循环的用法如下:
MM r-FK
zM0
for end循环百思博客8_%`/B g}V
这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:
@ED6qv&^
EWJv0
for variable = expression
cs2rLwSpXk0
statements百思博客lO J1Pv,z$y%X
end
/"e,j8j6wHlS0
举例如下:
'~CeUQSYD0
例:
iLO9xhB0
%一个简单的for循环的例子。百思博客Arf#sK
eE
for i=1:10;百思博客T)lO5c2B"ld
y(i)=i;
8hx#u([D$zL!yU,f0
end;
4o.}"Au
VX
vm1P%Y[0
y %显示y的结果
(Aum
te roi0
y =百思博客Y+Y*_]1e2A
^
1 2 3 4 5 6 7 8 9 10
n�Y7vN!cOE%r0
为
了得到最大的速度,在for循环被执行之前,应预先分配数组。例如前面所考虑的第一种情况,在for循环内每执行一次命令,向量y的维数增加1。这样就使
得MATLAB每通过一次循环对y分配更多的内存,这当然要花费一定的时间。为了可以不执行这个步骤,for循环的例子应重写为:
+E9Jv&a$b
f0
y=zeros(1,10);百思博客D]ss5h%O%V!v
for i=1:10;
8KDw6?0BgV$?nN0
y(i)=i;
g+cU/Az6@T_0
end;
XM,` n/n S'Ji0
y
*WL.OJ9Z3xL0
在
实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此读出的
图像数据不能直接进行相加求平均,因此必须使用一个函数将图像数据转换成双精度型数据。MATLAB中提供了这样的函数:
+^&W3^6v:AL!O'M@0
im2double函数,其语法格式为:
,u1c4sm/]`(PaA0
I2 = im2double(I1)百思博客&f/H:k:o E;aT1]
其中I1是输入的图像数据,它可能是unit8或unit16型数据,通过函数的变化输出I2为一个double型数据,这样两图像数据就可以方便的进行相加等代数运算.百思博客K`wA�Zx[-^
作为一个示例,现将刚刚显示的加有噪声的图像进行相加求平均以消除图像的噪声。在图像中我们给图像加的是均值为0,方差为0.02的高斯噪声,将图像相加了一百遍,再求其平均值。程序如下:
0Ep/N3K#fa@n0
%例图像加噪声再通过多次相加求平均的方法祛除噪声百思博客A
^(}khu
[I,M]=imread('eight.tif');百思博客+[S t4};M
J=imnoise(I,'gaussian',0,0.02);百思博客5[As9^Ne
subplot(1,2,1),imshow(I,M),title('原图像');
'g#ua
Sa�rtY0
subplot(1,2,2),imshow(J,M),title('加噪声后图像');百思博客M%F M
G*L0Q7dq,cq/WW
K=zeros(242,308);百思博客o|se7|
for i=1:100
E6s2Z4{z5h0
J=imnoise(I,'gaussian',0,0.02);百思博客*E]+THJPN
Nj�C
J1=im2double(J);
#c*uv*R9f[0
K=K+J1;
.I]|)@]-I6m0
end
K#]3Tqt5?�d0
K=K/100; %求图像的平均
*^:V
mR$F*eQ0
figure;imshow(K),title('相加求平均后的图像');
^H0q8?O$KBS$IS x En0
例子2百思博客'X(TK| wAx
Imresize函数的语法格式为:百思博客@3u|?(X'Y^f}S
B = imresize(A,m,method)百思博客WRF9L!C
这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。
!H.?r#mA3P*^Y7FA
B0
B = imresize(A,m,method)返回原图A的m倍放大的图像(m小于1时效果是缩小)。百思博客BR$a(F.D
例:
1os@5x7M/m0z+^+H0
I=imread('ic.tif');
dMmO4Sj/0
J = imresize(I,1.25);
o'T!U^9Scwlir0
imshow(I),title('原图像')
I+q)AdIz5o;Y-s%q$vZ0
figure,imshow(J),title('放大后的图像')
B7VTYO'e4t7bV0
在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。
Zw/2cKp-PYF0
Imrotate的语法格式为:百思博客C/lvA*{4z#A
B = imrotate(A,angle,method
S$x&zh d$E7s0
函
数imrotate对图像进行旋转,参数method用于指定插值的方法,,可选用的值为'nearest'(最邻近法),'bilinear'(双线性
插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。百思博客$Z4f8I9y&a#Q/S
例:
&m#k!hjW*/5Z8PL0
I=imread('rice.tif');
G[M7|/pK H0
J=imrotate(I,30,'bilinear');
m*BMqNPa(@A X0
imshow(I);title('原图像')
)P$EE
vJ�iPZ0
figure,imshow(J),title('旋转后的图像')
M3WWJY
N2m0
四、实验任务
c-sN!k
Okg0
实验要求设计一个程序完成下列要求:
http://blog.baisi.net/?uid-110653-action-viewspace-itemid-936
百思博客&g
百思博客&g
相关文章推荐
- 实验一 Matlab语言、数字图象基本操作
- Matlab语言 数字图象基本操作 个人总结
- MATLAB - 图像基本操作
- matlab基本操作
- matlab 图像的基本操作
- R语言学习笔记——数据结构 & 数据框基本操作
- Matlab基本操作
- MATLAB向量和矩阵的基本操作
- MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应
- MATLAB基本操作
- 阿里云搭建基于MatlabMPI的集群(一):阿里云连接基本操作
- 一、了解Matlab的基本操作
- Matlab矩阵基本操作(定义,运算)
- Matlab 图像处理基本操作
- Math类中包含基本的数字操作,如指数、对数、平方根和三角函数。
- R 语言基本操作(基本信息的查看、与本地文件系统交互、编译器版本升级)
- R语言基础入门1--R概述和基本操作
- Linux 下C语言文件-目录基本操作
- Matlab彩色图像处理基本操作
- Matlab基本语法和基本操作