MATLAB基础

文章目录

  • MATLAB基础
    • 1. 初识MATLAB
      • 1.1 MATLAB桌面
      • 1.2 MATLAB编辑器
      • 1.3 保存和检索工作会话数据
    • 2. 图像输入、输出和显示
    • 3. 类和图像类型
      • 3.1 MATLAB中用于图像处理的类
      • 3.2 工具箱支持的四种图像类型
    • 4. M函数编程
      • 4.1 M文件
      • 4.2 运算符
        • 4.2.1 算术运算符
        • 4.2.2 关系运算符
        • 4.2.3 逻辑运算符
      • 4.3 流控制
      • 4.4 数组索引
      • 4.5 函数句柄、单元数组和结构
        • 4.5.1 函数句柄
        • 4.5.2单元矩阵
  • 总结

MATLAB基础

1. 初识MATLAB

1.1 MATLAB桌面

MATLAB桌面是一个针对诸如运行MATLAB命令、观察输出、编辑和管理文件与变量、观察会话历史等任务的一个图形工具集,是MATLAB的主要工作环境。
MATLAB基础_第1张图片

图1 MATLAB桌面

1.2 MATLAB编辑器

MATLAB基础_第2张图片

图2 MATLAB编辑器

用户可以在命令行窗口键入edit打开MATLAB编辑器。

MATLAB编辑器是最重要和最通用的桌面工具之一,其主要目的是为了创建和编辑MATLAB函数和脚本文件。因为这些文件使用扩展名.m,故被称为M文件。

用户可以在提示符处键入edit filename来打开某一个M文件。

MATLAB编辑器以不同颜色强调不同的MATLAB元素代码,在代码执行期间可以设置调试断点、检查变量,并单步执行代码行。最后可以发布M文件,并生成诸如HTML、LaTeX、Word等格式的输出。

1.3 保存和检索工作会话数据

  • 若要保存整个工作空间,只需要右键单击工作空间窗口,选择Save Workspace As后选择文件夹存储文件。

  • 若保存从工作空间中选取的变量,以左键选取该变量,在突出显示区单击右键,选择Save Selection As后选择文件夹保存该变量。

    若保存从工作空间中选取的多个变量,使用Ctrl+单击选择的方式选择多个变量即可。

我们保存的所有文件都以二进制的格式保存,扩展名为.mat,通常称为MAT文件。

2. 图像输入、输出和显示

MATLAB基础_第3张图片

图3 图像的读入和显示

使用函数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的整数,数字越小,劣化越高)

3. 类和图像类型

3.1 MATLAB中用于图像处理的类

我们在表示数字图像时虽然使用整数坐标,但是在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字节

3.2 工具箱支持的四种图像类型

  • 灰度级图像

一幅灰度级图像可以看成一个数据矩阵,矩阵的值表示灰度浓淡

若灰度级图像元素是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的双精度矩阵。

  • RGB图像

综上,我们通常将一幅图像由类(class)和类型(type)来表征。例如:uint8 灰度级图像。

4. M函数编程

MATLAB最强大的特性之一在于其为用户提供编写新函数的能力。

4.1 M文件

M文件可以是简单执行一系列MATLAB语句的脚本,也可以是能够接收参量和产生一个或多个输出的函数。 其组成部分如下:

  • 函数定义行
  • H1行
  • 帮助文本
  • 函数体
  • 注释

函数定义行具有如下形式:function [outputs] = name(inputs)

输出参量在方括号内,输入参量在圆括号内;
函数也可以作为其他函数的元素,在这种情况下,这些函数就称为子函数;
MATLAB可以识别长达63个字符的函数名,再后的字符将被忽略。

H1行是第一个文本行,它是函数定义行后边的单独的注释行。

帮助文本是紧跟在H1行后边的文本块,用来为函数提供注释和在线帮助。

函数体包含了执行计算和给输出变量赋值的所有MATLAB代码。

4.2 运算符

4.2.1 算术运算符

MATLAB有两种不同类型的算术运算。

矩阵算术运算按线性代数的规则来定义,数组算术运算则逐个元素地执行,且可使用多维数组。句点字符(.)用来区分数组运算和矩阵运算。

例如:A * B表示传统意义的矩阵乘法,而A .* B则表示数组乘法。

又由于加法和减法运算对矩阵运算和数组运算时相同的,因此在这两种运算中不使用句点字符。

图像是二维数组,而数组等同于矩阵,所以我们的算术运算符都是适用于图像的。

4.2.2 关系运算符

关系运算符是数组运算符,要求两个操作数必须有相同的维数,除非操作数是标量。

4.2.3 逻辑运算符

逻辑运算符既可以对逻辑数据进行操作,又可以对数值数据进行操作,其具体操作与C语言类似。

4.3 流控制

该部分内容与C等高级编程语言基本类似,故不作阐述。

4.4 数组索引

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

4.5 函数句柄、单元数组和结构

4.5.1 函数句柄

函数句柄是一种MATLAB数据类型,其中包含有引用函数时的所有信息,其优点在于可以将函数句柄作为调用中的参量传递到另一个函数。

函数句柄有两种不同的类型,都用函数句柄运算符@来创建。

  • 命名函数句柄,在运算符@的后边跟一个希望的函数名称。
 >> f = @sin
f =
  包含以下值的 function_handle:
    @sin
>> sin(pi / 4)
ans =
    0.7071
>> f(pi / 4)
ans =
    0.7071
  • 匿名函数句柄,由代替函数名的MATLAB表达式形成。构建匿名函数的通用格式为:@(input - argument - list) expression
>> 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)

如以上两个例子,分别为得到输入的平方、计算两个变量的平方和,其调用方式与命名函数句柄一致。

4.5.2单元矩阵

单元矩阵提供了一种在一个变量名下组合一套对象(如数字、字符、其他单元矩阵)的方法。

相当于将不同的实体使用单元数组组织成一个单一变量。类似于结构但又有所不同。但是单元的地址由数字寻址,而结构的元素则由用户定义的称为字段的名称寻址。

值得注意的是,单元数组包含有参量的副本,但却不包含指向这些参量的指针,若单元中的某一个对象在单元创建后发生了改变,这种变化不会反映到单元中。

总结

MATLAB作为一款强大的图形图像处理软件,提供了一个宽泛的处理多维阵列的函数集合,同时包含了强大的功能库和工具箱,更是把数值计算的功能扩展进来,并不仅仅局限于向量的运算。其基本语法与一般的脚本语言类似,简而易懂,数据类型、流控制语句等也与C等高级编程语言类似,故而在学习和使用上为我们提供了很大的便利。

你可能感兴趣的:(MATLAB)