第三章基本原理1_第1页
第三章基本原理1_第2页
第三章基本原理1_第3页
第三章基本原理1_第4页
第三章基本原理1_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 基本原理图像的表示 矩阵 f(0,0)f(0,1) f(0,N-1) f(1,0)f(1,1) f(1,N-1)f(x,y)= . . f(M-1,0) f(M-1,1) . f(M-1,N-1)对一副图像f(x,y)取样,得到M行N列图像,我们称这幅图像的大小为MXN(0,1) 用来表示沿第一行的第二个取样图像的基本操作 读取图像:imread(filename)p10页 filename :全名,包括扩展名 注意格式路径,要在默认路径下图像大小查询 Size函数 给出图像的行列数Size(f)m,n=size(f)图像信息显示图像信息显示 whos函数 显示一个数组的附加信息who

2、s f显示图像显示图像 Imshow()函数 语法格式: imshow(f,g)F:图像数组G:显示灰度级数,默认256 imshow(f,low high)小于等于low的值都显示黑色,大于或等于high的值都显示为白色Imshow(f,)将变量low设置为数组的最小值,high设置为最大值,显示一幅动态范围较小的图像或既有正值又有负值的图像效果非常好 Pixval 单个像素的亮度值Imshow例题 P11例1 p12例2 练习要求: 在一个图形窗口中显示至少三幅chest的处理图像,imshow参数自行调节。 subplot(131),imshow(f) subplot(132),imsh

3、ow(f,) subplot(13),imshow(f,10 52) subplot(13),imshow(f,28 48)加载加载图像图像 Load filename(不加扩展名)例如:Load womanFigure(1),image(X),colormap(map)大写大写load tire figure(2),image(X),colormap(map)load wbarb figure(3),image(X),colormap(map)保存图像Imwrite(f,filename) 保存图像保存图像,将图像写到磁盘上将图像写到磁盘上 filename中包含的字符串必须是可识别的文中包

4、含的字符串必须是可识别的文件格式扩展名,件格式扩展名,imwrite参数取决于文件格参数取决于文件格式,本书主要处理的式,本书主要处理的jpg,tif格式。格式。只适用于只适用于jpg格式格式Imwrite(f,filename.jpg,quality,q)Q:是是0-100之间的整数之间的整数Q越小图像的退化压缩就越严重越小图像的退化压缩就越严重例题imwrite(f,mjm.jpg,quality,q)p13页页 f=imread(bubbles.tif); imwrite(f,bubbles50.jpg,quality,50) imwrite(f,bubbles25.jpg,qualit

5、y,25) imwrite(f,bubbles15.jpg,quality,15) imwrite(f,bubbles5.jpg,quality,5) imwrite(f,bubbles0.jpg,quality,0) subplot(231),imshow(f) subplot(232),imshow(bubbles50.tif) subplot(233),imshow(bubbles25.jpg) subplot(234),imshow(bubbles15.jpg) subplot(235),imshow(bubbles5.jpg) subplot(236),imshow(bubbles0

6、.jpg)只只适用于适用于tif格式格式 语法格式: imwrite(f,mjm.tif,compression,parameter,resolution,colres rowres) Parameter:包含如下值包含如下值none无压缩;无压缩;packbits比特包压缩(非二值图像的默认比特包压缩(非二值图像的默认参数);参数);ccitt二值图像的默认二值图像的默认参数参数 Colres:垂直方向上每英寸的像素数垂直方向上每英寸的像素数 Rowres:水平方向:水平方向上每英寸的像素数上每英寸的像素数基本操作基本操作 注意:注意: 逗号,分号的使用逗号,分号的使用 命令行结束写分号,不

7、显示运行结果(取消命令行结束写分号,不显示运行结果(取消输出)输出) 只要用逗号或分号正确分隔不同的命令一行只要用逗号或分号正确分隔不同的命令一行中可以写几条命令中可以写几条命令matlab数据类和图像类型2.4.1 数据类一幅图像的特性由数据类和图像类来表征Data_class image_type 虽然我们处理的是整数坐标,但matlab中的像素本身并不是整数。 P16页给出了matlab表示像素值所支持的各种数据类 Double :matlab中所有的数值计算都可用,最常用的 Uint8:在从存储设备中读取数据时,这种图像是实际中最常用的图像 Logical:少用 Unit16:少用图像

8、类型大多数单色图像的处理运算是通过二值图像或亮度图像来进行的。 亮度图像:intensity images 二值图像:binary images(第六章介绍一下两种) 索引图像:indexed images RGB图像:RGB images2.4.1 图像类型 亮度图像 :是一个数据矩阵,其归一化的值表示亮度。规定双精度型归一化亮度图像的取值范围是0,1 二值图像:所谓二值图像就是只有黑白两个灰度级,即像素灰度级非1即0。如文字图片,其数字图像可用每个像素1Bit的矩阵表示,以减少存储量。数据类间的转换 语法 B=data_class_name(A) 例: B=double(A)产生一个双精度

9、数组B 注意:p18转换注意事项 Matlab希望所有操作数在计算时都是双精度浮点型 例 若一个double类数组包含有区间0,255之外的值,则在double向unit8转换时,会将小于0的值转换成0,大于255的值转换成255,之间的值将全部舍去小数点部分转换成整数,有时需先进行适当缩放,使其元素值尽可能在0255之间Im2uint8 p18 f=-0.5 0.5;0.75 1.5f = -0.5000 0.5000 0.7500 1.5000 g=im2uint8(f)g = 0 128 191 255imshow(f)Mat2gray(a,amin,amax)把一个double类的任意

10、数组转换成取值范围为【0,1】的归一化double类数组将a中小于amin的值转换为0,将a中大于amax值转换成1f = -0.5000 0.5000 0.7500 1.5000 g=mat2gray(f)g = 0 0.5000 0.6250 1.0000zeros函数生成零矩阵ones函数生成全1阵 zeros功能是返回一个mnp.的零矩阵。注意:m, n, p,.必须是非负整数,负整数将被当做0看待。当没有参数时classname时,产生的是标量零矩阵,有参数时产生指定类型的零矩阵,例如zeros(3,2,uint8)。 Ones的用法同zeros B=zeros(n):生成nn全零d

11、ouble阵。 B=zeros(m,n):生成mn全零double阵。 B=zeros(m n):生成mn全零double阵。 B=zeros(d1,d2,d3):生成d1d2d3全零double阵或double数组。 B=zeros(d1 d2 d3):生成d1d2d3全零double阵或double数组。 B=zeros(size(A):生成与矩阵A相同大小的全零double阵。montage功能:功能:在同一时间显示多帧图像中的所有帧。montage(I) 显示灰度图像I共k帧,I为m*n*1*k的数组montage(BW) 显示二值图像I共k帧,I为m*n*1*k的数组montage(

12、X,map)显示索引图像I共k帧,色图由map指定为所有的帧图像的色图,X为m*n*1*k的数组montage(RGB)显示真彩色图像GRB共k帧,RGB为m*n*3*k的数组例题 m=uint8(zeros(128,128,1,27);%产生8位无符号的4维整数数组,其维数为:128*128*1*27 for i=1:27 m(:,:,:,i),map=imread(mri.tif,i); end montage(m,map) a=imread(cameraman.tif); %读入cameraman图像 figure(1);imshow(a); b1=a+50; %b1=a+45图像灰度值

13、增加50 figure(2);imshow(b1); b2=1.2*a; %b=1.2*a图像对比度增大 figure(3);imshow(b2) b3=0.65*a; %b=0.65*a图像对比度减少 figure(4);imshow(b3); b4=-double(a)+255; %b4=-1*a+255,图像求补,注意把a的类型转换为double figure(5);imshow(uint8(b4); %再把double类型转换为unit8例题 clear; a=imread(rice.png); %读取图像 figure(1);imshow(a); %显示原始图像 background

14、=imopen(a,strel(disk,15); %在a上进行形态学运算; ap=imsubtract(a,background); %减法运算函数 figure(2); imshow(background); %图像输出背景 figure(3); imshow(ap,); %减法运算结果形态学 形态学的作用是获取物体拓扑和结构信息,通过物体和结构元素相互作用的某些运算,的到物体更本质的形态。腐蚀膨胀函数腐蚀的具体操作是:用一个结构元素(一般是33的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为1,则该像素为1,否则为0。膨胀的具体操作是:用一个结

15、构元素(一般是33的大小)扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为0,则该像素为0,否则为1。腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点;膨胀的作用是将与物体接触的所有背景点合并到物体中,使目标增大,可添补目标中的空洞。开运算是先腐蚀后膨胀的过程,可以消除图像上细小的噪声,并平滑物体边界。闭运算时先膨胀后腐蚀的过程,可以填充物体内细小的空洞,并平滑物体边界。形态学函数 imclose函数 该函数功能是对灰度图像执行形态学闭运算,即使用同样的结构元素先对图像进行膨胀操作后进行腐蚀操作。调用格式为:IM2=imclose(IM,

16、SE) IM2=imclose(IM,NHOOD) imopen函数 该函数功能是对灰度图像执行形态学开运算,即使用同样的结构元素先对图像进行腐蚀操作后进行膨胀操作。调用格式为: IM2=imopen(IM,SE) IM2=imopen(IM,NHOOD形态学函数 Matlab中函数中函数strel在在操作结构元素应用,用操作结构元素应用,用于膨胀腐蚀及开闭运算等操作的于膨胀腐蚀及开闭运算等操作的结构结构元素元素对象对象 具体用法:具体用法: SE = strel(shape,parameters) 创建创建由指定由指定形状形状shape对应对应的结构元素的结构元素。 parameters一般

17、控制SE的大小。SE = strel(shape,parameters)其中shape的种类有arbitrary pair diamond periodicline disk rectangle line squareoctagon参数parameters一般控制SE的大小。例子:se1 = strel(square,6)% 创建6*6的正方形se2 = strel(line,10,45)% 创建直线长度10,角度45se3 = strel(disk,15)% 创建圆盘半径15se4 = strel(ball,15,5)% 创建椭圆体,半径15,高度5例题 a=imread(rice.png)

18、; background=imopen(a,strel(disk,15); a1=imdivide(a,background); subplot(131); imshow(a); %原始图像 subplot(132); imshow(background); %Background结果 subplot(133); imshow(a1,); %除法运算结果数组和矩阵 一维数组相当于向量,二维数组相当于矩阵.所以矩阵是数组的子集数组运算是指数组对应元素之间的运算,也称点运算.矩阵的乘法、乘方和除法有特殊的数学含义,并不是数组对应元素的运算,所以数组乘法、乘方和除法的运算符前特别加了一个点。矩阵是一

19、个二维数组,所以矩阵的加、减、数乘等运算与数组运算是一致的。但有两点要注意:对于乘法、乘方和除法等三种运算,矩阵运算与数组运算的运算符及含义都不同:矩阵运算按线性变换定义,使用通常符号;数组运算按对应元素运算定义,使用点运算符;数组的生成i:j:k 创建从i开始,步长为j,到k结束的数字序列,即i,i+j,i+2j,k。如果j=0,则返回一个空矩阵。数字i、j和k不必是整数,该序列的最后一个数是小于或等于k。i:k 若步长为1,则步长可以省略不写。3.1数组的生成例:2:5 ans = 2 3 4 5 2.1:1.1:5.3 ans = 2.1000 3.2000 4.3000 1:-1:-4

20、 ans = 1 0 -1 -2 -3 -4 1:-1:4 ans = Empty matrix: 1-by-0 矩阵的创建直接输入矩阵a=1,2,3;4,5,6;注: 1.必须使用方括号 2.当一行输不完时可以用续行“” 3.行与行之间用分号或回车符分隔 4.同行元素用空格或逗号分隔 5.该方法只适合创建小型矩阵重要的矩阵Zeros(m,n):大小为m*n的double类矩阵,元素均为0ones(m,n):大小为m*n的double类矩阵,元素均为1ture(m,n):大小为m*n的logical类矩阵,元素均为1false(m,n):大小为m*n的double类矩阵,元素均为0magic(

21、m,n):大小为m*n的魔术方阵,每一行中的元素之和,每一列元素之和及对角线中的元素之和均相等,且为整数。多用于测试rand(m,n):大小为m*n的矩阵,元素为0,1 均匀分布的随机数randn(m,n):大小为m*n的矩阵,元素是正态分布(如高斯分布)的随机数,随机数的均值为0,方差为1.3.3 矩阵元素提取A(行数组,列数组) 取出矩阵A中行数组指定的行,列数组指定的列元素按原次序排列组成的矩阵。 具体用法如下:A(i,j)A(i,j)返回矩阵A中第(i,j)的元素值。A(:,j)A(:,j) 返回矩阵A中第j列列向量。A(i,:)A(i,:) 返回矩阵A中第i行行向量。A(:,j:k)

22、A(:,j:k) 返回由矩阵A中的第j列,第j+1列,直到第k列列向量组成的子阵。A(i:k,:)A(i:k,:) 返回由矩阵A中的第i行,第i+1行,直到第k行行向量组成的子阵。A(i:k,j:l)A(i:k,j:l) 返回由矩阵A中的第i行到第k行行向量和第j列到第l列列向量组成的子阵。A(:,j1 j2A(:,j1 j2) 返回矩阵A的第j1列、第j2列等的列向量。A(i1 i2A(i1 i2 ,:) ,:) 返回矩阵A的第i1行、第i2行等的行向量。 A(i1 i2.,j1 j2.)A(i1 i2.,j1 j2.) 返回矩阵第i1行、第i2行等和第j1列、第j2列等的元素。3.3 矩阵

23、元素提取例4: A=magic(5) A =17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 A(2,3) ans =7 A(2,:) ans =23 5 7 14 16 A(:,3) ans =1 7 13 19 25 3.3 矩阵元素提取例4: A=magic(5) A =17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 A(1:3,:) ans =17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 A

24、(:,3:5) ans =1 8 15 7 14 16 13 20 22 19 21 3 25 2 9 3.3 矩阵元素提取 A=magic(5) A =17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 A(1:3,3:5) ans =1 8 15 7 14 16 13 20 22 A(2 4,:) ans =23 5 7 14 16 10 12 19 21 3 A(:,2 4) ans =24 8 5 14 6 20 12 21 18 2 A(1 3 5,2 4) ans =24 8 6 20 18 2 3.3

25、 矩阵元素提取 A(:) 将矩阵A中的每列合并成一个长的列向量。 A(j:k) 返回一个行向量,其中的元素为A(:)中的从第j个元素到第k个元素。 A(j1 j2 ) 返回一个行向量,其中的元素为A ( : )中的第j1、j2元素。 例5: A=magic(3) A = 8 1 6 3 5 7 4 9 2 A(:) ans =8 3 4 1 5 9 6 7 2(竖着排列,列向量) A(2:5) ans =3 4 1 5 A(1 3 5 7 9) ans =8 4 5 6 2 重要的矩阵例 a=5*ones(3,3)a = 5 5 5 5 5 5 5 5 5 magic(3)ans = 8 1

26、6 3 5 7 4 9 2 b=rand(2,4)b = 0.8147 0.1270 0.6324 0.2785 0.9058 0.9134 0.0975 0.5469矩阵的超越函数函数名函数名含义含义sign符号函数rem留数sin正弦cos余弦tan正切asin反正弦acos反余弦atan反正切atan2第四象限反正切函数名函数名含义含义sinh双曲正弦cosh双曲余弦tanh双曲正切exp自然指数log自然对数log10以10为底的对数bessel贝赛尔函数gamma伽吗函数rat有理逼近3.5 运算符算术运算符 关系运算符逻辑运算符3.5 运算符P29页Plus(a,b)+Minus(

27、a,b)-Time(a,b)*.关系操作符 MATLAB常用的关系操作符有:(小于)、(大于)、=(大于或等于)、 = =(等于)、 !=(不等于)。 MATLAB的关系操作符可以用来比较两个大小相同的数组,或者比较一个数组和一个标量。在与标量比较时,结果和数组大小一样。3.5 关系和逻辑运算 a=1 2 3;4 5 6 ;7 8 9a = 1 2 3 4 5 6 7 8 9 b=0 2 4;3 5 6;3 4 9b = 0 2 4 3 5 6 3 4 9 a=bans = 0 1 0 0 1 1 0 0 1a=bans = 1 1 0 1 1 1 1 1 1逻辑操作符逻辑操作符定义了一种与或

28、非的关系表达式。MATLAB的逻辑操作符有&(与)、|(或)、(非)。例如: a=1 2 0;0 4 5a = 1 2 0 0 4 5 b=1 -2 3;0 1 1b = 1 -2 3 0 1 1 a&bans = 1 1 0 0 1 1 a|bans = 1 1 1 0 1 1 aans = 0 0 1 1 0 0 bans = 0 0 0 1 0 0end 表示向量的最后一个元素一维数组:向量 V(3:end) V(1:2:end) V(end:-2:1)矩阵 B=A B(:,3)=0end A(end,end) A(end,end-2) A(2:end,end:-2:1)4.3 矩阵操作

29、函数 MATLAB提供了一组执行矩阵操作的函数,例如flipud(a)使得矩阵上下翻转,fliplr(a)使得矩阵左右翻转,rot90(a)使得矩阵逆时针翻转900等等。 a=1 2 0;0 4 5flipud(a)ans = 0 4 5 1 2 0 fliplr(a)ans = 0 2 1 5 4 0 rot90(a)ans = 0 5 2 4 1 0 aans = 1 0 2 4 0 5p25 f=imread(Fig0206(a)(rose-original).tif); fp=f(end:-1:1,:); fc=f(257:768,257:768); fs=f(1:2:end,1:2:

30、end); subplot(221),imshow(f) subplot(222),imshow(fp) subplot(223),imshow(fc) subplot(224),imshow(fs) figure(2) plot(f(512,:)5.1 流程控制 为了便于应用,MATLAB提供了一些流程控制的命令。这些命令对脚本编写带来了一些方便,但是需要注意的是,尽量不要使用这些流程控制命令,尤其是循环控制命令。1 for循环 for循环允许一组命令以固定的次数重复,它的一般形式是 for x=array command end for 和end之间的命令串按数组array的每一列执行一次

31、,直到n次后终止。For循环应当注意的一些方面for循环不能使用内部重新赋值循环变量而终止;for循环内部接受任何有效的MATLAB数组;for循环可以嵌套;只要有矩阵形式可以解决的问题,不要使用for循环。使用for循环的算法执行很慢,一个好的MATLAB算法部应当出现循环语句。Tic/toc循环可以使用break跳出,但只跳出所在的循环,不跳出整个嵌套结构。2 while循环 与for循环以固定的次数求一组指令相反,while循环以不定的次数求一组语句的值。While循环的一般形式为: while expression commonds end 只要表达式expression里的所有元素为

32、真,就执行命令串commands。通常表达式求值给一个标量值,单数组值也同样有效。3 if-else-end结构 很多情况下,命令的序列必须根据关系的检验有条件的执行,它由if-else-end结构提供。它的结构如下: if expression1 commands1 elseif expression2 commands2 elseif else commands endtry-catch结构 可以进行错误的处理,提高计算的可靠性 try 可能出错的语句 catch 错误处理 end图像数据调用图像数据是存储在数组中,调用图像数据就变成了操作数组元素。A(:,:,1):表示红色矩阵A(:,:

33、,2):表示绿色矩阵A(:,:,3):表示蓝色矩阵矩阵数值0-255,数值越大颜色成分越多图像数据调用B=a(1:5,1:9,1)表示取数组a的红色矩阵的第一行到第5行中第1列到第9列的元素。矩阵数值0-255,数值越大颜色成分越多/2.3 Matlab变量 基本运算 变量 逗号、分号的意义 行内编辑、注释、运算规则 变量要求 变量区分字母的大小写 名字不能超过19个字符,第19个字符后的字符被忽略 变量必须以字母开头,之后可以是任意字母、数字或者下滑线 变量中不能含有标点符号。特殊变量Imcrop函数 返回图像的一个裁剪区域 I2=imcrop(I,RECT); X2=imcrop(X,MA

34、P,RECT); RGB2=imcrop(RGB,RECT); 其中,I、X、RGB分别对应灰度图像、索引图像、RGB图像的数据矩阵,MAP为索引图像颜色表,I2、X2、RGB2分别为各自输入矩阵所对应的输出矩阵。而RECT为可选参数,格式为XMIN YMIN WIGTH HEIGHT.例如20 20 40 40,则剪裁后的图像的左上角像素为原图像位置在(20,20)的像素,而剪裁后图像的右下角像素为原图像位置在(60,60)的像素。imcrop 如不加参数RECT,将使用鼠标在原图像上划矩形框的方法来实现图像的剪裁,所划矩形框内的图像将在新窗口中输出。 如: RGB=imread(1,jpg

35、); RGB1=imcrop(RGB,60,255,400,425); imhsow(RGB); figureimcrop f=imread(Fig0206(a)(rose-original).tif); fk=imcrop(f); imshow(fk)Imrotate函数 B = imrotate(A,angle) 将图像A(图像的数据矩阵)绕图像的中心点旋转angle度, 正数表示逆时针旋转, 负数表示顺时针旋转。返回旋转后的图像矩阵。 以这种格式调用该函数, 该函数默认采用最近邻线性插值(Nearest-neighbor interpolation)。旋转后的图像超出的部分填充0(黑色)

36、。imrotate B = imrotate(A,angle,method) 使用method参数可以改变插值算法,method参数可以为下面这三个值: nearest:最邻近线性插值(Nearest-neighbor interpolation) bilinear: 双线性插值(Bilinear interpolation) bicubic: 双三次插值(或叫做双立方插值)(Bicubic interpolation)imrotate B = imrotate(A,angle,method,bbox) bbox参数用于指定输出图像属性: crop: 通过对旋转后的图像B进行裁剪, 保持旋转后输出图像B的尺寸和输入图像A的尺寸一样。 loose: 使输出图像足够大, 以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 一般上这种格式产生的图像的尺寸都要大于源图像的尺寸。imresize 对图像做缩放处理。 B = imresize(A, m) 返回的图像B的长宽是图像A的长宽的m倍,即缩放图像。 m大于1, 则放大图像; m小于1, 缩小图像。 B = imresize(A, numrows numcols) numrows和numcols分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论