第二章
数据类
* double:使用最频繁,图像处理最常用
* logical:逻辑数据,只有0和1
* char:字符类,表示Unicode字符,一个字符串就是一个1*n的字符矩阵
2.6图像类型
四种图像类型:亮度图(灰度图),二值图,索引图,RGB图。
* 亮度图像:归一化取值表示亮度,若是unit8,则整数值范围是[0,255]。
* 二值图像:取值只有0和1的逻辑数组。
B = logical(A)
:A是0和1构成的数组,此语句创建数组B。若A中含有其他元素,则非零量为逻辑1。islogical( )
判断一个数组是否为逻辑数组。
IPT中用于图像类和类型间的转换的函数:
2.8数组索引
通过索引方案,简化数组操作,提高程序运行效率。
2.8.1向量索引
v = [1 3 5 7 9]
:产生1,3,5,7,9的一个数组。v(2) = 3。维数为1*N的数组,行向量。w = v.'
:可以将向量转置,(行向量变为列向量)。v(1:3); v(2:4); v(3:end);
:可以选取数组中相应的元素,end表示到最后。
*v(:)
:将原向量(全部元素)变为一个列向量,按列的顺序进行排序。
v(1:end)
:产生一个行向量,依然按列的顺序展开。
v(end:-2:1)
:从最后一个元素,步长为2,知道第一个元素
v(1:2:end)
:与上相反
- `linspace(a,b,n):以a和b为界限,线性分割的n个元素。
v([1,4,5])
:可以挑出向量v中的第1,4,5个元素。
2.8.2矩阵索引
A =[1 2 3;4 5 6;7 8 9]
:创建矩阵;A(1,2)
:A矩阵的第一行,第二列元素。c3 = A(:,3)
:第三列提取出来;r2 = A(2,:)
:第二行提取出来。T2 = A(1:2,1:3)
:矩阵前两行提出来。A(:,3) = 0
:则令A矩阵的第三列为0;A(end,end)
:最后一个元素;A(end,end - 2)
:类似。A(2:end,end:-2:1)
:注意列的读取顺序发生了变化。
E = A([a b],[c d])
:挑出(行a,列c)(行a,列d)(行b,列c)(行b,列d)的元素。- 逻辑数组的寻址方法:
D = logical([1 0 0 ;0 0 1;0 0 0]);
A(D)
:得到D中不为0的相应元素,以列向量的形式呈现。 s = sum(A(:))
:对A的所有元素求和。sum(A)
:对各列元素求和。
2.8.3选择数组的维数
size(A,1)
:给出数组的行数;size(A,2)
:给出数组的列数。
2.9一些重要的标准数组
- zeros(M,N) : M*N大小的double类0矩阵(元素全是0);
- ones(M,N):M*N的double类矩阵(元素全是1);
- ture(M,N):M*N的logical类矩阵,元素全是1;
- false(M,N):…元素全是0;
- magic(M):M*M的矩阵,每行、每列以及对角线的元素和相等。
- rand(M,N):M*N的矩阵,元素是正太分布的随机数,随机数的均值是1,方差是0.
2.10M函数编程简介
图像处理工具箱的一大特征就是对MATLAB环境的透明访问。
2.10.1M文件
- M文件的函数组成部分为: 函数定义行,H1行,帮助文体,函数体,命令。
函数定义行的形式:function [outputs] = name(inputs)。
- 例如,计算两幅图像的和与积:function [s,p] = sumprod(f,q)
f,q是输入图像,s是和图像,p是积图像,function必须出现在左侧,输出必须在方括号内,输入必须在圆括号呢。
无输出,则可无括号或等号。函数可在命令提示符处调用。
H1行:函数的说明文本,用于说明函数用途,提供M文件的重要摘要信息。输入 help function_name后最先出现的文本。
帮助文本:紧跟H1行后面,为函数提供注释或者在线帮助。
“%”后面看作函数注释行。
edit function_name
:可打开文件并进行编辑。
2.10.2运算符
算术运算符
两类不同的运算符:矩阵运算符(线性代数的规则定义);数组运算符(可以逐个运算的执行),可用于多维数组。例如:
A*B:表示传统意义的矩阵乘法;
A.*B:表示数组成都,A和B是大小相同的数组。加减法无区分。数组和矩阵运算符:
IPT支持的图像算数函数:
- max和min函数:
1.c = max(A)
:若A是一个向量返回其最大元素,若是一个矩阵,返回每列的最大值,返回一个行向量。
2.c = max(A,B)
:返回和A,B相同的数组,由A,B的最大元素组成。
3.c = max(A,[],dim)
:返回dim决定的行上的最大值。
4.[c,i] = max(...)
:最大值存入c与第一种一样,索引存入i。 - 关系运算符:对于向量和举行数组,必须维数相同,或者其中一个是标量(每一个元素和这个标量比较)。
1.A,B为两个矩阵 ,则A==B:生成与A和B相同维度的逻辑数组,相同位置元素相同则为1,否则为0。
2.A>=B:A的元素大于B的元素的为1,否则为0.
逻辑运算符:& (And) ; | (Or) ; ~(Not);xor(异或);all;any
1.and,or,not,xor(异或):对数组内部元素进行操作,与数电等所学相同。注意使用方法,例如:
A&B ; A|B ; A~ ;xor(A,B).
2.all:若一个向量中所有元素非零,返回1,否则返回0;
any:若一个向量中存在元素非零,则返回1,否则返回0。all,any均是按列进行操作。
逻辑运算函数:
一些重要变量和常量: