MATLAB桌面是一个针对诸如运行MATLAB命令、观察输出、编辑和管理文件与变量、观察会话历史等任务的一个图形工具集,是MATLAB的主要工作环境。
用户可以在命令行窗口键入edit打开MATLAB编辑器。
MATLAB编辑器是最重要和最通用的桌面工具之一,其主要目的是为了创建和编辑MATLAB函数和脚本文件。因为这些文件使用扩展名.m,故被称为M文件。
用户可以在提示符处键入edit filename来打开某一个M文件。
MATLAB编辑器以不同颜色强调不同的MATLAB元素代码,在代码执行期间可以设置调试断点、检查变量,并单步执行代码行。最后可以发布M文件,并生成诸如HTML、LaTeX、Word等格式的输出。
若要保存整个工作空间,只需要右键单击工作空间窗口,选择Save Workspace As后选择文件夹存储文件。
若保存从工作空间中选取的变量,以左键选取该变量,在突出显示区单击右键,选择Save Selection As后选择文件夹保存该变量。
若保存从工作空间中选取的多个变量,使用Ctrl+单击选择的方式选择多个变量即可。
我们保存的所有文件都以二进制的格式保存,扩展名为.mat,通常称为MAT文件。
使用函数imread将图像读入MATLAB环境中,基本语法为imread(‘filename’)
例如:>> f = imread(‘C:\Users\86158\Desktop\MATLAB_logo.jpg’);
函数imread支持多数流行的图像图形格式,包括JPEG、TIFF等。
使用函数imshow可将图像显示在MATLAB桌面上,基本语法为imshow(f)
例如:>> imshow(f);
若随后使用imshow显示另一幅图像g,且保留第一幅图像,使用函数figure:>> figure, imshow(g);
图像被函数imwrite写入当前目录,基本语法为imwrite(f, ‘filename’)
我们可以根据具体文件被写的格式和要求选取其他的函数参数,如:imwrite(f, ‘filename.jpg’, ‘quality’, q);(其中q为0至100的整数,数字越小,劣化越高)
我们在表示数字图像时虽然使用整数坐标,但是在MATLAB中像素值并没有限定为整数,故需要为描述像素值赋予类的概念。
double:双精度浮点数,8字节
single:单精度浮点数,4字节
uint8:无符号8比特整数,1字节
uint16:无符号16比特整数,2字节
uint32:无符号32比特整数,4字节
int8:有符号8比特整数,1字节
int16:有符号16比特整数,2字节
int32:有符号32比特整数,4字节
char:字符,2字节
logical:值为0或1,1字节
一幅灰度级图像可以看成一个数据矩阵,矩阵的值表示灰度浓淡
若灰度级图像元素是uint8或uint16时,它们分别具有的范围是[0, 255]和[0, 65535]的整数值。
若是double类或single类,其值通常会归一化到[0, 1]。
一幅二值图像是一个取值只有0和1的逻辑数组。
若我们想让MATLAB认为该图像是一个二值图像,需要使用函数logical,其基本语法为:B = logical(A)
同时我们也可以使用类转换语法,将逻辑数组转为数值数组,基本语法为:B = class_name(A),class_name包括im2uint8,im2uint16,im2double,im2single,mat2gray。
索引图像是一种把像素值直接作为RGB调色板下标的图像。 索引图像可把像素值“直接映射”为调色板数值。
一幅索引图包含一个数据矩阵data和一个调色板矩阵map,数据矩阵可以是uint8,uint16或双精度类型的,而调色板矩阵则总是一个m×3的双精度矩阵。
综上,我们通常将一幅图像由类(class)和类型(type)来表征。例如:uint8 灰度级图像。
MATLAB最强大的特性之一在于其为用户提供编写新函数的能力。
M文件可以是简单执行一系列MATLAB语句的脚本,也可以是能够接收参量和产生一个或多个输出的函数。 其组成部分如下:
函数定义行具有如下形式:function [outputs] = name(inputs)
输出参量在方括号内,输入参量在圆括号内;
函数也可以作为其他函数的元素,在这种情况下,这些函数就称为子函数;
MATLAB可以识别长达63个字符的函数名,再后的字符将被忽略。
H1行是第一个文本行,它是函数定义行后边的单独的注释行。
帮助文本是紧跟在H1行后边的文本块,用来为函数提供注释和在线帮助。
函数体包含了执行计算和给输出变量赋值的所有MATLAB代码。
MATLAB有两种不同类型的算术运算。
矩阵算术运算按线性代数的规则来定义,数组算术运算则逐个元素地执行,且可使用多维数组。句点字符(.)用来区分数组运算和矩阵运算。
例如:A * B表示传统意义的矩阵乘法,而A .* B则表示数组乘法。
又由于加法和减法运算对矩阵运算和数组运算时相同的,因此在这两种运算中不使用句点字符。
图像是二维数组,而数组等同于矩阵,所以我们的算术运算符都是适用于图像的。
关系运算符是数组运算符,要求两个操作数必须有相同的维数,除非操作数是标量。
逻辑运算符既可以对逻辑数据进行操作,又可以对数值数据进行操作,其具体操作与C语言类似。
该部分内容与C等高级编程语言基本类似,故不作阐述。
MATLAB支持大量强有力的索引方案,可以简化数组操作并提升程序的效率。
通常情况下,一个一维数组的行向量,我们可以使用下标来表示索引值。与C语言不同的是,第一个元素的下标数值为1。
下面来介绍MATLAB中的几种数组操作:
转置运算符:.’
>> v = [1 3 5 7 9]
v =
1 3 5 7 9
>> w = v.'
w =
1
3
5
7
9
访问元素块,以下我们四种不同的写法:
>> v(1: 3)
ans =
1 3 5
>> v(3: end)
ans =
5 7 9
>> v([1 4 5])
ans =
1 7 9
>> v(1: 2: end)
ans =
1 5 9
在矩阵表示中,我们可以用方括号将行向量括起并用分号将每组行向量分隔:
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
若要选取矩阵中的元素,需要两个索引,一个对应行,一个对应列,也可以使用冒号作为索引来选择整行、整列或整个矩阵。
>> A(2, :)
ans =
4 5 6
>> sum(A(:))
ans =
45
函数句柄是一种MATLAB数据类型,其中包含有引用函数时的所有信息,其优点在于可以将函数句柄作为调用中的参量传递到另一个函数。
函数句柄有两种不同的类型,都用函数句柄运算符@来创建。
>> f = @sin
f =
包含以下值的 function_handle:
@sin
>> sin(pi / 4)
ans =
0.7071
>> f(pi / 4)
ans =
0.7071
>> g = @(x) x .^2
g =
包含以下值的 function_handle:
@(x)x.^2
>> r = @(x, y) sqrt(x .^ 2 + y .^2)
r =
包含以下值的 function_handle:
@(x,y)sqrt(x.^2+y.^2)
如以上两个例子,分别为得到输入的平方、计算两个变量的平方和,其调用方式与命名函数句柄一致。
单元矩阵提供了一种在一个变量名下组合一套对象(如数字、字符、其他单元矩阵)的方法。
相当于将不同的实体使用单元数组组织成一个单一变量。类似于结构但又有所不同。但是单元的地址由数字寻址,而结构的元素则由用户定义的称为字段的名称寻址。
值得注意的是,单元数组包含有参量的副本,但却不包含指向这些参量的指针,若单元中的某一个对象在单元创建后发生了改变,这种变化不会反映到单元中。
MATLAB作为一款强大的图形图像处理软件,提供了一个宽泛的处理多维阵列的函数集合,同时包含了强大的功能库和工具箱,更是把数值计算的功能扩展进来,并不仅仅局限于向量的运算。其基本语法与一般的脚本语言类似,简而易懂,数据类型、流控制语句等也与C等高级编程语言类似,故而在学习和使用上为我们提供了很大的便利。