一、一些注意事项 (1)任何在Matlab中运行的文件必须驻留在当前目录或在搜索路径的目录中。 (2)Matlab和MathWorks工具箱提供的文件包含在搜索路径中。 (3)如果想知道哪些目录位于搜索路径中,或者添加或修改所搜路径,最简单的方法是在桌面上从File菜单中选择Set Path,然后使用Set Path对话框
二、matlab中的数字图像 概念:一幅图像被定义为一个而为函数f(x,y),其中,x和y是空间(平面)坐标,f在任何坐标点(x,y)处的振幅称为图像在该点的亮度。当f的分量x,y分量和振幅都是有限且离散的变量时,称该图像为数字图像。 坐标表示:设对一幅图像f(x,y)采样后,得到了一幅有着M行N列的图像,我们称其大小为M x N。 大多数书中图像原点定义在(x,y)=(0,0)处,沿图像第一行的下一坐标值为(x,y)=(0,1);然而,工具箱中有两处不同: (1)工具箱使用(r,c)而不是(x,y)来表示行和列; (2)坐标系统的原点在(r,c)=(0,0)处。 特别注意:IPT文档中将工具箱中的坐标称为像素坐标,IPT还采用一种较少使用的坐标约定,称为空间坐标,这种坐标用x表示列,使用y来表示行。
图像表示: 上图中a坐标对应的图像表示为:
上图中b坐标对应的图像表示为:
上述两种表示形式中的任意一个元素都称为像元、图元或像素。在Matlab中,图像将用矩阵来表示,矩阵以变量形式存储,变量只能以字母开头,且只能由字母、数字和下划线组成。
三、在Matlab中关于图像的基本操作 (1)读取图像imread,其语法为 imread('filename') 说明:filename是一个含有图像文件全名的字符串(包含任何可用的扩展名)
示例: >> f=imread('Fig0203(a)(chest-xray).tif');
>> imshow(f); 注:将图像读入矩阵f,且参数中使用‘’单引号定界字符串,命令结尾的分号在Matlab中是决定是否输出运行该命令后的结果。
>> size(f)
该命令可以得到图像的行数和列数
>> whos f 该命令可显示一个数组的附加信息。
Name Size Bytes Class Attributes
f 494x600 296400 uint8
示例:
(2)显示图像imshow 语法1:imshow(f,G) 其中,f是一个图像数组,G是显示该图像的灰度技术,若G为缺省,灰度级数为256。 语法2:imshow(f,[low high]) 会将所有小于或等于low的值都显示为黑色,所有大于或等于high的值都显示为白色。介于low和high之间的值将以默认的级数显示为中等亮度值。 语法3:imshow(f,[ ]) 可以将变量low设置为数组f的最小值,将变量high设置为数组f的最大值。
(3)保存图像imwrite 语法:imwrite(f,'filename') 注意:filename中包含的字符串必须是一种可识别的文件格式扩展名,如, imwrite(f,'iamge','tif') 或 imwrite(f,'image.tif') 若filename无路径信息,则默认保存到当前工作目录中,imwrite还可以有其他参数,具体取决于所选的文件格式。 一种只适用于JPEG图像的函数是imwrite,其语法为, imwrite(f,'filename.jpg','quality', q) 其中,q是一个0-100之间的整数,由于JPEG压缩,q越小,图像的退化越严重。 另一种只适用于tif图像的语法为, imwrite(g,'filename.tif','compression','parameter',...,'resolution',[colres rowres]) 其中,parameter可以有如下的值之一: none:表示无压缩 packbits:表示比特包压缩(非二值图像的默认参数) citt:citt压缩(二值图像的默认参数) 1 x 2矩阵[colres rowres]包含两个参数,分别以每单位中的点数给出图像的列分辨率和行分辨率
保存图像到硬盘, (1)使用图像窗口中的File菜单中的save as即可 (2)命令行存储,语法为: print -fno -dfileformat -rresno filename
四、数据类型
五、图像类型
(1)亮度图像(Intensity) (2)二值图像(Binary images) (3)索引图像(Indexed images) (4)RGB图像(RGB images) 注意:其中的二值图像是一个取值只有0和1的逻辑数组,一个取值只包含0和1的uint8类数组,在matlab中不认为是二值图像。 在提到一幅图像时,是指一幅“data_class image_type图像”,数据类型+图像类型
六、类型转换 (1)数据类型之间的转换 B = data_class(A) (2)图像类型之间的转换
im2uint8将输入中所有小于0的值设置为0,而将输入中所有大于1的值设置为255,再将所有的其他值乘以255,将得到的结果四舍五入为最接近的整数后,完成转换。 要把一个都变了类的任意数组转换成取值范围为[0,1]的归一化double类数组,可以通过mat2gray完成,其基本语法为: g = mat2gray(A,[Amin,Amax]) 其中,g的取值范围是0~1,参数是为了在转换时将A中小于Amin的值在g中转换为0,将A中大于Amax的值在g中转换为1,语句: g = mat2gray(A); 将A中实际的最小值和最大值分别赋给Amin,Amax。若输入为double类,输出也为double类。 函数im2double将输入转换为double类,若输入是uint8类,uint6 类或logical类,则函数im2double将其转换为范围[0,1]间的double类,若输入已经是double类,则该函数返回一个与输入相等的数组。 亮度图像和二值图像之间的转换,函数im2bw的语法为, g = im2bw(f,T) 该函数通过阈值处理,将一幅亮度图像f转换为一幅二值图像g,该函数自动将输出二值图像声明为一个logical数组,T的取值范围是[0,1]内。
七、Matlab中的索引 (1)数组索引 维数为1 x N的数组称为行向量,使用转置符(.')可将行向量转换为列向量,Matlab 中向量的元素使用方括号括起,并由空格或逗号隔开。 V = [1 3 5 7 9] 或 V = [1,3,5,7,9] 存取数据块,使用冒号(:),如要存取v的前三个元素,可以使用语句 V(1:3) 使用如下语句存取第三个到最后一个元素: V(3:end) 其中,end表示向量中的最后一个元素,若V是一个向量,则V(:)产生一个列向量,而语句V(1:end)产生一个行向量;索引并不限于连续的元素,如:V(1:2:end) 函数linspace的语法为 x = linspace(a,b,n) 该语句产生一个n个元素的行向量x,这n个元素之间线性地隔开并且包含a与b。 一个向量也可以作为另一个向量的索引,如: V([1 4 5])
(2)矩阵索引 矩阵索引与数组索引类似,只是从一维变为二维索引
八、M函数编程简介 M文件可以是简单执行一系列Matlab语句的脚本,也可以是接收变量并产生一个或多个输出的函数;M文件由文本编辑器创建,并以filename.m形式的文件名存储,M文件函数的组成部分为: 函数定义行 H1行 帮助文本 函数体 命令
函数定义形式为 function [outputs] = name(inputs) 函数名必须以字母开头,后面可以跟字母、数字、下划线的任意组合,但不允许有空格。函数名最长不能超过63个字符,超过此长度将被忽略。 H1行是第一个文本行,他是当个注释行,其前面为函数定义行,H1行与函数定义行间无空行或前导空格,一般是对函数的高度摘要,以便于快速了解函数功能。 帮助文本是紧跟在H1行后面的文本块,二者之间无空行,提供注释或在线帮助。 函数体包含了所有执行计算并给出输出变量赋值的Matlab代码。 符号'%'后面非H1行或帮助文本的所有行可看做函数注释行。
九、运算符