图1.2.10 对M文件的代码进行节划分经验分享:对于if语句,必须将完整的控流语句“if,else,end”放在同一节中。在对M文件的代码进行节划分之后,选择“编辑器”→“转至”,再选择节的名称,如图1.2.11所示,便可直接跳转到相应的程序段。
图1.2.11 跳转到相应的程序段选择“编辑器”→“运行并前进”,可实现逐节运行程序,如图1.2.12所示。
图1.2.12 逐节运行程序将鼠标指向已划分好的某一节,选择“编辑器”→“运行节”,如图1.2.13所示,可仅运行该节的代码。
图1.2.13 仅运行该节的代码
1.3 基于Simulink的仿真1.3.1 什么是SimulinkMATLAB中的Simulink是专门用于仿真的软件包,它的名称是Simulation(模拟仿真)和Link(连接)的组合词。Simulink可以提供研究对象的建模、仿真和分析,它使用图形化的系统模块对研究对象进行描述,每个模块像实验室中的一台仪器一样,可以根据需要进行不同的组合以达到不同的研究目的。在Simulink中,模块是仿真的基石,将这些模块相连接构成系统,可以进行仿真,运行结果可以用图形的形式显示出来,整个仿真过程非常简洁、方便、直观。1.3.2 Simulink模块库介绍Simulink模块库是建立模型的基础,其中囊括了大量的基本功能模块,只有用户熟练地掌握了模块库,才能快速、高效地建立模型。在Simulink模块库中包含有以下子模块库,如表1.3.1所示。表1.3.1 模块库(首字母大写)
1.常用模块库常用模块库中的模块是Simulink所有模块库中使用频率最高的模块合集,主要是为了方便用户以最快的速度建立模型。常用模块库包含如图1.3.1所示的成员,模块功能如表1.3.2所示。
图1.3.1 常用模块库表1.3.2 常用模块库
2.连续模块库连续模块库中的模块如图1.3.2所示,它包含了搭建连续系统所需的绝大部分模块,这些模块的功能如表1.3.3所示。
图1.3.2 连续模块库表1.3.3 连续模块库
3.离散模块库离散模块库中的模块如图1.3.3所示。其功能如表1.3.4所示。
图1.3.3 离散模块库表1.3.4 离散模块库
4.数学运算模块库数学运算模块将很多数学运算封装成模块的形式,使数学运算操作大大简化,减少了很多程序设计上的烦琐过程。此模块库所包含的模块如图1.3.4所示。其功能如表1.3.5所示。
图1.3.4 数学运算模块库表1.3.5 数学运算模块库
5.信号源模块库信号源模块库如图1.3.5所示。其功能如表1.3.6所示。
图1.3.5 信号源模块库表1.3.6 信号源模块库
6.信号接收模块库信号接收模块库如图1.3.6所示。其功能如表1.3.7所示。
图1.3.6 信号接收模块库表1.3.7 信号接收模块库
7.用户自定义模块库用户自定义模块库如图1.3.7所示。其功能如表1.3.8所示。
图1.3.7 用户自定义模块库表1.3.8 用户自定义模块库
1.3.3 创建一个简单的Simulink示例本节通过一个简单的示例来向读者展示如何创建Simulink仿真模型、运行仿真模型、显示仿真结果及保存仿真模型。例1.3.1 创建一个产生正弦信号并对其进行观察的仿真模型。步骤如下:步骤1:在MATLAB的命令行窗口运行simulink命令(注意:指令的首字母应小写),或单击工具栏中的[插图]图标,就可以打开Simulink模块库浏览器(Simulink Library Browser)窗口,如图1.3.8所示。
图1.3.8 Simulink模块库浏览器步骤2(a):通过菜单File→New→Model新建一个名为untitled的空白模型窗口,如图1.3.9所示。
图1.3.9 步骤2(a)的实现过程步骤2(b):也可以通过选择“主页”→“新建”→Simulink Model建立,如图1.3.10所示。
图1.3.10 步骤2(b)的实现过程通过步骤2所建立的模型窗口如图1.3.11所示,它由菜单、工具栏、模型浏览器窗口、模型框图窗口以及状态栏组成。
图1.3.11 模型窗口组成示意图步骤3:从右侧子模块窗口中,直接单击Simulink下的Sources子模块库,便可看到各种输入源模块,如图1.3.12所示。
图1.3.12 步骤3的实现过程步骤4:单击所需要的输入信号源模块Sine Wave(如图1.3.13所示),将其拖放到空白模型窗口untitled,Sine Wave模块就被添加到untitled窗口;也可以用鼠标选中Sine Wave模块并右击,在快捷菜单中选择add to'untitled'命令,就可以将Sine Wave模块添加到untitled窗口,如图1.3.14所示。
图1.3.13 单击所需要的输入信号源模块Sine Wave
图1.3.14 将Sine Wave模块添加到untitled窗口步骤5:用同样的方法打开接收模块库Sinks,选择其中的Scope模块(示波器)拖放到untitled窗口中,如图1.3.15和图1.3.16所示。
图1.3.15 步骤5的实现过程
图1.3.16 步骤5的实现效果
步骤6:在untitled窗口中,用鼠标指向Sine Wave右侧的输出端,当光标变为十字符时,按住鼠标拖向Scope模块的输入端,再松开鼠标按键,就完成了两个模块间的信号线连接,一个简单模型已经建成,如图1.3.17所示。
图1.3.17 步骤6的实现过程步骤7:开始仿真,单击untitled模型窗口中“开始仿真”图标[插图],或者选择菜单Simuliation→Run,仿真开始。双击Scope模块出现示波器显示屏,可以看到黄色的正弦波形,如图1.3.18所示。
图1.3.18 步骤7的实现效果步骤8:保存模型,单击工具栏的[插图]图标,将该模型保存为Ex0901.mdl文件。通过例1.3.1可以了解如何建立、运行、观察、运行Simulink的仿真模型。1.3.4 对模块进行基本操作1.对象的选定要选定对象只要在对象上单击,被选定的对象的四角处会出现小块编辑框,如图1.3.19所示。
图1.3.19 选定单个对象如果选定多个对象,可以按下Shift键,然后再单击所需选定的模块;或者用鼠标拉出矩形虚线框,将所有待选模块框在其中,则矩形框中所有的对象均被选中,如图1.3.20所示。
图1.3.20 选定多个图像如果要选定所有对象,可以选择菜单Edit→SelectAll,如图1.3.21所示;也可以右击选择SelectAll,如图1.3.22所示;还可以通过快捷键Ctrl+A来实现。所有对象被选中后如图1.3.23所示。
图1.3.21 选择菜单Edit→SelectAll
图1.3.22 右击选择SelectAll
图1.3.23 所有对象被选择后的效果2.模块的复制不同模型窗口(包括模型库窗口)之间的模块复制方法如下:方法1:选定模块,用鼠标将其拖到另一模型窗口。方法2:使用Edit菜单中的Copy和Paste命令。方法3:通过快捷键Ctrl+V、Ctrl+C来实现。在同一模型窗口内复制模块的方法如下:方法1:选定模块,按下鼠标右键,拖动模块到合适的地方,释放鼠标。方法2:选定模块,按住Ctrl键,再用鼠标拖动对象到合适的地方,释放鼠标。方法3:使用Edit菜单中的Copy和Paste按钮。方法4:通过快捷键Ctrl+V、Ctrl+C来实现。3.模块的移动选定需要移动的模块,用鼠标将模块拖到合适的地方。4.模块的删除要删除模块,应选定待删除模块,按Delete键。5.改变模块大小选定需要改变大小的模块,出现编辑框后,用鼠标拖动编辑框,可以实现放大或缩小。6.模块名的编辑1)修改模块名单击模块下面或旁边的模块名,可对模块名进行修改。2)模块名字体设置选定模块,选择Diagram→Format→Font Style,打开字体对话框设置字体。3)模块名的显示和隐藏
选定模块,选择Diagram→Format,勾选Show Block Name,可以显示模块名,否则为隐藏。
1.3.5 信号线的操作1.模块间的连线先将光标指向一个模块的输出端,待光标变为十字符后,按下鼠标左键并拖动,直到另一模块的输入端。2.信号线的分支按住Ctrl键,同时按下鼠标左键拖动鼠标到分支线的终点,如图1.3.24所示。
图1.3.24 信号线分支操作示意图3.信号线文本注释1)添加文本注释双击需要添加文本注释的信号线,则出现一个空的文字填写框,在其中输入文本。2)修改文本注释单击需要修改的文本注释,出现虚线编辑框即可修改文本。
1.4 计算机视觉系统工具箱介绍计算机视觉系统工具箱包括用于仿真特征提取、运动检测、目标检测、目标跟踪、立体视觉、视频处理、视频分析的算法。这些功能以MATLAB函数、MATLAB系统对象、Simulink块的形式提供。针对快速原型和嵌入式系统设计,计算机视觉系统工具箱也支持定点算法和C++/C代码产生。计算机视觉系统工具箱的主要功能模块包括:•特征检测与提取;•图像配准和几何变换;•目标检测与识别;•跟踪和运动估计;•摄像机标定和三维视觉;•图像分析和图像增强;•输入、输出、图形学;•C++/C代码生成。与图像处理工具箱(Image Processing Toolbox)相比,计算机视觉系统工具箱引入了基于系统对象(System Object)及基于模型的处理模式,使其处理速度更快,交互性更强,同时该工具箱的绝大多数函数、系统对象、模型支持代码转换,可自动生成可读、可运行、可移植的C/C++代码,这无疑极大地方便了广大从事数字图像处理研究的科研工作者,提高了研发效率。
第2章 计算机视觉与数字图像处理基础2.1 基本概念2.1.1 什么是“计算机视觉”计算机视觉(Computer Vision,CV)是一门研究如何让计算机达到人类那样“看”的学科,它利用视觉传感器和计算机代替人眼和大脑,使得计算机拥有类似于人类那种对目标进行分割、分类、识别、跟踪、重构、判别、决策的功能,是人工智能领域的一个重要部分。计算机视觉的最终研究目标就是使计算机能像人那样通过视觉观察和理解世界,具有自主适应环境的能力。计算机视觉系统中信息的处理和分析大致可以分成两个阶段:图像处理阶段,又称视觉处理中的低水平和中水平阶段;图像分析、理解阶段,又称视觉处理中的高水平处理阶段。
2.1.2 什么是“数字图像”不同领域的人对“图像”的概念有着不同的理解。从工程学的角度来讲,“图”是物体透射或反射光的分布;“像”是人的视觉系统对图的接收在大脑中形成的印象或认识。因此,图像常与光照、视觉等概念联系在一起,光的强弱、光的波长以及物体的反射等特点决定了图像的客观属性,而人(动物)的大脑是图像的主观载体。图像与图形是两个不同的概念,图像具有不规则性、自然性、复杂性,从数学的角度来讲,图像是一个复杂的数学函数,这个数学函数很难用解析式来表示。而图形很多时候可以用数学函数来描述。图像的种类有很多,根据人眼的视觉特性可将图像分为可见图像和不可见图像,可见图像包括单张图像、绘图、图像序列等,不可见图像包括不可见光成像和不可见量形成的图,如电磁波谱图、温度及压力等的分布图。图像按像素空间坐标和亮度(或色彩)的连续性可以分为模拟图像和数字图像。图像处理是一门年轻的、充满活力的交叉学科,并随着计算机技术、认知心理学、神经网络技术以及数学理论的新成果(如数学形态学、小波分析、分形理论)而飞速发展。当前图像处理技术研究的对象是数字图像。
数字图像处理有如下特点:(1)目前,数字图像处理的信息大多是二维信息,处理信息量很大。如一幅256×256低分辨率黑白图像,要求约64kbps的数据量;对于高分辨率彩色512×512图像,则要求768kbps数据量。如果要处理30帧/秒的电视图像序列,则要求500kbps~22.5Mbps数据量,因此对计算机的计算速度、存储容量等要求较高。(2)数字图像处理占用的频带较宽。与语言信息相比,数字图像占用的频带要大几个数量级,如电视图像的带宽约5.6MHz,而语音带宽仅为4kHz左右。所以在成像、传输、存储、处理、显示等各个环节的实现上,技术难度大,成本高,这就对频带压缩技术提出了更高的要求。(3)数字图像中各个像素不是独立的,其相关性大。在图像画面上,经常有很多像素相同或接近的灰度。就电视画面而言,同一行中相邻两个像素或相邻两行间的像素,其相关系数可达0.9以上,而一般情况下相邻两帧之间的相关性比帧内相关性还要大。因此,数字图像处理中信息压缩的潜力很大。数字图像处理对以往的图像处理方法而言无疑是一次新的革命,它彻底改变了以往人们处理图像时所采用的方法,具有如下优点:
(1)再现性好。数字图像处理与模拟图像处理的根本不同在于:它不会因图像的存储、传输或复制等一系列变换操作而导致图像质量的退化;只要图像在数字化时准确地表现了原图,数字图像处理过程就始终能保持图像的再现。(2)处理精度高。按目前的技术,几乎可将一幅模拟图像数字化为任意大小的二维数组,这主要取决于图像数字化设备的能力。现代扫描仪可以把每个像素的灰度等级量化为16位甚至更高,这意味着图像的数字化精度可以达到满足任何应用需求。对计算机而言,不论数组大小,不论每个像素的位数多少,其处理程序几乎是一样的。换而言之,从原理上讲不论图像的精度有多高,处理总是能实现的,只要在处理时改变程序中的数组参数就可以了。对比一下图像的模拟处理,为了要把处理精度提高一个数量级,就要大幅度地改进处理装置,这在经济上是极不合算的。(3)适用面广。图像可以来自多种信息源,它们可以是可见光图像,也可以是不可见的波谱图像(例如射线图像、超声波图像或红外图像等)。从图像反映的客观实体尺度看,可以小到电子显微镜图像,大到航空照片
示的灰度图像(彩色图像也是由灰度图像组合成的,例如RGB图像由红、绿、蓝三个灰度图像组合而成)组合而成,因而均可用计算机来处理。即只要针对不同的图像信息源采取相应的图像信息采集措施,图像的数字处理方法适用于任何一种图像。(4)灵活性高。由于图像的光学处理从原理上讲只能进行线性运算,这极大地限制了光学图像处理能实现的目标。而数字图像处理不仅能完成线性运算,而且能实现非线性处理,即凡是可以用数学公式或逻辑关系来表达的一切运算均可用数字图像处理来实现。2.1.3 数字图像处理的一些基本概念从理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。空间坐标(x,y)的数字化称为图像采样,而幅值数字化称为灰度级量化。物理图像数字化的过程如图2.1.1所示。
图2.1.1 物理图像数字化的过程1.图像采样图像采样是对图像空间坐标的离散化,它决定了图像的空间分辨率。采样可以这样形象地理解:用一个方格把待处理的图像覆盖,然后将每一小格上模拟图像的亮度取平均值,作为该小方格中点的值,如图2.1.2所示。
图2.1.2 图像采样过程示意图对一幅图像采样时,若每行(横向)采样数为M,每列(纵向)采样数为N,则图像大小为M×N个像素,f(x,y)表示点(x,y)处的灰度值,则F(x,y)构成一个M×N实数矩阵,即
经验分享:“像素”的英文为pixel,它是picture和element的合成词,表示图像元素的意思。可以对“像素”进行如下理解:像素是一个面积概念,是构成数字图像的最小单位。像素不同的图像比较如图2.1.3所示。
图2.1.3 像素不同的图像比较像素的大小与图像的分辨率有关,分辨率越高,像素就越小,图像就越清晰。2.灰度量化把采样后所得的各像素灰度值从模拟量到离散量的转换称为图像灰度的量化。量化是对图像幅度坐标的离散化,它决定了图像的幅度分辨率。量化的方法包括分层量化、均匀量化和非均匀量化。分层量化是把每一个离散样本的连续灰度值分成有限多的层次;均匀量化是把原图像灰度层次从最暗至最亮均匀分为有限个层次,如果采用不均匀分层就称为非均匀量化。当图像的采样点数一定时,采用不同量化级数的图像质量不一样。量化级数越多,图像质量越好;量化级数越少,图像质量越差。量化级数小的极端情况就是二值图像。经验分享:“灰度”可以认为是图像色彩亮度的深浅。图像所能够展现的灰度级越多,也就意味着图像可以表现更强的色彩层次。如果把黑—灰—白连续变化的灰度值量化为256个灰度级,则灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。下面介绍几种常见的数字图像类型。(1)黑白图像,如图2.1.4所示。图像的每个像素只能是黑或白,没有中间的过渡,故又称为二值图像。二值图像的像素值为0、1。
图2.1.4 黑白图像及其表示(2)灰度图像,如图2.1.5所示。灰度图像是指每个像素的信息由一个量化的灰度级来描述的图像,没有彩色信息。
图2.1.5 灰度图像及其表示(3)彩色图像,如图2.1.6所示。彩色图像是指每个像素的信息由RGB三原色构成的图像,其中RGB是由不同的灰度级来描述的。
图2.1.6 彩色图像及其表示(4)序列图像,如图2.1.7所示。把具有一定联系的、具有时间先后关系的图像称为序列图像。我们经常看到的电视剧或电影图像主要是由序列图像构成的。序列图像是数字多媒体的重要组成部分。序列图像是单幅数字图像在时间轴上的扩展,可以将视频的每一帧视为一幅静止的图像。由此可见,视频序列图像是由一帧一帧具有相互关联的图像构成,这种相互关联性为进行视频图像处理提供了便利。视频图像中所含的帧数、每帧图像的大小以及播放的速率是衡量视频图像的重要指标。
图2.1.7 序列图像2.1.4 数字图像的矩阵表示二维图像进行均匀采样及灰度量化后,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而可用矩阵来直观地描述该数字图像。如果采用如图2.1.8所示的采样网格来对图像进行采样量化,则可得到式(2.1.1)所示的数字化图像表示。
图2.1.8 图像采样网格示意图这样,一幅数字图像在MATLAB中就可以自然而然地表示为
经验分享:由于在MATLAB中矩阵第一个元素的下标为(1,1),因此在式(2.1.2)中f(1,1)等于式(2.1.1)中的f(0,0)。式(2.1.1)和式(2.1.2)在表示上意思是一样的,只是原点不同。对数字图像进行处理,也就是对特定的矩阵进行处理。在C语言中,对M×N数字图像处理的核心代码如下:
在MATLAB中,对M×N数字图像处理的核心代码如下:
2.2 图像的灰度直方图在数字图像处理中,灰度直方图是最简单且最有用的工具之一。直方图表达的信息是每种亮度的像素点的个数。直方图是图像的一个重要特征,因为直方图用少量的数据表达图像的灰度统计特征。那么,什么是图像的灰度直方图呢?一个灰度级别在范围[0,L-1]的数字图像的直方图是一个离散函数,即
其中,n是图像的像素总数;nk是图像中第k个灰度级的像素总数;rk是第k个灰度级,k=0,1,2,…,L-1。求图像灰度直方图的过程如图2.2.1所示。
图2.2.1 求图像灰度直方图的过程图像的灰度直方图具有如下性质。(1)灰度直方图只能反映图像的灰度分布情况,而不能反映图像像素的位置,即丢失了像素的位置信息。(2)一幅图像对应唯一的灰度直方图,反之不成立。不同的图像可对应相同的直方图。(3)灰度直方图反映了数字图像中每一灰度级与其出现频率间的关系,它能描述该图像的概貌。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删