Digital Image Processing 学习笔记2 (4)

Digital Image Processing 学习笔记2

Digital Image Processing 学习笔记2

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越小,图像退化越严重。

其支持的格式有

Digital Image Processing 学习笔记2

imfinfo - Information about graphics file.

用法:k = imfinfo (\'路径名+文件名+扩展名\')

此时的k可以看做一个结构体(针对C语言),具体显示可以使用"."操作符,如k.Filename。

round – Round to nearest integer.

用法:m = round(x)

2.5 数据类

MATLAB默认的数据类型是double,其支持的数据类有

Digital Image Processing 学习笔记2

Digital Image Processing 学习笔记2

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。矩阵中按列操作。

一些重要的变量和常量

Digital Image Processing 学习笔记2

数的表示

可以使用科学技术规则。

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/O

input – Request user input.

disp – Display text or array.

strread – Read formateed data from string.

strcmp – Compare strings(case sensitive)

2.10.6 单元数组与结构简介

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypffx.html