边缘检测和轮廓提取

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
摘要 (2)
Abstract (3)
1概述 (4)
1.1数字图像处理的意义 (4)
1.2MATLAB简介 (4)
1.3设计任务 (5)
2边缘检测 (6)
2.1图像的边缘 (6)
2.2边缘检测的基本步骤 (6)
2.3边缘检测算法 (7)
2.3.1Reborts算子 (7)
2.3.2Sobel算子 (8)
2.3.3Prewitt 算子 (8)
2.3.4Kirsch 算子 (9)
2.3.5LOG算子 (10)
2.3.6Canny算子 (11)
3轮廓提取 (12)
4实验仿真 (13)
4.1 Sobel算子代码 (13)
4.2轮廓提取算法 (15)
4.3仿真结果及分析 (18)
5实验小结 (19)
6参考文献 (20)
摘要
图像边缘是图像最基本的特征之一,往往携带着一幅图像的大部分信息。

而边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是我们在图像边缘检测时所需要的非常重要的一些特征条件,这就需要我们对一幅图像检测并提取出它的边缘。

而边缘检测算法则是图像边缘检测问题中经典技术难题之一,它的解决对于我们进行高层次的特征描述、识别和理解等有着重大的影响;又由于边缘检测在许多方面都有着非常重要的使用价值,所以人们一直在致力于研究和解决如何构造出具有良好性质及好的效果的边缘检测算子的问题。

本此实验主要分析几种应用于数字图像处理中的边缘检测算子,根据它们在实践中的应用结果进行研究,主要包括:Robert 边缘算子、Prewitt 边缘算子、Sobel 边缘算子、Kirsch 边缘算子以及Laplacian 算子等对图像及噪声图像的边缘检测,根据实验处理结果讨论了几种检测方法的优劣.
关键词:数字图像处理;边缘检测;算子
Abstract
The edges of the image, one of the basic characteristics of the image tend to carry most of the information in the image. Edge exists in the irregular structure of the image and non-stationary phenomena, i.e. exist in a mutation point of the signal, these points are given the location of the image contours, these contours are often required in image edge detection is very important some of the characteristics of the condition, which we need to detect and extract its edge image. The edge detection algorithm is the classic one of the technical problems of image edge detection problems, the solution for our high-level characterization, recognition and understanding has a significant impact; edge detection are very important in many ways value in use, so people have been devoted to the study and solve the problem of how to construct edge detection operator with a good nature and good results.
This experiment analysis of several used in digital image processing, edge detection operator research results according to their application in practice, including: The Robert Edge Operator child Prewitt edge operator, Sobel edge operator, Kirsch edge operator and Laplacian operator on the image and noise image edge detection discussed the pros and cons of several detection methods, according to the results of the experimental treatment.
Keywords: digital image processing; edge detection; operator
1概述
1.1数字图像处理的意义
数字图像处理技术的迅猛发展,其应用前景得到了不可限量的扩展,如今各行各业都在积极发展与图像相关的技术。

其应用逐渐凸显其魅力,其应用如医学影像、航天航空、无人驾驶、自动导航、工业控制、导弹制导、文化艺术等。

边缘检测在图像处理和计算机视觉等领域骑着重要的作用,是图像分析、模式识别、目标检测与分割等的前期处理。

前期边缘检测的好坏,直接影响后期更高级处理的精度。

自从1986年John Canny提出了最优边缘检测算子的三条准则并推导出了一个近似实现。

但是在实际中,真正实现这一目标尚有较大的难度。

这是因为:(1)实际图像一般都含有噪声,并且噪声的分布信息业是未知的,同时噪声和边缘都属于高频信息,在进行滤波的同时,虽然能够在一定程度上抑制噪声,却也丢失了边缘信息。

(2)由于场景、光照条件的边缘等原因,同一场景在不同光照条件下得到的边缘可能也是不同的,设置的阈值也可能是不同的。

针对这些问题,如何进行改进,并得到较理想的边缘检测算子是有必要的。

另一方面,轮廓提取技术是图像分割、目标区域识别区域行状提取等图像分析处理领域十分重要的基础。

寻求非接触、精度高、具有综合分析能力的识别方法来代替人工目测,解决图像表面的模式识别和测量问题,是图像加工行业面临的一大难题,也是值得我们长期探讨的科研课题
1.2MATLAB简介
Matlab是美国MathWorks公司出品的商业化数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级计算语言和交互式环境,主要包括Matlab和Simulink两大部分。

Matlab是矩阵实验室(MatrixLaboratory)的简称,和Mathematica、Maple并称为三大数学软件。

Matlab可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应
用于工程计算、控制设计、信号处理于通讯、图像处理、信号检测、金融建模设计与分析等领域。

Matlab的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用Matlab来解决问题要比用C、FORTRAN等语言完成相同的事情简捷的多,并且Mathwork也吸收了像Maple等软件的优点,使Matlab成为一个强大的数学软件。

Matlab图像处理程序开发的特点是上手容易,开发周期短,见效快,和VB、VC等专业级编程工具相比,在Matlab平台上开发图像处理软件程序代码编写量明显较小[3]。

这是因为Matlab有专门的图像处理工具箱,有很多实现某种图像处理功能的函数,而专业级的编程工具并没有专门为图像处理而编写的函数,很多图像处理函数需要开发者自己编写。

因此,图像处理工作采用Matlab编程是非常合适的。

1.3设计任务
针对一幅图像,利用边缘检测算子(如Robert算子、Sobel算子、Prewitt 算子、Laplace算子、Kirsch算子和Marr算子)检测出图像的边缘,然后采取轮廓提取算法得到封闭的二值图像轮廓。

2边缘检测
2.1图像的边缘
在数字图像中,边缘是指图像局部变化最显著的部分,边缘主要存在于目标与目标,目标与背景之间,是图像局部特性的不连续性,如灰度的突变、纹理结构的图标、颜色的图标等。

尽管图像的边缘点产生的原因各不相同,但他们都是图形上灰度不连续或灰度几句辩护的点,图像边缘分为阶跃状、斜坡状和屋顶状。

从成因上看,一般图像边缘主要由四个方面的因素形成:
(1)图像灰度在表面法向变化的不连续造成的边缘;
(2)图像对像素在空间上不一致形成的边缘;
(3)在光滑的表面上由于颜色的不一致形成的边缘;
(4)物体的光影造成的边缘。

图像边缘提取的作用有:
(1)改良图像质量;
(2)分离对象;
(3)理解和重构视觉场景;
(4)识别特征。

2.2边缘检测的基本步骤
(1)滤波:边缘检测主要基于导数计算,会受到噪声的影响,可以通过设计滤波器来降低噪声,但滤波器在降低噪声的同时也会导致边缘精度的损失。

(2)增强:增强算法将邻域中灰度有显著变化的点突出显示。

一般通过计算梯度幅值来完成。

(3)检测:在有些图像中梯度幅值较大的并不是边缘点。

最简单的边缘检测
是梯度幅值阈值判定。

(4)定位:精确确定边缘的位置。

2.3边缘检测算法
特征提取作为图像边缘检测的一个重要内容,发展了众多的方法。

这些方法经过实践的检验,成为了经典的内容。

经典的边缘检测算子包括:Roberts 算子、Prewitt 算子、Sobel 算子、Log 算子、Canny 算子等,这些经典的边缘提取算子在使用时都是使用预定义的边缘模型去匹配。

2.3.1Reborts 算子
Reboerts 算子是一种利用局部差分来寻找边缘的算子,Roberts 梯度算子所采用的是对角方向相邻两像素值之差,算子形式如下:
)1,1(),(---=j i f j i f Gx
)1,(),1(---=j i f j i f Gy
22|),(|y x G G y x G +=
Roberts 梯度算子对应的卷积模版为:
⎥⎦⎤⎢⎣⎡-=1001Gx ⎥⎦⎤⎢⎣⎡-=0110Gy 用以上两个卷积算子与图像运算后,可求出图像的梯度幅值 G ( x,y),然后选择适当的阈值τ ,若 G ( x,y)>τ,则 (i ,j)为边缘点,否则,判断 (i ,j)为非边缘点。

由此得到一个二值图像 { g (i,j)},即边缘图像。

Roberts 算子采用的是用对角线方向上相邻两像素的差近似梯度幅值来检测边缘,它的定位精度高,对于水平和垂直方向的边缘,检测效果较好,而对于有一定倾角的斜边缘,检测效果则不理想,存在着许多的漏检。

另外,在含噪声的情况下,Roberts 算子不能有效的抑制噪声,容易产生一些伪边缘。

因此,该算子适合于对低噪声且具有陡峭边缘的图像提取边缘。

2.3.2Sobel 算子
Sobel 算子在边缘检测算子扩大了其模版,在边缘检测的同时尽量削弱了噪声。

其模版大小为3×3,其将方向差分运算与局部加权平均相结合来提取边缘。

在求取图像梯度之前,先进行加权平均,然后进行未分,加强了对噪声的一致。

Sobel 算子所对应的卷积模版为:
⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢---=101202`101Gx ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢--=121000121Gy
图像中的每个像素点和以上水平和垂直两个卷积算子做卷积运算后,再计算得到梯度幅值 G ( x,y),然后选取适当的阈值τ ,若 G ( x,y)>τ,则 (i ,j)为边缘点,否则,判断 (i ,j)为非边缘点。

由此得到一个二值图像 { g (i,j)},即边缘图像。

Sobel 算子在空间上比较容易实现,不但产生较好的边缘检测效果,同时,由于其引入了局部平均,使其受噪声的影响也较小。

若使用较大的邻域,抗噪性会更好,但也增加了计算量,并且得到的边缘比较粗。

在对精度要求不是很高的场合下,Sobel 算子是一种较为常用的边缘检测算法。

2.3.3Prewitt 算子
同 Sobel 算子相似,Prewitt 算子也是一种将方向的差分运算和局部平均相结合的方法,也是取水平和垂直两个卷积核来分别对图像中各个像素点做卷积运算,所不同的是,Sobel 算子是先做加权平均然后再微分,Prewitt 算子是先平均后求微分,其对应的卷积模版为:
⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢---=101101`101Gx ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢---=111000111Gy (2.3.8)
图像中的每个像素点和以上水平和垂直两个卷积算子做卷积运算后,再计算得到梯度幅值 G ( x,y),然后选取适当的阈值τ ,若 G ( x,y)>τ,则 (i ,j)为边缘点,否则,判断 (i ,j)为非边缘点。

由此得到一个二值图像 { g (i,j)},即边缘图
像。

在此基础上,有人提出了改进的Prewitt 算子,将其扩展到八个方向,依次用这些边缘模板去检测图像,与被检测区域最为相似的样板给出最大值。

用这个最大值作为算子的输出值 P[ i ,j],这样就可将边缘像素检测出来。

八个方向的 Prewitt 算子模板及其所对应的边缘方向如下所示:
⎥⎥⎥⎦
⎥⎢⎢⎢⎣⎢----111121`111 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢----111121`111 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢----111121`111 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢---111121`111 0°方向 45°方向
90°方向 135°方向 ⎥⎥⎥⎦
⎥⎢⎢⎢⎣⎢----111121111 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢----111121111 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢----111121111 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢----111121`111 180°方向 225°方向 270°方向 315°方向
Prewitt 算子通过对图像上的每个像素点的八方向邻域的灰度加权差之和来进行检测边缘,对噪声有一定抑制作用,抗噪性较好,但由于采用了局部灰度平均,因此容易检测出伪边缘,并且边缘定位精度较低。

2.3.4Kirsch 算子
Kirsch 算子是一种 3×3 的非线性方向算子。

其基本思想是希望改进取平均值的过程,从而尽量使边缘两侧的像素各自与自己同类的像素取平均值,然后再求平均值之差,来减小由于取平均值所造成的边缘细节丢失。

通常采用八方向 Kirsch 模板的方法进行检测,取其中最大的值作为边缘强度,而将与之对应的方向作为边缘方向。

常用的八方向 Kirsch 模板如下所示:
⎥⎥⎥⎦
⎥⎢⎢⎢⎣⎢-----533503533 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢-----333503`553 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢-----333303555 ⎥⎥⎥⎦
⎥⎢⎢⎢⎣⎢-----333305355
⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢-----335305335 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢-----355305333 ⎥⎥⎥⎦⎥⎢⎢⎢⎣⎢-----555303333 ⎥⎥⎥⎦
⎥⎢⎢⎢⎣⎢-----553503`333 实际的应用中,通常都是利用简单的卷积核来计算方向差分的,不同的算子对应着不同的卷积核。

它们在图像的像素点上所产生的两个方向的偏导数用均方值或者绝对值求和的形式来近似代替梯度幅值,然后选取一个合适的阈值,用所得到的梯度幅值和所设定的阈值进行比较来判断边缘点。

若大于所取的阈值,则判断为边缘点;否则,判断为非边缘点。

很显然,在提取边缘的过程中,阈值的选取特别重要,尤其在含噪图像中,阈值的选择要折衷考虑噪声造成的伪边缘和有效边缘的丢失。

2.3.5LOG 算子
LOG 算子基本思想是:先在一定的范围内做平滑滤波,然后再利用差分算子来检测在相应尺度上的边缘。

滤波器的选择要考虑以下两个因素:其一是滤波器在空间上要求平稳,即要求空间位置误差 Δ x 要小;其二是平滑滤波器本身要求是带通滤波器,并且在有限的带通内是平稳的,即要求频域误差 Δω 要小。

根据信号处理中的测不准原理, Δx 和 Δ ω是相互矛盾的,而达到测不准下限的滤波器就是高斯滤波器。

Marr 和 Hildreth 提出的这种差分算子是各向同性的拉普拉斯二阶差分算子。

该边缘检测器的基本特征是:
(1) 所用的平滑滤波器是高斯滤波器
(2) 增强步骤采用的是二阶导数(即二维拉普拉斯函数)
(3) 边缘检测的判据是二阶导数过零点并且对应一阶导数的极大值
该方法的特点是先用高斯滤波器与图像进行卷积,既平滑了图像又降低了噪声,使孤立的噪声点和较小的结构组织被滤除。

然而由于对图像的平滑会导致边缘的延展,因此只考虑那些具有局部梯度极大值的点作为边缘点,这可以用二阶导数的零交叉来实现。

拉普拉斯函数可用作二维二阶导数的近似,因为它是一种标量算子。

为了避免检测出非显著的边缘,所以应该选择一阶导数大
于某一阈值的零交叉点来作为边缘点。

实际应用中,常用的LOG算子的模版为:
这说明,高斯平滑运算不但可以滤除噪声,还会导致图像中的边缘和其它
尖锐不连续部分模糊,而模糊程度取决于空间尺度因子σ的大小。

σ越大,高斯滤波对噪声的滤除效果越好,但同时也会丢失重要的边缘信息,影响到边缘
检测器的性能。

如果σ较小,又可能导致平滑作用不完全而留有较多的噪声。

因此在实际应用中,要根据情况选择适当的σ。

2.3.6Canny算子
1986年,Canny从边缘检测算子应该满足的三个准则出发,推导出了最优
边缘检测算子Canny算子,该算子是目前理论上相对最完善的一种边缘检测算法。

Canny提出的评价边缘检测性能优劣的三个准则分别是:
(1)好的信噪比准则。

即将非边缘点判为边缘点的概率要低,将边缘点判为
非边缘点的概率要低;
(2)好的定位性能准则。

即检测出的边缘点要尽可能在实际边缘的中心;
(3)单边缘响应准则。

即单一边缘具有唯一响应,单一边缘产生的多个响应
的概率要低,并且对虚假边缘的响应应得到最大抑制。

利用Canny算子检测边缘的算法如下:
(1)用式所示的高斯函数h(r)对图像进行平滑滤波,去除图像中的噪声。

(2)在每一点计算出局部梯度和边缘方向,可以利用Sobel算子、Roberts算
子等来计算。

边缘点定义为梯度方向上其强度局部最大的点。

(3)对梯度进行“非极大值抑制”。

(4)双阐值化和边缘连接。

3轮廓提取
图像的轮廓作为图像的一种基本特征,经常被应用到较高层次的图像应用中去。

它在图像识别,图像分割,图像增强以及图像压缩等的领域有广泛应用,也是图像处理的基础。

图像的轮廓往往携带着一幅图像的大部分信息。

而轮廓即在于图像的不规则结构和不稳定上,也存在于信号的突变点处,这些点给出了图像轮廓的位置,这些轮廓常常是我们在图像边缘检测时所需的非常重要的特征条件,因而这就需要我们对一幅图像检测并提取出它的轮廓。

经典的轮廓提取技术大都基于微分运算。

首先通过平滑来滤除图像中的噪声,然后进行一阶微分或二阶微分运算,求得梯度最大值或二阶导数的过零点,最后选取适当的阈值来提取边界。

本次课设所用的轮廓提取算法非常简单,就是掏空内部点:如果原图中有一点为黑,且它的8个相邻点都是黑色时(此时该点是内部点),则将该点删除。

要注意的是,我们处理的虽然是二值图,但实际上是256级灰度图,不过只用到了0和255两种颜色。

4实验仿真
4.1 Sobel算子代码
function kirsch= edgekirsch(gray,th)
[m,n]=size(gray); %得到图像的大小(长和宽)
temp=double(gray);
kirsch=zeros(m,n); %定义一个大小为S的零矩阵
%利用Sobel算子进行边缘提取
for i=2:m-1
for j=2:n-1
d1 =(5*temp(i-1,j-1)+5*temp(i-1,j)+5*temp(i-1,j+1)-3*temp(i,j-1)-3*temp(i,j+1)-
3*temp(i+1,j-1)-3*temp(i+1,j)-3*temp(i+1,j+1))^2; %Sobel算子的dx(垂直梯度)
d2 =((-3)*temp(i-1,j-1)+5*temp(i-1,j)+5*temp(i-1,j+1)-3*temp(i,j-1)+5*temp(i,j+1)-3*temp(i+1,j-1)-3*temp(i+1,j)-3*temp(i+1,j+1))^2; %Sobel算子的dy(水平梯度)
d3 =((-3)*temp(i-1,j-1)-3*temp(i-1,j)+5*temp(i-1,j+1)-3*temp(i,j-1)+5*temp(i,j+1)-3*temp(i+1,j-1)-3*temp(i+1,j)+5*temp(i+1,j+1))^2;
d4 =((-3)*temp(i-1,j-1)-3*temp(i-1,j)-3*temp(i-1,j+1)-3*temp(i,j-1)+5*temp(i,j+1)-3*temp(i+1,j-1)+5*temp(i+1,j)+5*temp(i+1,j+1))^2;
d5 =((-3)*temp(i-1,j-1)-3*temp(i-1,j)-3*temp(i-1,j+1)-3*temp(i,j-1)-
3*temp(i,j+1)+5*temp(i+1,j-1)+5*temp(i+1,j)+5*temp(i+1,j+1))^2;
d6 =((-3)*temp(i-1,j-1)-3*temp(i-1,j)-3*temp(i-1,j+1)+5*temp(i,j-1)-
3*temp(i,j+1)+5*temp(i+1,j-1)+5*temp(i+1,j)-3*temp(i+1,j+1))^2;
d7 =(5*temp(i-1,j-1)-3*temp(i-1,j)-3*temp(i-1,j+1)+5*temp(i,j-1)-
3*temp(i,j+1)+5*temp(i+1,j-1)-3*temp(i+1,j)-3*temp(i+1,j+1))^2;
d8 =(5*temp(i-1,j-1)+5*temp(i-1,j)-3*temp(i-1,j+1)+5*temp(i,j-1)-3*temp(i,j+1)-
3*temp(i+1,j-1)-3*temp(i+1,j)-3*temp(i+1,j+1))^2;
tmp=d1;
if d2>tmp
tmp=d2;
else if d3>tmp
tmp=d3;
else if d4>tmp
tmp=d4;
else if d5>tmp
tmp=d5;
else if d6>tmp
tmp=d6;
else if d7>tmp
tmp=d7;
else if d8>tmp
tmp=d8;
end
end
end
end
end
end
end
kirsch(i,j)=round(sqrt(tmp));
% kirsch(i,j)=round(sqrt(d1+d2+d3+d4+d5+d6+d7+d8)); %梯度模取整
end
end
for i=1:m
for j=1:n
if kirsch(i,j)>th
kirsch(i,j)=255; %将梯度值与阈值比较,大于T则把图像的灰度变为255,小于T则把图像的灰度变为0
kirsch(i,j)=0;
end
end
end
close all
clear;
clc;
origin=imread('yunshen.jpg');
gray=rgb2gray(origin);
sobel=edge(gray,'sobel'); sobel 边缘检测器imwrite(sobel,'sobel.jpg');
figure(1),imshow(sobel),title('sobel edge');
4.2轮廓提取算法
BOOL Outline(HWND hWnd)
{
DWORD OffBits,BufSize; LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HLOCAL hTempImgData; LPBITMAPINFOHEADER lpTempImgData; LPSTR lpTempPtr;
HDC hDc;
HFILE hf;
LONG x,y;
int nw,n,ne,w,e,sw,s,se;
//我们处理的实际上是256级灰度图,不过只用到了0和255两种颜色。

if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!", "Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);
//BufSize为缓冲区大小
BufSize=OffBits+bi.biHeight*LineBytes;
//为新图缓冲区分配内存
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|
MB_ICONEXCLAMATION);
return FALSE;
}
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData); //拷贝头信息和位图数据
memcpy(lpTempImgData,lpImgData,BufSize);
for (y=1;y<bi.biHeight-1;y++){ //注意y的范围是从1到高度-2
//lpPtr指向原图数据,lpTempPtr指向新图数据
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);
for (x=1;x<bi.biWidth-1;x++){
if(*(lpPtr+x)==0){ //是个黑点
//查找八个相邻点
nw=(unsigned char)*(lpPtr+x+LineBytes-1);
n=(unsigned char)*(lpPtr+x+LineBytes);
ne=(unsigned char)*(lpPtr+x+LineBytes+1);
w=(unsigned char)*(lpPtr+x-1);
e=(unsigned char)*(lpPtr+x+1);
sw=(unsigned char)*(lpPtr+x-LineBytes-1);
s=(unsigned char)*(lpPtr+x-LineBytes);
se=(unsigned char)*(lpPtr+x-LineBytes+1);
num=nw+n+ne+w+e+sw+s+se;
if(num==0) //说明都是黑点
*(lpTempPtr+x)=(unsigned char)255; //删除该黑点
}
}
}
if(hBitmap!=NULL)
DeleteObject(hBitmap);
hDc=GetDC(hWnd);
//创立一个新的位图
hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT,
(LPSTR)lpTempImgData+
sizeof(BITMAPINFOHEADER)+
NumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpTempImgData,
DIB_RGB_COLORS);
hf=_lcreat("c://outline.bmp",0);
_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
_lwrite(hf,(LPSTR)lpTempImgData,BufSize);
_lclose(hf);
//释放内存和资源
ReleaseDC(hWnd,hDc);
LocalUnlock(hTempImgData);
LocalFree(hTempImgData);
GlobalUnlock(hImgData);
return TRUE;
}
4.3仿真结果及分析
图一原图像图二 Sobel算子检测图像图三轮廓提取图像
Canny算子是基于最优化思想推导出的边缘检测算子,采用高斯函数对图像作平滑处理,因此具有较强的抑制噪声能力,同样该算子也会将一些高频边缘平滑掉,造成边缘丢失。

Canny算子也存在不足之处,一是为了得到较好的边缘检测结果,它通常需要使用较大的滤波尺度,这样容易丢失一些细节;二是Canny算子的双阈值要人为的选取,不能够自适应。

5实验小结
几天来一直在做课程设计,以前对通信的认识都比较零散,只知道大致的用法,同时MATLAB功能强大,内容丰富,需要有一定的程序设计能力,还要对通信原理的相关知识有比较明确的把握,而这些我都是欠缺的,所以在做这次课设时,遇到很多的问题,不过,还是一直坚持下来了。

这次课设让我对MATLAB有了较清晰和直观的认识,尽管许多内部函数还不知道,程序设计也只是一知半解,但对以后的学习有了较好的指引。

利用MATLAB以及其他的一些软件来进行通信原理等其他的课程学习是一个很好的方法。

不仅在知识学习上有较多的收获,在学习态度和方法上也起到了端正和提高作用,为了寻求知识的那份执著。

这次课程设计给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对程序的设计和仿真,都对我们所学的知识进行了检验。

让我明白了设计系统程序的一些基本思想。

总体来说,这次课程设计让我受益匪浅。

在摸索该如何设计程序使之实现所需功能的过程中,虽然很困难,但也很有趣,培养了我的设计思维,锻炼了操作能力。

在让我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐。

6参考文献
【1】刘泉编.通信电子线路.武汉理工出版社.2007年
【2】陈怀琛等编.MATLAB及在电子信息课程中的应用.电子工业出版社.2007年【3】樊昌信等编.通信原理.国防工业出版社.2007年
【4】数字信号处理的MATLAB实现.科学出版社.2007年
【5】THEX-1型实验平台实验指导书。

相关文档
最新文档