5轮廓线的提取_第1页
5轮廓线的提取_第2页
5轮廓线的提取_第3页
5轮廓线的提取_第4页
5轮廓线的提取_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验四图像轮廓线提取技术、实验目的与要求:、能熟练应用、熟悉对、在应用、掌握去分析问题、解决问题;的图像处理的功能,掌握基本的图像处理的若干命令;进行图像处理方面具备一定的编程能力。mer,eiamda,gceolo,rimmasp,hiomwwr,istuebp,ltoit,等语句的基本使用方法。5掌握图像轮廓线提取的简单方法并上机实现。6掌握自带的一些常用边界检测算子的使用,提高对复杂图像处理的能力。二、问题描述“图像轮廓线提取”是数字图像处理中对图像进行处理和分析之前的一项非常重要的工作。指的是从原始图像中,以手动或自动的方法,将图片中的人物、动物、植物或者其他任何对象的(特征)轮廓线提

2、取出来,使之成为一幅独立的黑白线条图。从而达到将物体与背景分开,物体与物体分开的效果。提取轮廓线被应用于许多方面,例如人脸检测和跟踪。它结合了认知科学、图象处理、计算机图形学、机器视觉和模式识别等多个研究领域。三、问题分析既然“图像轮廓线提取”的黑白线条图所在位置往往是图像中两区域交界位置,则可以通过图像特征(如形状、颜色、纹理等)变化情况来检测两区域交界处。最简单的方法就是采用阈值检测法,即将当前检测点的特征与周围点的特征进行比较,若发现有较大的差异,则认为当前检测点属于两区域的交界点,否则,认为同一区域内的点。四、背景知识介绍首先介绍几种基本的图像格式,再介绍一下中常见的图像处理命令及其用

3、法。常见图像格式二值图单色图像则是带有颜色的图像中比较简单的格式,它一般由黑色区域和白色区域组成,可以用一个比特表示一个像素,“1”表示黑色,“0”表示白色,当然也可以倒过来表示,这种图像称之为二值图像。灰度图我们也可以用8个比特(一个字节)表示一个像素,相当于把黑和白等分为256个级别,“0”表示为黑,“255”表示为白,该字节的数值表示相应像素值的灰度值或亮度值,数值越接近“0”,对应像素点越黑,相反,则对应像素点越白,此种图像我们一般称之为灰度图像。单色图像和灰度图像又统称为黑白图像。3.彩色图与黑白图像对应,就存在着彩色图像,这种图像要复杂一些,表示图像时,常用的图像彩色模式有RGB模

4、式、CMYK模式和HIS模式,一般情况下我们只使用RGB模式,R对应红色,G对应绿色,B对应蓝色,它们统称为三基色,这三中色彩的不同搭配,就可以搭配成各种现实中的色彩,此时彩色图像的每一个像素都需要3个样本组成的一组数据表示,其中每个样本用于表示该像素的一个基本颜色。基于三刺激理论(TristimulusTheory),我们的眼睛通过三种可见光对视网膜的锥状细胞的刺激来感受颜色。这些光的波长为630nm(红色)、530nm(绿色)和450nm(蓝色)时的刺激达到高峰。通过光源中的强度比较,我们感受到光的颜色。这种视觉理论是使用三种颜色基色:红、绿和蓝在视频监视器上显示彩色的基础称为RGB颜色模

5、型。以一个常见的例子来说明:Windows环境下主要的图像格式之一,BMP灰度图像,以其格式简单,适应性强而倍受欢迎。这种文件格式就是每一个像素用8bit表示,显示出来的图像是黑白效果,最黑的像素的灰度(也叫作亮度)值为“0”,最白的像素的灰度值为“255”,整个图像各个像素的灰度值随机的分布在“0”到“255”的区间中,越黑的像素,其灰度值越接近于“0”,越白(既越亮)的像素,其灰度值越接近于“255”;与此对应的是在该文件类型中的颜色表项的各个RGB分量值是相等的,并且颜色表项的数目是256个。每一个像素颜色由其红、绿、蓝三色的强度值联合决定。常见的颜色值如下:颜色红绿蓝黄紫青白黑J、灰红

6、绿蓝常用图像处理命令图像文件的读取i=imread(文件名,图像文件格式)。将文件名指定的图像文件读入数组I,I的数据类型为无符号8位整数(uint8)。对于灰度图像,I是一个二维数组;对于真彩色图像,I是一个三维数组(nXmX3)。文件名是指定图像文件名称的字符串,图像文件格式是指定图像文件格式的字符串。女口:i=imread(C:DocumentsandSettingsMyDocumentsMyPicturesa,jpg);或直接在第一个参数上加扩展名:i=imread(C:DocumentsandSettingsMyDocumentsMyPicturesa.jpg);注意:后面最好加上“

7、;”号,因为图像若大则需时间较长。图像的显示image(i):将矩阵I作为图像显示,I中的每一个元素在图像中表示为一个颜色块,I可以是nXm阶矩阵或者nXmX3的数组,其元素为double或uint8数据类型。imshow:是在图像显示中最常用,也是功能最强的图像显示函数,常用的格式为:imshow(i,n),使用n个灰度等级显示图像I。如果默认n,则使用256级或64级灰度显示图像。显示灰度直方图imhist(i),显示灰度图像I的灰度直方图。其中I是一个二维矩阵,imhist用柱状图形式显示图像中每个灰度出现的频率,即矩阵中每一个元素对应的数值在整个矩阵中出现的频率。女如先获取r颜色的二维

8、矩阵:j=i(:,:,l);再运行:imhist(j);获取像素点信息pixval,在使用image或imshow显示图像后,在执行pixval指令,便可以读取光标所指向的像素点的坐标和灰度值;如果按住鼠标,在图像中拖曳,便可以显示光标所移动的距离。再次运行pixval则是关闭获取像素点信息。求矩阵的规模D=size(i),函数size用来求矩阵的规模。如果I是nXm的矩阵,则D是包含两个元素的向量:D=n,m;同样道理,如果I是nXmX3的矩阵,则D=n,m,3。如果我们事先知道矩阵的维数,也可以直接用这样的方法求得矩阵的规模:n,m=size(i)或n,m,k=size(i)等。数据类型转

9、换i=uint8(X),这个函数实现将矩阵X中的所有元素转换为无符号8位整形数据,把转换的结果保存在矩阵I中。这个函数对所有类型的数据都适用,转换后数值都落在0到255之间。i=double(X),这个函数与uint8()相似,实现的功能是将矩阵X中的所有元素转换为double类型(16位双精度类型)。五、实验过程根据分析,图像中位于轮廓线上的点,它与其相邻的点的灰度值差有一定的跳跃,故通过值的对比,就可以将那些边缘点提取出来。考虑到图像边框上的像素点对于轮廓线获取的结果影响不大,且为了代码的简单实用,首先去掉图像的边框上的所有像素点,即:去掉灰度值矩阵的第一行、第一列、最后一行和最后一列。这

10、样做的好处是显而易见的,因为可以保证每一个待比较的点其周围都有8个供比较的点,如图示:被比较的点,其周围有呂个参照点在算法中,将中心被检测点依次与其上下、左右、左上、右下,和右上、左下8个点做比较,若差值大于规定值,则该检测点就是轮廓线上的点,反之不是。算法关键的地方是对IMREAD生成的矩阵进行了非线性变换。算法流程如下:首先,将这个矩阵从8位无符号型变成双精度的数值存储然后才能进行下一步的将其每个值都除以255,这样就把每个数值都调整为01之间的小数;再用正弦sin函数将这些值做变换,并取求得的结果放大40倍。这样一来,本来是在0255之间的正整数,就被变换到01之间的小数,然后再离散成0

11、40之间的双精度数值。其目的是为了在进行比较灰度值的时候,方便自定义各种差值。最后,用户给定一个差值,根据这个值来比较检测点与其周围8个点的灰度值,若大于给定差值,则认为检测点位于轮廓线上,否则,不在轮廓线上。灰度图的源代码(.m文件)functiongraydrawout(pix,n)A=imread(pix);a,b=size(A);B=double(A);D=40*sin(1/255*B);T=A;forp=2:a-1forq=2:b-1如下:%灰度图的轮廓线提取%读取指定的灰度图%a,b分别等于矩阵A的行数和列数%将矩阵A变为双精度矩阵%将矩阵B进行线性变换%新建与A同等大小矩阵%处理

12、图片边框内的像素点(D(p,q)-D(p+1,q)n|(D(p,q)-D(p-1,q)n|(D(p,q)-D(p-1,q+1)n|(D(p,q)-D(p+1,q-1)n|(D(p,q)-D(p-1,q-1)n|(D(p,q)-D(p+1,q+1)nT(p,q)=0;%置边界点为黑色elseT(p,q)=255;%置非边界点为白色end;end;end;subplot(2,1,1);image(A);title(灰度图原图);axisimage;subplot(2,1,2);image(T);title(提取轮廓线);axisimage;%将窗口分割为两行一列,下图显示于第一行%显示原图像%图释

13、%保持图片显示比例%下图显示于第二行%显示提取轮廓线后的图片%图释%保持图片显示比例注释:pix为要提取轮廓线的灰度图名(带路径),由单引号括住。n自定义的灰度值差值,超过该值就是轮廓线上的点,反之不然。这是一个最重要的参数,通过调节它的值,修整轮廓线的效果,取范围在040之间的任何有理数。AMATLAB读取原图片后返回的数据矩阵,2维(MN)T新建的与A矩阵同等行列数的矩阵,待放入比较后结果,代码的主体是ifelseend部分,其原理就是将中心点与其周围的8个点依次比较,发现有一个差值大于自定义的值时,就判断其为轮廓线上的点并将之置为黑色;若其与周围8个点的比较值都小于自定义值时,则其不在轮

14、廓线上,置白色。灰度图提取轮廓线示例(n=20):灰度图原图5010015020050100150200250300350提取轮廓线functioncolordrawout(pix,n)A=imread(pix);B=A(:,:,1);C=A(:,:,2);D=A(:,:,3);fori=1:3ifi=1E=B;elseifi=2E=C;elseE=D;3.彩色图提取图像轮廓线个像素点都是由红、绿、彩色图片经过IMREAD函数读取后,由于它的每蓝三色的强度值一起定义其颜色的,所以,生成的是一个3维的(MN3)矩阵。矩阵平面(:,:,1)代表对应像素点的红色强度值,矩阵平面(:,:,2)是绿色强

15、度值,矩阵平面(:,:,3)则是蓝色强度值。在每一个矩阵平面中强度值的范围是0,255的正整数。位于轮廓线上的点,它的红、绿、蓝三色的强度值与其周围的点必然有一定的差值,也正式利用这些差值的比较,可以将那些位于边缘的点提取出来。在算法上,彩色图与灰度图不同的是,彩图的每一个单色矩阵可以单独用来判定该点是否位于轮廓线上。其算法与灰度图的原理非常相似。在彩色图的算法中,加入了对判定矩阵的选择,即提供使用者自由选择用图片的哪一个单色矩阵进行轮廓线提取。因为根据图片本身的特点,选择更适合于进行提取的矩阵,其效果是十分不同的,在下面的讨论中将会再次提到这个问题。算法关键的地方同样是对IMREAD生成的矩

16、阵进行了线性变换。首先,将这个矩阵从8位无符号型变成双精度的数值存储;然后才能进行下一步的将其每个值都除以255,这样就把每个数值都调整为01之间的小数;再用正弦sin函数将这些值做变换,并取求得的结果放大40倍。这样一来,本来是在0255之间的正整数,就被变换到01之间的小数,然后再离散成040之间的双精度数值。其目的是为了在进行比较单色强度值的时候,方便自定义各种带小数的差值。彩色图轮廓线提取的源代码(.m文件)如下:%彩色图片轮廓线提取函数%读取指定彩色图片%红色强度值矩阵%绿色强度值矩阵%蓝色强度值矩阵%依次从三个矩阵中提取轮廓线%从红色矩阵提取%从绿色矩阵提取%从蓝色矩阵提取end;

17、end;H=double(E);F=40*sin(1/255*H);k,j=size(B);T=A;%将选择的矩阵变为双精度矩阵%进行非线性变换%k,j分别为矩阵D的行数和列数forp=2:k-1forq=2:j-1if(F(p,q)-F(p,q+1)n|(F(p,q)-F(p,q-1)n|(F(p,q)-F(p+1,q)n|(F(p,q)-F(p-1,q)n|(F(p,q)-F(p-1,q+1)n|(F(p,q)-F(p+1,q-1)n|(F(p,q)-F(p-1,q-1)n|(F(p,q)-F(p+1,q+1)nT(p,q,1)=0;T(p,q,2)=0;T(p,q,3)=0;%置边界点黑

18、色elseT(p,q,l)=255;T(p,q,2)=255;T(p,q,3)=255;%置非边界点白色end;end;end;subplot(2,2,i+1);%将窗口分割为两行两列,下图显示于第i+1位置image(T);%显示轮廓线title(i);%图释axisimage;%保持图片显示比例%下图显示于第1位置%显示原彩色图片%图释%保持图片显示比例end;subplot(2,2,1);image(A);title(彩色图原图);axisimage;注释:pix为要提取轮廓线的灰度图名(带路径),由单引号括住。n自定义的强度值值差值,超过该值就是轮廓线上的点,反之不然。这是一个最重要的

19、参数,通过调节它的值,修整轮廓线的效果范围为040之间的任何有理数。AMATLAB读取原图片后返回的数据矩阵,3维(MN3)T新建的与A矩阵同等行列数的矩阵,待放入比较后结果。代码中加入的部分是对单色强度值矩阵的选择。从比较中可以看出,选择彩色图片中最大程度的颜色矩阵,可以提高提取轮廓线的效果。譬如:图片以红色为主,就选择1红色矩阵。代码的主体同样是ifelseend部分。其原理仍是将中心点与其周围的8个点依次比较,发现有一个差值大于自定义的值时,就判断其为轮廓线上的点并将T矩阵中对应点置为黑色;若其与周围8个点的比较值都小于自定义值时,则其不在轮廓线上,T矩阵对应点置白色。彩色图提取轮廓线示

20、例:彩色图原图50EvV-100n.X.1-150500J2501J30050100150200250300注:3)六、弓前面的算U法中在在逐行过程中,事先预设除去边框旳所有点,这是为了得到比较精简实用旳算法。否则,算法会相对复杂,首先需将图像的边框引入,在算法中便多了四条特殊的线和四个特殊点,就是上下左右的边线及图像的四个顶点。拿四个顶点而言,可供它们进行比较的参考点只有三个,而且对于每个点而言,三个参考点的位置都不相同,这样就造成了算法的累赘冗余。同理,边线也是,边线上的点只有五个参考点,也是各边方向不同,需要大量相似的代码。实验证明,提取轮廓线时,加上边框与不加边框的区别非常不明显,故采

21、用后者的精简算法。在灰度图和彩色图的算法中,对读取生成的图片数据矩阵进行了线性变换,为的是更好的调节自定义强度值的差值,从而得到令人满意的结果。选择三角函数sin,用其进行变换后,可以保证结果值都落到01之间,从而控制扩大后的数值都在040的范围。其实这个函数也可以使用其他离散函数,譬如log,它的离散作用更加明显,可以将值都变换到0,+)区间上。)由于噪声和模糊的存在,轮廓线可能会变宽或在某些点处发生间断。在算法中,发现图片出现断点,可以通过减小n值来提高轮廓线的精度从而减少断点。但是,轮廓线变粗的同时,弊处是也使原有的清晰的其他线条变得更加粗,甚至出现了模糊的散点。为此,只能寻找一个合适的n值,使断点不至于太多,轮廓线也不会太黑糊。在MATLAB的图像处理中,导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。一阶导数与是最简单的导数算子,它们分别求出了灰度在X和y方向上的变化率,而方向a上的灰度变化率可以用相应公式进行计算;对于数字图像,应该采用差分运算代替求导,差分公式参考相关教材。函数f在某点的方向导数取得最大值的方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论