《第5次-图像边缘检测-DSP试验内容与步骤(共11页).doc》由会员分享,可在线阅读,更多相关《第5次-图像边缘检测-DSP试验内容与步骤(共11页).doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上DSP试验试验名称:图像边缘检测地点:1#126时间:2013.6.14(星期五) 第1批: 8:00-9:30 1班+2班前16个同学 第2批: 9:30-11:00 3班+2班其他所有同学实验报告二:1. 边缘检测原理;2. 边缘检测(Sobel算子)的DSP程序; 3. 边缘检测的DSP实验结果;一、原理讲解索贝尔算子(Sobel operator)是中的算子之一,主要用作。在技术上,它是一离散性算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量Sobel算子有两个,一个是检测水平边沿的;另一个是检测垂直平边
2、沿的。Sobel算子另一种形式是各向同性Sobel (Isotropic Sobel)算子,也有两个,一个是检测水平边沿的,另一个是检测垂直边沿的各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel算子的处理方法。由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。图像的Sobel边缘检测处理可以简单理解为提取图像中区域的轮廓。图像中区域的划分以像素灰度为依据,每个区域
3、中的像素灰度大致相同,而区域之间的边界就称为边缘,寻找这些边缘就是图像边缘检测的目的。图像边缘检测的结果直观地看类似图像的骨架,对图像边缘检测结果的细化是图像边缘细化很好的示例,如图17-6所示,其中a为原始图像,b为a图像的Sobel边缘检测结果。图17-6 图像的Sobel边缘检测示例正如之前所讲,采用3*3邻域可以避免在像素之间内插点上计算梯度。Sobel算子也是一种梯度幅值,该算子包含两组3*3的,分别为横向及纵向,将之与图像作平面,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,及分别代表经横向及纵向边缘检测的图像,其模板的卷积因子如下: 模板系数总和为零,这正如倒数算
4、子所预示的:此时在灰度级不变的区域,模板响应为零。具体的卷积算法如下: 其中f(i,j),表示图像(i,j)点的灰度值;图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小: (17.3.1)然后可用以下公式计算梯度方向: (17.3.2)在以上例子中,如果以上的角度等于零,即代表图像该处拥有纵向边缘,左方较右方暗。在门限处理时,采用基本全局门限:当某像素点(i,j)的梯度值大于或等于设定的门限T时,规定该点的灰度值为255,反之则不变。即: Sobel算子认为邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说
5、,距离越大,产生的影响越小。Sobel算子根据像素点上下、左右邻点灰度值加权值,在边缘处达到极大值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高的时候,是一种较为常用的边缘检测的方法。Sobel算子是边缘检测器中最常用的算子之一。17.3.2 算法步骤与流程图为了对图像利用Sobel算子进行边缘检测,编程主要步骤如下: 输入:原灰度图像sourceIMG;输入:噪声强度range;输出:加噪后的高斯噪声图像resultIMG;Step 1:获取原图像的高rows与宽度cols;Step 2:为输出图像resultIMG申请空间;Ste
6、p 3:for ( i=0; i cols*(rows-2) - 2; i+) 取3*3模板对应的原始像素; 利用Sobl垂直算子和水平算子计算相应差分并取绝对值输出像素=垂直方向差分+水平方向差分;end for Step 4: 输出图像resultIMG,程序结束。对应的程序流程图如下图所示。17.3.3 C语言代码与分析 Sobel算法对应的DSP程序如下:/* =*/* Xian University of Posts & Telecommunications */* */* NAME */* IMG_sobel */* */* REVISION DATE */* 7-Jan-2013
7、 */* */* USAGE */* This routine is C-callable and can be called as: */* */* void IMG_sobel */* ( */* const unsigned char *in_data, / 输入图像数据 / */* unsigned char *out_data, / 输入图像数据 / */* short cols, short rows / 图像的宽度和高度 / */* ) */* */* 一幅宽度为cols高度为rows的图像经过IMG_sobel滤波后, */* 输出图像的宽度为cols,高度为rows - 2
8、*/* */* 算法描述 */* */* 假定图像为以下形式装载入输入缓冲区 */* */* yyyyyyyyyyyyyyyy */* yxxxxxxxxxxxxxxy */* yxxxxxxxxxxxxxxy */* yxxxxxxxxxxxxxxy */* yxxxxxxxxxxxxxxy */* yyyyyyyyyyyyyyyy */* */* 则输出为: */* */* tXXXXXXXXXXXXXXz */* zXXXXXXXXXXXXXXz */* zXXXXXXXXXXXXXXz */* zXXXXXXXXXXXXXXt */* */* 其中: */* */* X = IMG_s
9、obel(x) x为算法工作像素,x像素周围的像素会被使用 */* */* t 该位置的像素保持不变 */* */* z = IMG_sobel(y) 因为算法处理必须的像素缺失该位置输出没有 */* 意义 */* */* 这意味着我们只处理了rows-2行数据,对于每一行我们逐个像素进行处理。 */* */* 同样的,第一行的第一个像素和最后一行的最后一个像素不被计算 */* */* 以下水平和垂直算子将被使用以获得输出像素。 */* */* 水平(Horizontal): */* -1 -2 -1 */* 0 0 0 */* 1 2 1 */* */* 垂直(Vertical): */*
10、-1 0 1 */* -2 0 2 */* -1 0 1 */* */* 注意: */* 输出中每一行中最左一个像素和最右一个像素无意义 */* */* -. */* Copyright (c) 2013 by Bai Bendu, Xian University of Posts & Telecommunications. */* All Rights Reserved. */*=*/void IMG_sobel( const unsigned char *restrict in, /* 输入图像数据 */ unsigned char *restrict out, /* 输出图像数据 */
11、int cols, int rows /* 图像的高度和宽度 */) int H, O, V, i; int i00, i01, i02; int i10, i12; int i20, i21, i22; int w = cols; /* - */ /* 遍历整幅图像进行边缘检测. */ /* - */ for (i = 0; i 255) O = 255; /* - */ /* Store it. */ /* - */ outi + 1 = O; 二、试验步骤、结果与分析17.4 试验结果与分析17.4.1 试验目的1.培养学生理解边缘检测的方法2.掌握图像处理的基本方法17.4.2 试验设
12、备1.PC兼容机一台:操作系统WindowsXP(或WindowsNT、Windows98、Windows2000),Windows操作系统的内核如果是NT应安装相应的补丁程序(如:Windows2000为Service Pack3,WindowsaXP为Service Pack1)。 2. Code Composer Studio 2.2 软件开发环境; 3. TS-DM64x实验箱一台(Simulator软件仿真可以不要实验箱)。17.4.3 试验步骤以软件仿真(Simulator)方式为例,试验步骤如下:1. 设置CCS工作在软件仿真环境。(1)双击桌面上Setup CCS studio
13、图标,运行CCS Setup,进入CCS设置窗口; (2)在出现的窗口中,按第七章所述的方法与顺序进行CCS设置;(3)在弹出的窗口中点击“是”按键保存设置,退出CCS Setup,进入CCS开发环境。此时CCS被设置成Simulator仿真模式,如果一直使用该方式则不需要重新进行上述设置操作了。2. 启动CCS。双击桌面上CCS 2 (C6000)图标,运行CCS。3. 打开工程,编译并运行程序。运行直方图统计程序,打开TS-DM64x_examplesLab-Chap17image642.pjt。 4. 运行程序,观察试验结果。17.4.4 试验结果Sobel算子边缘检测程序按如下方法验证
14、试验结果:(1)编译、链接程序:执行菜单Project/Rebuild All,汇编结果在将汇编信息输出窗口中给出。编译后将在Bebug目录中产生一个Sobel.out。(2)加载程序:执行File/Load Program,选择MedianFilter.out并打开,即将可执行文件加载到DSP软件仿真器simulator中,此时CCS将自动打开一个反汇编窗口。(3)将原始图像的数据从dat文件读入到内存:执行File/data/load,将原始图像数据从Gray_lena160x160.dat (说明:*.dat格式,内部存放了某图像各像素的灰度值)文件中加载入到数据存储器,即在弹出的窗口中
15、输入存储地址IMG与数据的长度,如下图所示。图17-4-1(4)运行程序:执行Debug/Run。为了便于观看试验前后的结果,可以在程序中设置断点,采用单步执行的方法运行程序。(5)显示滤波前的图像:执行View/Graph/Image,在弹出的对话框中选择颜色类型为RGB,并输入RGB彩色图像三个通道数据的地址,以及图像显示格式(显示几行、每行几像素)等内容,如下图所示。这样,原始图像如图17-4-3所示。图17-4-2 CCS图形化显示原图设置窗口图17-4-3 原始图像(6)显示结果数据,执行View/Graph/Image,在弹出的对话框中选择颜色类型为RGB,并输入RGB彩色图像三个
16、通道数据的地址,以及图像显示格式。并输入灰度图像据的地址,以及缓冲区大小,显示数据大小,显示数据类型等内容,如下图所示。图17-4-4 CCS图形化显示结果图像显示设置窗口如图17-4-5所示,图中结果为sobel算子边缘检测结果。图17-4-5 Sobel算子边缘检测结果显示(7)程序编译过程中若有错误,根据CCS给出的错误提示进行修改。梯度边缘检测方法利用梯度幅值在边缘处达到极值检测边缘。该法不受施加运算方向所限制,同时能获得边缘方向信息,定位精度高,但对噪声较为敏感。Sobel算子:根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象进行检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。Sobel算子认为,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越远,产生的影响越小。三、要求在“Sobel算子”的基础上,自己实现“Prewitt, Roberts算子”图像边缘检测。专心-专注-专业