序言

1.1 知识背景

数字图像处理

一幅图像可以定义为–个二维函数f(x,y),其中x和y是空间坐标,而f在任意―对坐标(x, y)处的幅度称为该点处图像的亮度或灰度。当x, y和f的幅值都是有限的离散值时,称该图像为数字图像。

图像处理和计算机视觉之间并没有明显的界限,但我们可通过考虑三种类型的计算机化处理来加以划分:低级、中级和高级处理。
低级处理包括原始操作,如降低噪声的图像预处理、对比度增强和图像锐化。低级处理的特点是其输入与输出均为图像。
图像的中级处理涉及诸如分割这样的任务,即把图像分为区域或对象,然后对对象进行描述,以便把它们简化为适合计算机处理的形式,并对单个对象进行分类(识别)。中级处理的特点是,其输人通常是图像,但输出则是从这些图像中提取的属性(如边缘、轮廓以及单个对象的特性)。
高级处理通过执行通常与人类视觉相关的感知函数,来对识别的对象进行总体确认。

2. 基本原理

在处理图像时,图像远点定义在(x,y) = (0,0)处。而工具箱中原点在(r,c) = (1,1)处。

2.1 读取图像

f = imread(‘filename’)
在这里插入图片描述
函数size可以给出一幅图像的行数与列数。
size(f)
ans = 1024 1024
使用如下格式来自动确认一幅图像大小,返回行数(M)和列数(N)。
[M,N] = size(f)
函数whos可以显示一个数组的附加信息。如whos f。

2.2 显示图像

在MATLAB桌面上图像一般使用函数imshow来显示,该函数的基本语法为
imshow(f,G)
imshow(f, [low high])
会将所有小于或等于low的值都显示为黑色,所有大于或等于high的值都显示为白色。界于low和high之间的值将以默认的级数显示为中等亮度值。
imshow(f, [ ])
可以将变量low设置为数组f的最小值,将变量high设置为数组f的最大值。函数imshow的这一形式在显示一幅动态范围较小的图像或既有正值又有负值的图像时非常有用。
在这里插入图片描述

2.3 保存图像

imwrite(f,‘filename.xxx’)
imwrite(f,‘filename’,‘xxx)’)
在这里插入图片描述

2.4 数据类

在这里插入图片描述

2.5 图像类型

1.亮度图像
一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65535]。若图像是double类,则像素的取值就是浮点数。规定双精度型归一化亮度图像的取值范围是[0,1]。
2.二值图像
一幅二值图像是一个取值只有0和1的逻辑数组。
B = logical(A)
若A中含有除了0和1之外的其他元素,则使用logical函数就可以将所有非零的量变换为逻辑1,而将所有的0值变换为逻辑0。
在这里插入图片描述
3.索引图像
4.RGB图像

2.6 数据类间的转换

B = data_class_name(A)
假设A是一个uint8类数组,则命令B= double (A)会产生一个双精度数组B。这种转换贯穿全书,因为MATLAB希望数值计算中的所有操作数都是双精度浮点数。假设c是一个取值范围为[0, 255](很有可能包含小数)的double类数组,则命令D= uint8(C)可将其转换为一个uint8类数组。
若一个double类数组包含有区间[0,255]之外的值,则在使用上述方法将其转换成uint8类数组时,MATLAB 会将所有小于0的值转换为0,所有大于255的值转换为255,而在0和255之间的值将全部舍去小数部分转换为整数。因此,在将double类数组转换成uint8类数组之前,有必要先对其进行适当的缩放,以使其元素的取值尽量在区间[0.255]内。

2.7 数组索引

2.7.1 向量索引

v = [1 3 5 7 9]
v(2)
ans = 3
使用转置运算符(.')可将行向量转换为列向量。
使用冒号(:)存取元素的数据块。
v(2:end)
ans = 3 5 7 9
v(: ) 得到列向量
v(1:end)得到行向量
v(1:2:end)表示索引从1开始计数,步长为2,直到最后一个元素时停止。步长也可以为负。
一个向量也可用做另一个向量的索引。
v([1 4 5])
ans = 1 7 9

2.7.2 矩阵索引

A = [1 2 3; 4 5 6; 7 8 9]
A(2,3)
ans = 6
矩阵索引中使用冒号操作符来在矩阵中选择一个二维元素块。
A(:,3)=0
A的最后一列置0。
可以使用向量作为矩阵的索引。
使用矩阵寻址可以实现更复杂的方案。使用索引矩阵的一种特别有用的寻址方法是形式A(D)其中D是一个逻辑数组。
一个矩阵所有元素之和
s=sum(A(😃)

2.8 一些重要的标准数组

在这里插入图片描述

2.9 M函数编程

MATLAB中的M文件可以是简单执行一系列MATLAB语句的脚本,也可以是接受变量并产生一个或多个输出的函数。
M文件由文本编辑器创建,并以filename.m形式的文件名存储,如average.m和filter.m文件。
M文件函数的组成部分为

  • 函数定义行
  • H1行
  • 帮助文本
  • 函数体
  • 命令
    函数定义行的形式为
    function [outputs] = name(inputs)
运算符

MATLAB运算符可以分为以下三种主要类别:
1.执行数值计算的算术运算符
2.在数量上比较操作数的关系运算符
3.执行函数AND、OR和NOT的逻辑运算符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

流控制

在这里插入图片描述
条件语句if
在这里插入图片描述
for语句
在这里插入图片描述
while语句
在这里插入图片描述
break,continue
switch语句
在这里插入图片描述
switch构造基于变量或表达式的值来执行语句组。关键词case和otherwise用于描述语句组。仅执行首先匹配的case。通常必须有end来匹配switch语句。当同一个case语句中存在多个表达式时,则必须使用大花括号。例如,假设存在一个M函数,该函数接收一幅图像f,并将其转换为一个指定的类,称该类为newclass。该转换只对三种图像类有效,即uint8类图像、uint16类图像和double类图像。下列代码片断执行我们所期望的转换,并且会在输入图像不是所允许转换的类时输出错误信息:
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐