第三章 MATLAB图形图像处理.

Slides:



Advertisements
Similar presentations
一、 一阶线性微分方程及其解法 二、 一阶线性微分方程的简单应用 三、 小结及作业 §6.2 一阶线性微分方程.
Advertisements

第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
2.6 隐函数微分法 第二章 第二章 二、高阶导数 一、隐式定义的函数 三、可微函数的有理幂. 一、隐函数的导数 若由方程 可确定 y 是 x 的函数, 由 表示的函数, 称为显函数. 例如, 可确定显函数 可确定 y 是 x 的函数, 但此隐函数不能显化. 函数为隐函数. 则称此 隐函数求导方法.
对本书、视频等任何 MATLAB 问题,作者做到有问必答! 你买的不仅仅是书,更是一种 “ 有问必答 ” 的服务!
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
全微分 教学目的:全微分的有关概念和意义 教学重点:全微分的计算和应用 教学难点:全微分应用于近似计算.
第三节 微分 3.1 、微分的概念 3.2 、微分的计算 3.3 、微分的应用. 一、问题的提出 实例 : 正方形金属薄片受热后面积的改变量.
对本书、视频等任何MATLAB问题,作者做到有问必答!
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
智能小车沿线行驶的图像识别 答 辩 人: 指导老师: 2017/3/17.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
§5.3 定积分的换元法 和分部积分法 一、 定积分的换元法 二、 定积分的分部积分法 三、 小结、作业.
不确定度的传递与合成 间接测量结果不确定度的评估
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
1.5 场函数的高阶微分运算 1、场函数的三种基本微分运算 标量场的梯度f ,矢量场的散度F 和F 旋度简称 “三度” 运算。
2-7、函数的微分 教学要求 教学要点.
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
对本书、视频等任何MATLAB问题,作者做到有问必答!
第三章 多维随机变量及其分布 §2 边缘分布 边缘分布函数 边缘分布律 边缘概率密度.
数字图像处理第一次习题课 ——图像增强专题
数字图像处理 第五讲、图像锐化 轮廓细化 ©Digital Image Process, 2007, IIP Lab GSCAS.
绘制圆与多边形 椭圆形 绘制椭圆形的方法是 drawOval(x ,y , width , height), 绘制实心椭圆形的方法是
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第七章 操作符重载 胡昊 南京大学计算机系软件所.
使用矩阵表示 最小生成树算法.
2.1.2 空间中直线与直线 之间的位置关系.
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
第一章 函数与极限.
图片与视频数字化. 图片与视频数字化 图片分类 根据图片的构成元素来分 位图: 由像素组成,计算机按顺序存储每个像素点 的颜色信息的保存方式获得的图片。 位图放大后会模糊失真,存储空间相对较大。 矢量图: 由图元组成,通过数学公式计算获得的图片。 放大后不会失真,占用空间小。
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
概 率 统 计 主讲教师 叶宏 山东大学数学院.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第四章 一次函数 4. 一次函数的应用(第1课时).
第七章 图像分割.
姚金宇 MIT SCHEME 使用说明 姚金宇
电影海报设计 ——巧用“分层云彩”滤镜.
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.1.2 空间向量的数量积运算 1.了解空间向量夹角的概念及表示方法. 2.掌握空间向量数量积的计算方法及应用.
第五章 图像的噪声抑制.
概 率 统 计 主讲教师 叶宏 山东大学数学院.
第三章 函数的微分学 第二节 导数的四则运算法则 一、导数的四则运算 二、偏导数的求法.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
学习任务三 偏导数 结合一元函数的导数学习二元函数的偏导数是非常有用的. 要求了解二元函数的偏导数的定义, 掌握二元函数偏导数的计算.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
静定结构位移计算 ——应用 主讲教师:戴萍.
2019/5/21 实验一 离散傅立叶变换的性质及应用 实验报告上传到“作业提交”。 11:21:44.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
数字图像处理 第七章 邻域运算.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
滤波减速器的体积优化 仵凡 Advanced Design Group.
成果展示 第六章 边缘检测 巫义锐 河海大学计算机与信息学院.
图片与视频数字化. 图片与视频数字化 图片分类 根据图片的构成元素来分 位图: 由像素组成,计算机按顺序存储每个像素点 的颜色信息的保存方式获得的图片。 位图放大后会模糊失真,存储空间相对较大。 矢量图: 由图元组成,通过数学公式计算获得的图片。 放大后不会失真,占用空间小。
基于列存储的RDF数据管理 朱敏
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
第三章 从概率分布函数的抽样 (Sampling from Probability Distribution Functions)
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
位似.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
§4.5 最大公因式的矩阵求法( Ⅱ ).
入侵检测技术 大连理工大学软件学院 毕玲.
第三章 图形的平移与旋转.
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

第三章 MATLAB图形图像处理

3.4 MATLAB数字图像处理 图像处理就是将图像转换为一数字矩阵的形式,并采用一定的算法对其进行的必要计算,以提高图像的视觉质量或提取出有用信息的过程。 MATLAB包含了功能非常强大的图像处理工具箱——IPT(Image Processing Tools)。 本节主要介绍数字图像的概念、表示、读取、显示与存储技术,后面几节分别介绍一些常用图像处理技术及其在MATLAB中的实现方法。

3.4.1数字图像的概念 从图像处理的角度来看,则可以分为模拟和数字两大类,前者包括光学系统成像、胶片影像等,后者是将模拟图像经抽样离散化处理后形成的、计算机能够辨识的点阵图像。 数字图像存在的形式就是存储在硬盘等介质中的数字化后的二维数组。现代数字图像与模拟图像相比具有不可比拟的优点,突出表现在易于存储、便于处理、传输方便、高抗扰性和易于加密等。

3.4.2 数字图像的表示 一幅灰度图像表示为如下矩阵形式: fij代表像素(i,j)的亮度值,其范围是从0~255,0表示黑,255表示白。 彩色图像是用红、绿、蓝三组二维矩阵来表示的,这时的f记为:[f(x,y)r,f(x,y)g,f(x,y) b],其中三组中的每个数值的范围都是0~255。

3.4.3 图像格式与图像类型 图像格式是指用来存储图像的文件格式。图像格式通常有好多种,常因操作系统和图像处理软件的不同而有所区别,但总的发展趋势是格式变得更加统一。常用的图像格式如表3-7所示。 格式名称 扩展名 格式描述 JPEG .jpg .jpeg 静止图像格式 BMP .bmp Windows位图 TIFF .tif, .tiff 加标识信息的图像文件格式 GIF .gif 图形交换格式 PNG .png 可移植网络图形格式 XWD .xwd X Window存储图形格式 表3-7 MATLAB中常用图像/图形格式

与图像格式的定义不同,图像类型是依图像数组中数值与像素颜色之间的关系不同而对图像进行的分类。图像类型主要可分为四种: 灰度图像、索引图像、二值图像和RGB图像。 需要说明的是,在MATLAB中,无论是哪种类型的图像,其存储格式通常不外乎三种,即:uint8(8位无符号整型数)、uint16(16位无符号整型数)及double(双精度数浮点数)。

1.灰度图像 灰度图像是一个数据矩阵,该矩阵的每一个元素对应于图像中的一个像素点(pixel),元素的值代表一定范围的灰度级。 对于uint8类型的图像,则灰度取值范围为[0,255]; 对于uint16类型的图像,则灰度取值范围为[0,65535]; 对double类型的,则像素的取值为浮点数。灰度图像一般不自带调色板,而使用默认的系统调色板。

2.索引图像 索引图像是一种把图像像素值直接作为RGB调色板下标的图像。通常索引图像与灰度图像的最大区别在于,一幅索引图像除了包括图像数据矩阵以外,还包含一个图像调色板。 索引图像主要用于网络上的图片传输和一些对图像像素、大小等有严格要求的地方。

3.二值图像 二值图像是由0和1两种逻辑值数组组成的数字图像,逻辑值0相当于在灰度图像中的0,逻辑值1相当于灰度图像中的255。二值图像每一像素只有0和1两种可能的数值或灰度等级状态。二值图像常用于对图像内容进行标记处理。

4.RGB图像 RGB图像通常称为真彩色图像,它直接来源于图像传感器件所采集的模拟信号量化后的输出。每一像素点的数字量化输出均由三个数值来分别标明红、绿、蓝分量的幅值。 在MATLAB中,一幅RGB图像由m×n×3的数组来表示,其中m和n分别为图像的宽度和长度,3代表三个颜色分量。对于常用的RGB图像,每个颜色分量均由一个字节来表示,这样就构成24位的RGB图像。

常用图像类型转换函数 类型转换函数 函数功能描述 rgb2gray rgb2ind im2bw ind2gray gray2ind dither 将一幅RGB图像转换为灰度图像; 将一幅RGB图像转换为索引图像; 使用阈值截取方法,将一幅灰度图像、索引图像或RGB图像转换为二值图像; 将一幅索引图像转换为灰度图像; 将一幅灰度图像转换为索引图像; 使用抖动算法,将RGB图像转换为索引图像,或将灰度图像转换为二值图像。

3.4.4 数字图像的读取 在MATLAB中无论对图像进行何种处理,首选必须将目标图像读入到MATLAB工作环境。MATLAB中使用imread函数读取图像,imread命令支持MATLAB IPT支持的所有图像格式,其语法格式为: imread(‘picname’) 其中picname为一个图像文件名,它包含了图像文件的全名(含扩展名)。

[p, map]= imread(picname, 'fmt') 对于索引图像的读取,命令格式为: [p, map]= imread(picname, 'fmt') 其中fmt为图像格式,可选的值为bmp、hdf、ico、jpg、pcx、png和xwd 除了使用命令whos检查内存中的图像信息外,还可以使用命令imfinfo则了解更多的图像信息,例如: >> imfinfo football.jpg ans = Filename: 'D:\MATLAB7\toolbox\images\imdemos\football.jpg' FileModDate: '01-Mar-2001 08:52:38' FileSize: 27130 Format: 'jpg' FormatVersion: '' Width: 320 Height: 256 …

imshow(p,G) 或 imshow(p,[low high]) 3.4.5 数字图像的显示与存储 MATLAB进行图像处理时,一般使用函数imshow或imview显示图像。 imshow在一个单独的图形窗口显示图像,其基本语法格式为: imshow(p,G) 或 imshow(p,[low high]) 其中,第一种命令格式,p为读取图像时存入的数组名,G是显示图像的灰度级数。若将G省略,默认的灰度级数是256。 第二种命令格式中,将所有灰度值小于或等于low的都显示为黑色,所有大于或等于high的则都显示为白色,而介于两者之间的将以像素实际的灰度值显示。若将方括号中的low和high省略,则显示的灰度范围从图像数组p中灰度最小至p中灰度最大值。

imview(p) 或 imview('football.jpg') imview函数也是在一个单独的窗口内显示图像,同时提供了图像尺寸、数据类型和灰度范围等信息。用户还可通过一个图形窗口左下角查看当前鼠标所在位置的像素值。imshow和imview显示football.jpg的效果分别如下图所示。

(a) imshow 显示图像 (b) imview 显示图像 imshow和imview显示football.jpg的效果分别如图3.28中(a)、(b)所示。 (a) imshow 显示图像 (b) imview 显示图像

或 imwrite(p, ' picname',' fmt') imwrite(p, ' picname',' quality', q) 图像的存储: 使用函数imwrite 来保存图像,其基本语法格式为: imwrite(p, ' picname') 或 imwrite(p, ' picname',' fmt') 其中p为待保存的图像数组,picname为保存时使用的文件名,fmt为图像格式,可以保存为表3-7中的任一格式。 特别地,在保存为jpg格式图像时,命令格式则为: imwrite(p, ' picname',' quality', q) 在此处,picname则为包含了文件扩展名的完整文件名,quality为保存的文件质量等级控制字,具体保存为哪个等级由第四个参数q来指定,q为0~100之间的整数,数值越大,文件质量越好。

3.5 图像的灰度变换与直方图 在计算机中一幅二维数字图像表示为一个矩阵,该矩阵中的元素是位于相应坐标位置的图像灰度值。对图像处理包括对彩色图像的处理,往往都是对像素灰度的操作,所以对图像进行灰度变换是图像处理过程中最简单、最基础内容。 在图像处理中,直接对像素进行的操作称为空间域(或简称空域)处理。

3.5.1图像的灰度变换 在MATLAB中,用函数imadjust可完成灰度图像的灰度变换。其基本语法格式为: g=imadjust(p,[low_in high_in],[low_out high_out], gamma) 其中p为读入到MATLAB中的待变换图像矩阵; [low_in high_in]指定了p图像中被执行变换操作的灰度范围; [low_out high_out]是p图像中的像素变换后被映射到low_out~high_out的灰度级上。 默认状态下,[low_out high_out]及[low_in high_in]为空,此时等价于[0 1],表明输入与输出灰度级为0~255(uint8)或0~65535(uint16)。

参数gamma 参数gamma是指变换映射的方式,默认方式时gamma取作1,完成线性映射,这时变换前后的灰度级没有被加权;

几种灰度变换过程: 【例3.5.1】将football.jpg灰度级0.1~0.6范围的像素线性变换到0~1上,效果如图3.29中图(b)所示: p = imread('football.jpg'); g1 = imadjust(p,[0.1 0.6],[]); subplot(1,2,1); imshow(p); xlabel('(a)'); subplot(1,2,2); imshow(g1); xlabel('(b)');

【例3.5.2】将图像p向高灰度级变换,gamma取0.6,效果如图3.29中图(c)所示。 g2 = imadjust(p,[],[],0.6); subplot(2,2,3); imshow(g2); xlabel('(c)');

【例3.5.3】将图像p做灰度倒相变换,即输出源图的负片,gamma取1,效果如图3.29中图(d)所示。 g3 = imadjust(p,[0 1],[1 0]); subplot(2,2,4); imshow(g3); xlabel('(d)');

3.5.2灰度直方图 图像灰度直方图描述了一幅图像的灰度级内容,即各个灰度级像素数目的统计。 在MATLAB图像处理中,通过命令imhist来给出图像的直方图。其基本语法格式为: h = imhist(p,b) 其中p为读入到MATLAB环境中的图像矩阵, 参数b指明直方图统计时显示的整个灰度级分段数目,若图像为uint8数据格式,当b=2时,灰度分为0~127及128~256两个区段。省略b时,表明灰度级不分段,这也是imhist的默认调用方式。

【例3.5.4】显示图像p的灰度直方图时,先要把RGB彩色图像p变换为灰度图像I。运行下列程序,得到如图3.30所示直方图。 p = imread('football.jpg'); I = rgb2gray(p); imhist(I);

3.5.3直方图均衡化 通过直方图均衡化做适当的调整,即把一幅已知灰度概率分布图像中的像素灰度做某种映射变换,使它变成一幅具有均匀概率分布的新图像,使图像视觉效果更加清晰。 直方图均衡的MATLAB函数为histeq,其基本语法格式为: g = histeq(p, outlev) 其中p为读入的图像矩阵, outlev为输出图像的灰度级数。outlev的默认值为64,即64个灰度级,这样对图像的细节有一定改变。通常将其赋值为256,即全灰度级(uint8)。

p = imread('tire.tif'); subplot(2,2,1); imshow(p); xlabel('(a) '); imhist(p); xlabel('(b) '); g = histeq(p); subplot(2,2,3); imshow(g); xlabel('(c) '); subplot(2,2,4); imhist(g); xlabel('(d) ');

3.6 图像的增强滤波 直方图均衡化是图像增强中常用的一种方法,图像增强技术还包括图像平滑滤波、图像锐化等。 3.6 图像的增强滤波 直方图均衡化是图像增强中常用的一种方法,图像增强技术还包括图像平滑滤波、图像锐化等。 本节将从线性与非线性、平滑与锐化等不同角度介绍一些实用的空域图像增强技术。

3.6.1 空域滤波概述 图像增强技术从总体上可分为空域增强和频域增强两大类。空域增强也称为空间增强,是直接对图像中的像素进行操作的一种增强过程。 空域增强方法大致可分为对比度拉伸、平滑滤波和锐化滤波。灰度拉伸主要是利用点运算来修改图像像素灰度值;而平滑和锐化均是利用模板来修改(卷积运算)像素灰度值,从实现方法上讲是基于图像滤波的操作过程。

3.6.2 空域滤波分类 根据模板特点不同可以将空域滤波分为线性和非线性两大类。 3.6.2 空域滤波分类 根据模板特点不同可以将空域滤波分为线性和非线性两大类。 按照空域滤波器的功能不同,又可将其分为平滑滤波器和锐化滤波器。平滑滤波器可以用低通滤波实现,目的在于模糊图像或消除图像噪声;锐化滤波器是用高通滤波实现的,目的在于增强被模糊图像的细节部分,具体可分为以下3类。 1.均值滤波 均值滤波也称线性平滑滤波,其输出的像素值是由领域像素的平均值决定。

2.中值滤波 中值滤波也称为非线性平滑滤波,其基本原理与均值滤波不同之处在于:中值滤波的输出像素值是由领域像素的中间值而不是平均值决定,中值滤波的名字也因此而得。与均值滤波相比,中值滤波对灰度发生聚变的像素不如均值滤波那么敏感,因此中值滤波能尽量保存图像的细节,模糊效应较少,适于消除图像中孤立噪声。 3.锐化滤波 锐化滤波就是使用微分对图像进行处理,以此来锐化由于领域平均导致的图像模糊。图像处理中最常用的微分是利用图像沿某方向上的灰度变化率,即梯度进行的。

3.6.3 基于MATLAB的空域增强滤波 基于MATLAB图像处理的空域滤波,首先要定义滤波器,然后才能调用定义好的滤波器进行滤波。 imnoise是MATLAB提供的图像噪声模拟函数,其基本语法格式为: pn = imnoise(p, ’type’, para) 其中pn为添加噪声的输出图像,p为原图像,type指定噪声的类型,para为每种类型噪声的参数。 常用的噪声有:gaussian(高斯噪声)、salt&pepper(椒盐噪声)、speckle(均值为0均匀分布的随机噪声)等。

fspecial函数用来预定义滤波器,其基本语法格式为: h = fspecial(’type’, para) 其中h为预定义的滤波器,参数type指定滤波器的种类,para为与滤波器相关的参数。 滤波器的种类type可以为:gaussian(高斯低通滤波器)、laplacian(拉普拉斯算子)、log(拉普拉斯高斯算子)、prewitt(Prewitt算子)、sobel(Sobel算子)、average(均值滤波器)及unsharp(对比度增强滤波器)等。

imfilter是用来实现线性空间滤波的函数,其基本语法格式为: hp = imfilter(p, w, filter_mode, boundary_options, size_options) 其中hp为经过滤波后输出的图像,p为原图像,参数w为滤波模板,filter_mode指定滤波过程中使用相关核(corr)还是卷积核(conv)。boundary_options控制边界填充方式为边界复制(replicate)、边界循环(circular)还是边界对称(symmetric)。size_options可以为same或者full两者之一。如 hp = imfilter(p, w, ’replicate’) medfilt2是一个二维中值滤波函数,其基本语法格式为: hp = medfilt2(p, [m n], padopt) 其中hp为经过滤波后输出的图像,p为原图像,m及n规定了领域的大小,padopt指定了边界填充方式,默认方式为zeros。

【例3.6.1】对添加了椒盐噪声的图像分别进行均值滤波和中值滤波,滤波前后效果如图3.32所示。 p = imread('coins.png'); p0 = imnoise(p, 'salt & pepper',0.02); % 为原图添加椒盐噪声 H1 = fspecial('average',[3 4]); % 设计均值滤波器H1 p1 = imfilter(p0,H1,'replicate'); %用滤波器H1对图像p0进行滤波 p2 = medfilt2(p0,[3,3],'zeros'); % 对图像p0进行中值滤波 subplot(2,2,1),imshow(p); %分别显示原图及处理后的图像 subplot(2,2,2),imshow(p0); subplot(2,2,3);imshow(p1); subplot(2,2,4);imshow(p2);

图3.32 均值滤波和中值滤波((a)原图像;(b)添加椒盐噪声后图像;(c)均值滤波后图像;(d)中值滤波后图像)

【例3.6.2】 对含有噪声的原图像进行锐化,得到如图所示图像。 p0 = imread('moon.tif'); p = im2double(p0); %将图像数据类型转换为double H1 = fspecial('laplacian',0); %设计拉普拉斯滤波器H1 H2 = fspecial('log',[5 5],0.5); %设计高斯-拉普拉斯滤波器H2 hp1 = imfilter(p,H1,'replicate'); %用滤波器H1对图像p进行滤波 hp2 = imfilter(p,H2,'replicate'); %用滤波器H2对图像p进行滤波 p1 = p - hp1; %还原灰度色调 p2 = p - hp2; %还原灰度色调 subplot(1,3,1),imshow(p0); subplot(1,3,2),imshow(p1); subplot(1,3,3);imshow(p2);

图3.33 拉普拉斯波和高斯-拉普拉斯滤波((a)原图像;(b)拉普拉斯滤波后图像;(c)高斯-拉普拉斯滤波后图像)

3.7 图像的空间变换 图像的空间变换也称为图像的几何变换,是指将用户获得或设计的原始图像,按照需要产生大小、形状和位置的变化。图像几何变换是图像显示技术中的一个重要组成部分,常用的图像几何变换主要包括图像的缩放、图像的剪切及图像的旋转等内容。

3.7.1 图像比例缩放 图像比例缩放是指将给定的图像在x轴方向按比例缩放fx倍,在y轴方向按比例缩放fy倍,从而获得一幅新的图像。有fx=fy和 fx≠fy两种情况。 比例缩放所产生的图像中的像素可能在原图像中找不到相应的像素点,这样就必须进行插值处理。 图像插值处理常用的方法有两种,一种是最邻近插值法,另一种是通过一些插值算法来计算相应的像素值。 MATLAB中提供了三种图像插值方法,即最近邻插值、双线性插值和双三次插值。

通过函数imresize对图像进行插值缩放,其基本语法格式为: ps = imresize(p, m, method ) 其中ps为变换后的图像,p为输入图像,m放大倍数(当m<1时缩小),method为插值方法的选择项,可选最近邻插值法(nearest)、双线性插值法(bilinear)及双三次插值法(bicubic),默认使用最近邻插值法。 另外一种经常用到的语法格式为: ps = imresize(p, [m n], method ) 其中m和n分别为变换后图像的长宽,其它参数含义与上述相同。

【例3.7.1】对liftingbody.png图像进行缩小。 p = imread('liftingbody.png'); w = input('please input a number:'); %交互输入缩小为0.2倍 ps = imresize(p,w); %缩小变换 imshow(p); figure; imshow(ps);

图3.34 对liftingbody.png图像进行缩小前后的效果((a)原图像;(b)缩小后拉伸显示后图像)

3.7.2 图像剪切 图像处理工具箱中通过函数imcrop交互实现图像区域选取功能,用于剪切图像中的一个矩形子图,可用鼠标选取这个矩形,也可以通过参数指定这个矩形顶点的坐标。函数imcrop基本语法格式为: pc = imcrop(p) 或 pc = imcrop(p, rectangle) 其中pc为剪切后的图像,p为输入图像,rectangle为四个变量指定的一个矩形区域,即[left bottom width height],数组中的四个变量分别表示矩形左下角的横坐标、纵坐标、矩形长度及宽度。

【例3.7.2】 对liftingbody.png图像进行剪切。 p = imread('liftingbody.png'); pc = imcrop(p,[80 180 260 220]); %输入矩形尺度进行选取 subplot(1,2,1); imshow(p); subplot(1,2,2); imshow(pc);

3.7.3 图像旋转 图像的旋转是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角度。 3.7.3 图像旋转 图像的旋转是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角度。 在图像进行旋转的时候,需要进行插值,默认的插值方法是最近邻插值法。 在MATBLA工具箱中的,通过函数imrotate实现对图像的旋转,imrotate函数的语法格式为: pr = imrotate(p, angle, method) 或 pr = imrotate(p, angle, method, crop) 其中pr为旋转后得到的图像,p为输入图像,angle为指定的旋转度数,参数method用于指定插值的方法,可选值为nearest(最近邻法),bilinear(双线性插值)及bicubic(双三次插值),默认值为nearest。参数crop允许用户对旋转后的图像进行自动剪切,使返回的图像与原图大小相同。

【例3.7.3】 对liftingbody.png图像进行旋转 p = imread('liftingbody.png'); angle = input('please input angle:'); %输入旋转角度为45度 pr = imrotate(p,angle,'bilinear'); %使用双线性插值方法实现旋转变换 subplot(1,2,1); imshow(p); subplot(1,2,2); imshow(pr);

3.8 图像边缘检测与分割 图像分割是将数字图像分割成互不相交(不重叠)的有意义的子区域的过程。其目的是使各个区域与景物中以某种方式描述的物体相对应,以便进行高层次的图像解释、图像识别等处理。

3.8.1 边缘检测概述 图像分割一般是基于图像像素灰度值的基本特性——不连续性与相似性中的一个或两个来进行的。区域内部的像素一般具有灰度相似性,而在区域之间的边界上一般具有灰度不连续性。 根据图像灰度级的突变进行图像分割的方法中,边缘检测方法通过检测包含不同区域的边缘来解决图像分割问题。边缘检测最通用的方法是检测灰度值的不连续性,灰度值的不连续是指在不同区域之间的边缘上像素灰度值的变化往往比较剧烈,一般利用图像一阶导数的极大值或者二阶导数的过零点信息提供判断边缘点的依据。

3.8.2 梯度算子 对于图像中任一像素点,可以用二维函数f(x,y)来表示,而梯度定义为向量∇f: 该向量的幅值为: 3.8.2 梯度算子 对于图像中任一像素点,可以用二维函数f(x,y)来表示,而梯度定义为向量∇f: 该向量的幅值为: 为简化计算,通常省略开方或通过取绝对值来近似计算,即 或

梯度向量的含义在于,它总是指向f(x,y)在点(x,y)处的最大变化率方向。最大变化率是用方向α角来衡量的,即 为了能估计出Gx及Gy值,通常使用一些经典的模板来做数字化近似。这些模板有Soble模板、Prewitt模板、Roberts模板等。 MATLAB图像处理工具箱中提供了边缘函数(edge)实现对图像边缘的检测,其基本语法格式为: [e , s] = edge(p, 'method', para) 其中p为输入图像,method是边缘检测的类型,para为与edge对应的参数,e为与p同样大小的逻辑矩阵,在检测到边缘的位置时值为1,其它位置则为0,s为一可选参数。

1.Roberts模板(算子) Roberts算子又称为Roberts交叉算子,它是由Roberts提出的一种利用局部差分算子寻找边缘的模板,它在2×2邻域上计算对角导数。在实际应用中,为了简化计算,常用梯度函数的Roberts绝对值来近似。另外还可以用Roberts最大值算子来计算。Roberts边缘检测算子如图所示: (a)Roberts-x (b)Roberts-y -1 1 -1 1

Roberts边缘检测器的语法格式如下: [e , s] = edge(p, ' roberts', thresh, direct) 其中p为输入图像,thresh为指定的阈值T,若T值未指定,则函数edge会自动选择一个值。direct为检测边缘的首选方向,通常可选作horizontal(水平)、vertical(垂直)或both(默认值)。

2.Sobel模板(算子) Roberts算子的一个主要问题是计算方向差分时对噪声敏感。Sobel提出一种将方向差分运算与局部平均相结合的方法,即Sobel算子。该算子是在以f(x,y)为中心的3×3邻域上计算x和y方向的偏导数,其模板如图所示: (c) Sobel-x (d) Sobel-y -1 -2 1 2 -1 1 -2 2

Sobel边缘检测器语法格式: [e , s] = edge(p, 'sobel', thresh, direct) 其中p为输入图像,thresh为指定的阈值,direct为检测边缘的首选方向,通常可选作horizontal (水平)、vertical(垂直)或both(默认值)。

3.Prewitt模板(算子) Prewit提出了与Sobel算子类似的计算偏微分估计值的方法,Prewit模板如图: (e) Prewit-x (f) Prewit-y -1 1 -1 1

Prewit边缘检测器调用语法如下: [e , s] = edge(p, 'prewitt', thresh, direct) 其中p为输入图像,thresh为指定的阈值,direct为检测边缘的首选方向,通常可选作horizontal (水平)、vertical(垂直)或both(默认值)。

3.8.2 二阶微分算子 上节讨论了计算一阶导数的边缘检测器,如果所求的一阶导数高于某一阈值,则可确定该点为边缘点,这样做会导致检测的边缘点太多。一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点。一阶导数的局部最大值对应着二阶导数的零交叉点(zero crossing)。这样,通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。 在数字图像处理中,二阶导数常用于拉普拉斯算子的计算,即二维函数f(x,y)的拉普拉斯的表达式为:

二阶微分算子边缘检测器主要包括LoG算子和Canny算子。 常用的两种拉普拉斯模板如图所示: -1 4 -1 8

1. LoG(Laplacian of a Gaussian)算子 [e , s] = edge(p, 'log', thresh, sigmma) 其中p为输入图像,thresh为指定的阈值T,sigmma为高斯滤波器的标准方差,默认值为2。若T值未指定,则函数edge会自动选择一个阈值。

2.Canny算子 Canny算子对最急剧变化方向上的边缘特别敏感,但在沿边缘方向上是不敏感的,其作用就像一个平滑算子。Canny边缘检测器是高斯函数的一阶导数,是对信噪比和定位之乘积的最优化逼近算子。 算法有以下四个步骤:先用高斯滤波器平滑图像,然后用一阶偏导的有限差分来计算梯度的幅值和方向,再对梯度幅值进行非极大值抑制,最后用双阈值算法检测和连接边缘。 canny边缘检测器的语法格式如下: [e , s] = edge(p, 'canny', thresh, sigmma) 其中p为输入图像,thresh为指定的阈值T,若T值未指定,则函数edge会自动选择一个值,sigmma为平滑滤波器的标准方差,默认值为1。

【例3.8.1】对lena.bmp图像使用不同的算子进行边缘检测。检测结果如图3.39所示。 p=imread('lena.bmp'); p=rgb2gray(p); %转换为灰度图像 [e1,s1] = edge(p,'sobel',0.03,'both'); % sobel检测器 [e2,s2] = edge(p,'roberts',0.03,'both'); % roberts检测器 [e3,s3] = edge(p,'prewitt',0.04,'both'); % prewitt检测器 [e4,s4] = edge(p,'log',0.003,2.10); % LoG检测器 [e5,s5] = edge(p,'canny',[0.05 0.12],1.6); % canny检测器 subplot(2,3,1),imshow(p); subplot(2,3,2),imshow(e1); subplot(2,3,3),imshow(e2); subplot(2,3,4);imshow(e3); subplot(2,3,5),imshow(e4); subplot(2,3,6),imshow(e5);

(a) (b) (c) 图3.39 边缘检测结果((a)Lena源图;(b)使用Sobel算子;(c)使用Robert算子; (d)使用Prewitt算子;(e)使用LoG算子;(f)使用Canny算子)

几种边缘检测算子性能比较: Roberts算子是卷积模板为2×2的算子,对具有陡峭的低噪声图像响应最好,但它存在一些功能上的缺陷,如不能检测45°倍数的边缘,因此一般使用较少。 Sobel边缘检测器卷积模板为3×3的算子,对灰度渐变和噪声较多的图像处理效果较好。 Prewitt边缘检测器比Sobel检测器在计算上简单,但易于产生噪声。 LoG算子边缘检测器是先对图像作最佳平滑,然后再利用平滑图像的二阶微分零交叉确定边缘位置,它被认为是微分法中利用平滑二阶微分检测图像边缘较成功的一种算法。 Canny边缘检测器是在抗噪声干扰和精确定位之间选择一个最佳折衷方案,在理论上是迄今为至所发现的性能最优的一种边缘检测理论。

3.8.3 阈值分割 阈值化算法利用图像中要提取的目标物与其背景在灰度特性上的差异,把图像视为具有不同灰度级的两类区域(目标和背景)的组合,选取一个合适的阈值,以确定图像中每一个像素点应该属于目标还是背景区域,从而产生相应的二值图像。 如图所示,最简单的利用阈值方法来分割灰度图像的步骤如下:首先对一幅灰度取值在0和L-1之间的图像确定一个灰度阈值T(0<T<L-1),然后将图像中每个像素的灰度值与阈值T相比较,并将对应的像素根据比较结果划为两类: thresh

阈值化算法通过设定不同的特征阈值,将像素点分为若干类,其关键在于阈值的选取。常见的阈值选取方法: 1.极小值点阈值 如果将直方图的包络看作一条曲线,则选取直方图的谷可借助求曲线极小值的方法。 2.迭代阈值 先取图像灰度范围的中值作为初始阈值T0,然后按迭代公式进行迭代。 3.最大方差阈值(又称Otsu自动阈值处理方法) 通过函数graythresh实现最大方差阈值的选取,其基本语法格式为: thresh = graythresh(p) 其中p为输入图像,thresh为最终返回的阈值,其范围在0~1之间。

【例3.8.2】 用迭代阈值选取法计算图像的全局阈值并对图像进行分割。分割前后效果如图3.41所示。 p= imread('bugs.bmp'); p=rgb2gray(p); p=im2double(p); %转换为double thresh = 0.5*(min(p(:)) + max(p(:))); %阈值初始化为最大值与最小值的中间值 flag = false; %迭代步长控制 while ~flag g = p>=thresh; %按当前阈值划分 thresh_1 = 0.5*(mean(p(g)) + mean(p(~g))); %求得新阈值 flag = abs(thresh - thresh_1)<0.5; %更新迭代标志 thresh = thresh_1; %更新阈值 end figure(1),imshow(p); figure(2), imshow(g);

图3.41 迭代阈值分割前后效果((a)原图像;(b)迭代阈值分割后图像)

【例3.8.3】 用最大方差阈值对图像进行分割。分割前后效果如图3.42所示。 p=imread('bugs.bmp'); p1=rgb2gray(p); thresh = graythresh(p1); %使用Ostu算法求得新阈值 g = im2bw(p1,thresh); %使用thresh对图像进行分割 figure(1), imshow(p); figure(2), imshow(g);

图3.42 Ostu阈值分割前后效果((a)原图像; b.Ostu阈值分割后图像)