Figure - Create figure graphics object. 用以显示多福图像时辅助使用。
用法:imshow(f), figure, imshow(g)
2.4 保存图像Imwrite - Write image to graphics file.
用法:imwrite(f, \'路径名+文件名+扩展名\')
针对JPEG图像使用imwrite,可以通过调整最后一个缺省参数达到压缩效果:
用法:imwrite(f, \'路径名+文件名+扩展名\', q)
其中的q是一个0-100之间的整数,q越小,图像退化越严重。
其支持的格式有
imfinfo - Information about graphics file.
用法:k = imfinfo (\'路径名+文件名+扩展名\')
此时的k可以看做一个结构体(针对C语言),具体显示可以使用"."操作符,如k.Filename。
round – Round to nearest integer.
用法:m = round(x)
2.5 数据类MATLAB默认的数据类型是double,其支持的数据类有
2.6 图像类型支持四种图像类型:亮度图像、二值图像、索引图像、RGB图像。
2.6.1亮度图像类型有unit8 ,范围是[0, 255];unit16,范围[0, 65535];double,归一化之后范围[0, 1]。
2.6.2 二值图像其像素取值只能是0或者1。
logical – Convert numeric values to logical
用法:B = logical(A)
islogical - Determine if input is logical array
用法:tf = islogical(A)
如果是二值图像,返回1,;如果不是,返回0。
2.7 数据类与图像类型间的转换 2.7.1 数据类型间转换语法简单:B = data_class_name(A);比如B = double(A)。
*从double到Unit8的时候,小于0的全部置为0,大于255的置于255,其他部分向下取整。
2.7.2 图像类和类型间的转换mat2gray - Convert matrix to grayscale image.
im2bw – Convert image to binary image, based on threshold.
im2double – Convert image to double precision.
等等函数,其中用关系运算符也可以生成二值图像,如
$$f=\begin{bmatrix}1 & 2 \\ 3 & 4\end{bmatrix} \ f > 2 : \ \begin{bmatrix} 0 & 0 \\ 1 & 1 \end{bmatrix}$$
2.8 数组索引 2.8.1 向量索引转置运算符(.\'),可以将行向量转置为列向量;取元素的数据块可以使用冒号操作符(:);end表示向量的最后一个元素
linspace – Generate linearly spaced vectors
用法:x = linspace(a, b, n)
产生一个含有n个元素的行向量x,这n个元素线性地隔开并且包含a与b。
2.8.2 矩阵索引example:
$$A=\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}$$
使用end作为索引:$B = A(2 : end, end : -2 :1)$,得到的结果为$\begin{bmatrix} 6& 4 \\ 7 & 9 \end{bmatrix}$,是因为从行方向上看取第2行至第3行;从列方向上看,从最后一行至第1行间隔取。
使用向量作为索引:$C = A([1 3], [2 3])$,得到的结果为$\begin{bmatrix} 2 & 3 \\ 8 & 9 \end{bmatrix}$,是因为行方向取1,3行,列方向取2,3列。
矩阵索引还可以使用寻址方式,形式为$A(D)$,其中D是一个逻辑数组,例如$\begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 1\\ 0 & 0 & 0 \end{bmatrix}$,那么$A(D) = \begin{bmatrix} 1 \\ 6\end{bmatrix}$
使用冒号,会将交矩阵所有元素按照列方向排成一个列向量,比如$E = B(:)$可以得到结果$E = \begin{bmatrix}1 \\ 4 \\ 7 \\ 2 \\ 5 \\ 8 \\ 3 \\ 6 \\ 9 \end{bmatrix}$
sum – Sum of array elements
用法:sum(A)
可以得到的结果是 $\begin{bmatrix}12 & 15 & 18\end{bmatrix}$
2.8.3 选择数组维数Operation(A, dim)
operation是一个可能的操作, A是一个数组,dim是一个标量,表明沿着第dim维给出相应结果。
ndims – Number of array dimensions
用法:ndims(A)
其结果不会小于2,因为即使是标量,我们也认为是个$1\times 1$的数组。
2.9 一些重要的标准数组$zeros(M,N)$生成一个大小$M\times N$的double类数组,其元素均为0。
$ones(M,N)$生成一个大小$M\times N$的double类数组,其元素均为1。
$true(M,N)$生成一个大小$M\times N$的logical类数组,其元素均为1。
$false(M,N)$生成一个大小$M\times N$的logical类数组,其元素均为0。
$magic(M)$生成一个大小$M\times M$的魔方数组,每一行元素之和、每一列元素之和和主对角线元素之和相等,主要用于测试目的,且元素均为整数。
$rand(M,N)$生成一个大小$M\times N$的double类数组,其元素在[0, 1]之间。
$randn(M,N)$生成一个大小$M\times N$的double类数组,其元素是正态分布的随机数,随机数均值为0,方差为1,如高斯分布。
2.10 M函数编程简介 2.10.1 M文件M文件可以是简单执行一系列MATLAB语句的脚本,也可以是接受变量并产生一个或多个输出的函数。
函数的定义形式:
$$function [outputs] = name(inputs)$$
2.10.2 运算符三类运算符:
执行数值计算的算术运算符
在数量上比较操作数的关系运算符
执行函数AND、OR和NOT的逻辑运算符
算术运算符*点操作符,比如".^"、".*"都是点对点操作,两个操作数必须是相同的维数。
关系运算符作用于两个相同维数的矩阵,点对点进行关系判断。其中"非"是"~="
逻辑运算符和函数AND:"&" OR:"|" NOT:"~"
逻辑函数:
xor(异或):作用于两个相同维数的数组
all:若一个向量中所有元素都非零,则返回1。矩阵中按列操作。
any:若一个向量中任何元素都非零,则返回1。矩阵中按列操作。
一些重要的变量和常量 数的表示可以使用科学技术规则。
2.10.3 流控制if, else , else if:
if expression1
statements
elseif expression2
statements
else
statements
end
for:
for index = start: increment: end
statement
end
switch
switch switch_expression
case case_expression
statement
case case_expression
statement
otherwise
statement
end
如果case中有多个表达式,用花括号;且与C语言的switch相比,不需要break语句。
2.10.4 优化代码向量化代码:将循环问题变成向量或矩阵预算。
预分配内存:计算开始前就分配足够的空间内存。
2.10.5 交互式I/Oinput – Request user input.
disp – Display text or array.
strread – Read formateed data from string.
strcmp – Compare strings(case sensitive)
2.10.6 单元数组与结构简介