数字图像处理实验报告--边缘检测

合集下载

数字图像的边缘检测

数字图像的边缘检测

数字图像的边缘检测所谓边缘就是指图像局部亮度变化最显著的部分,它是检测图像局部变化显著变化的最基本的运算。

对于数字图像,图像灰度灰度值的显著变化可以用梯度来表示,以边缘检测Sobel算子为例来讲述数字图像处理中边缘检测的实现:对于数字图像,可以用一阶差分代替一阶微分;△xf(x,y)=f(x,y)-f(x-1,y);△yf(x,y)=f(x,y)-f(x,y-1)求梯度时对于平方和运算及开方运算,可以用两个分量的绝对值之和表示,即:G[f(x,y)]={[△xf(x,y)] +[△yf(x,y)] } |△xf(x,y)|+|△yf(x,y)|;Sobel梯度算子是先做成加权平均,再微分,然后求梯度,即:△xf(x,y)= f(x-1,y+1) + 2f(x,y+1) + f(x+1,y+1)- f(x-1,y-1) - 2f(x,y-1) - f(x+1,y-1);△yf(x,y)= f(x-1,y-1) + 2f(x-1,y) + f(x-1,y+1)- f(x+1,y-1) - 2f(x+1,y) - f(x+1,y+1);G[f(x,y)]=|△xf(x,y)|+|△yf(x,y)|;上述各式中的像素之间的关系见图我在视图类中定义了响应菜单命令的边缘检测Sobel算子实现灰度图像边缘检测的函数:对于边缘检测,大家只要知道有若干个检测模板(既边缘检测矩阵)可以直接实现检测功能就行了,现在将常用的检测实现公式列出如下:Roberts算子:G[i,i]=|f[i,j]-f[i+1,j+1]|+|f[i+1,j]-f[i,j+1]|;Sobe算子:G[i,i]=|f[i-1,j+1]+2f[i,j+1]+f[i+1,j+1]-f[i-1,j-1]-2f[i,j-1]-f[i+1,j-1]|+|f[i-1,j-1]+2f[i-1,j]+f[i-1,j+1]-f[i+1,j-1]-2f[i+1,j]-f[i+1,j+1]|;拉普拉斯算子:G[I,j]=|f[i+1,j]+f[i-1,j]+f(i,j+1)+f[i,j-1]-4f[i,j]|;其中G[i,j]表示处理后(i,j)点的灰度值,f[i,j]表示处理前该点的灰度值。

边缘检测实验报告

边缘检测实验报告

边缘检测实验报告边缘检测实验报告引言:边缘检测是图像处理中的一项重要任务,它能够有效地提取图像中物体的边界信息,为后续的图像分割、物体识别等任务提供基础。

本实验旨在探究不同的边缘检测算法在不同场景下的表现,并对其进行评估和比较。

一、实验背景边缘检测是图像处理领域的经典问题,早期的边缘检测算法主要基于梯度的计算,如Sobel、Prewitt等。

随着深度学习的发展,基于卷积神经网络的边缘检测方法也取得了显著的进展。

本实验将选择传统的Sobel算子和基于深度学习的Canny算法进行对比。

二、实验步骤1. 数据准备:选择一组包含不同场景、不同复杂度的图像作为实验数据集,确保数据集的多样性和代表性。

2. 算法实现:使用Python编程语言,利用OpenCV库实现Sobel算子和Canny 算法。

对于Sobel算子,我们将尝试不同的卷积核大小和阈值设置。

对于Canny算法,我们将调整高低阈值的取值范围。

3. 实验评估:使用评估指标来衡量不同算法的性能,如准确率、召回率、F1值等。

同时,我们还可以通过可视化的方式来比较不同算法的边缘检测效果。

三、实验结果在实验中,我们选择了10张不同类型的图像进行边缘检测,并使用Sobel算子和Canny算法进行处理。

通过对比实验结果,我们得出以下结论:1. Sobel算子:- 当卷积核大小较小(如3x3)时,Sobel算子能够较好地检测到图像中的细节边缘,但对于噪声较多的图像效果较差。

- 当卷积核大小较大(如7x7)时,Sobel算子能够更好地抑制噪声,但会导致边缘检测结果的模糊。

- 阈值的设置对Sobel算子的效果也有较大影响,较低的阈值可以提高边缘检测的敏感性,但也容易引入噪声。

2. Canny算法:- Canny算法基于梯度的计算和非极大值抑制,能够有效地检测到图像中的边缘,并且对噪声有较好的鲁棒性。

- 高低阈值的设置对Canny算法的效果影响较大,合适的阈值范围可以提高边缘检测的准确性和稳定性。

数字图像处理中的边缘检测与提取技术

数字图像处理中的边缘检测与提取技术

数字图像处理中的边缘检测与提取技术数字图像处理是一门极为重要的技术,在现代化的科技时代中,其广泛性和应用性已经远远超越人们的想象。

因此,数字图像处理技术也得到了越来越多的研究和应用。

在这些技术中,边缘检测与提取技术无疑占据了很大的比重。

本文就来深入探讨数字图像处理中的边缘检测与提取技术。

一、数字图像的边缘概述在数字图像中,边缘指的是图像由一个物体和另一个物体之间的边界。

在物理世界中,边界就是物体的边界。

在数字图像中,边界则是不同区域之间颜色或亮度发生变化的地方。

在实际应用中,数字图像的边缘检测非常重要。

例如,在计算机视觉中,它是对象检测和跟踪的关键。

二、数字图像的边缘提取方法数字图像的边缘检测与提取一直是数字图像处理中的研究热点之一。

为了准确地检测和提取图像的边缘特征,现有许多不同的边缘检测和提取方法。

其主要的方法有:1. 基于梯度的边缘检测方法基于梯度的边缘检测方法通常使用Sobel、Prewitt或Roberts等算子来计算梯度。

这些算子可以对图像中每个像素的灰度值进行微分,以寻找灰度变化的最大值,以确定边界的位置。

虽然这种方法在大多数情况下能够有效地检测出边缘,但它对边缘噪声非常敏感。

因此,需要结合其他滤波器,如高斯滤波器或中值滤波器,对原始图像进行滤波。

2. 基于模板的边缘检测方法基于模板的边缘检测方法,也称为基于Laplace算子的边缘检测方法,通常使用Laplace算子将图像的高斯平滑滤波结果与模板相乘,以检测图像中的边界。

此外,也可以采用另一种常用的算子Canny算子。

3. 基于阈值的边缘检测方法基于阈值的边缘检测方法是最常见的边缘检测方法之一。

为了提取图像中的边缘,该方法使用预先定义的阈值将灰度值低于阈值的像素识别为背景像素,将灰度值高于阈值的像素视为边缘像素。

但是,这种方法通常对于灰度不稳定的图像效果不好,需要将阈值与其他滤波器结合使用,如先进行对比度增强。

三、数字图像的边缘检测算法的评价边缘检测算法被广泛用于许多领域的数字图像处理中。

数字图像处理实验报告-图像边缘检测和特征提取

数字图像处理实验报告-图像边缘检测和特征提取

华南师范大学实验报告一、实验目的1、.掌握边缘检测的Matlab实现方法2、了解Matlab区域操作函数的使用方法3、了解图像分析和理解的基本方法4、了解纹理特征提取的matlab实现方法二、实验平台计算机和Matlab软件环境三、实验内容1、图像边缘检测2、图像纹理特征提取四、实验原理1、图像边缘检测图像理解是图像处理的一个重要分支,它研究的是为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。

边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。

在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。

边缘检测实际上就是检测图像特征发生变化的位置。

由于噪声和模糊的存在,检测到的边界可能会变宽或在某些点处发生间断,因此,边界检测包括两个基本内容:首先抽取出反映灰度变化的边缘点,然后剔除某些边界点或填补边界间断点,并将这些边缘连接成完整的线。

边缘检测的方法大多数是基于方向导数掩模求卷积的方法。

导数算子具有突出灰度变化的作用,对图像运用导数算子,灰度变化较大的点处算得的值比较高,因此可将这些导数值作为相应点的边界强度,通过设置门限的方法,提取边界点集。

一阶导数fx∂∂与fy∂∂是最简单的导数算子,它们分别求出了灰度在x和y方向上的变化率,而方向α上的灰度变化率可以用下面式子计算:cos sin (cos sin )f f f G i j x yααααα∂∂∂=+=+∂∂∂ 对于数字图像,应该采用差分运算代替求导,相对应的一阶差分为:(,)(,)(1,)(,)(,)(,1)x y f i j f i j f i j f i j f i j f i j ∆=--∆=--方向差分为: (,)(,)cos (,)sin x y f i j f i j f i j ααα∆=∆+∆函数f 在某点的方向导数取得最大值的方向是1tan /f f y x α-⎡⎤∂∂=⎢⎥∂∂⎣⎦,方向导数的最大值是1222f f G x y ⎡⎤⎛⎫∂∂⎛⎫=+⎢⎥ ⎪ ⎪∂∂⎝⎭⎢⎥⎝⎭⎣⎦称为梯度模。

数字图像处理实验报告(图像边缘检测)

数字图像处理实验报告(图像边缘检测)

实验报告实验名称实验三图像边缘检测课程名称数字图像处理姓名成绩班级学号日期地点备注:1、实验目的(1)了解并掌握使用微分算子进行图像边缘检测的基本原理;(2)编写程序使用 Laplacian 算子(二阶导数算子)实现图像锐化,进一步理解图像锐化的实质;(3)掌握使用不同梯度算子(一阶导数算子)进行图像边缘检测的原理、方法,根据实验结果分析各种算子的工作效果;(4)总结实验过程(实验报告,左侧装订):方案、编程、调试、结果、分析、结论。

2、实验环境(1)Windows XP/7(2)Matlab 7.1/7.143、实验方法本次实验要求对256×256大小,256级灰度的数字图像lena.img进行处理。

(1)对该图像进行锐化处理,要求采用Laplacian算子进行锐化,分α=1和α=2两种情况,按如下不同情况进行处理:①g1(m,n)=f(m,n)-α∇f②g2(m,n)=4αf(m,n)-α[f(m-1,n)+f(m+1,n)+f(m,n-1)+f(m,n+1)]I、要对图像进行处理,要先读取该图像,实验代码如下:close all;clear all;fid=fopen('lena.img','r');image=fread(fid,[256,256],'uint8');fclose(fid);II、读取图像后,对该图像的每一像素(不考虑图像的边界部分)进行遍历,根据公式①(公式①相当于做差分)对每一灰度进行计算,将所得的结果存入一矩阵g1中(矩阵g1初始化为该图像的矩阵),代码如下(仅以ɑ=1为例):g1=image;a=1;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1)g1(i,j)=(1+4*a)*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endendIII、根据公式②对图像的每一个像素(不考虑图像的边界部分)进行计算,将所得之存入矩阵g2中(g2初始化值为该图像的矩阵值),具体方法与上一步类似,代码如下(仅以ɑ=1为例):g2=image;a=1;[x,y]=size(image);for i=2:(x-1)for j=2:(y-1)g2(i,j)=4*a*image(i,j)-a*(image(i+1,j)+image(i-1,j)+image(i,j+1)+image(i,j-1));endend(2)分别利用 Roberts、Prewitt 和 Sobel 边缘检测算子,对原图像进行边缘检测,显示处理前、后图像。

数字图像处理中的边缘检测技术研究

数字图像处理中的边缘检测技术研究

数字图像处理中的边缘检测技术研究数字图像处理技术已经成为现代社会中不可或缺的一部分。

我们如今所浏览的许多网页、看到的广告、视频和图片等等,都是数字图像处理所产生的。

为了更好地处理和分析图像信息,图像处理领域的研究者们不断提高图像处理算法的复杂度和准确度。

其中边缘检测算法是数字图像处理领域中不可或缺的一部分,目前已有不少学者和研究机构致力于边缘检测技术的研究。

一、边缘检测技术的概念从直观上讲,我们可以认为边缘就是图像中明显的灰度变化。

边缘检测技术就是用计算机程序来检测图像中的各种边缘,包括强度、位置、形状等信息。

边缘检测在数学和信号处理中是一种非常基本的技术,它的主要目的是检测出图像中对象的轮廓,并使对象与背景分离。

在许多图像处理的应用中,只有通过检测出图像中的边缘信息,才能完成后续的处理操作。

二、边缘检测技术的分类根据边缘检测技术的特点和应用场景的不同,目前主要有以下几种常见的边缘检测技术。

1. 基于灰度变化的边缘检测技术这种边缘检测技术是根据图像中像素灰度值的梯度变化来检测边缘。

当像素灰度值之间的变化较大时,我们可以认为是图像中的边缘。

2. 基于方向的边缘检测技术在大多数应用场景中,边缘不仅包括灰度变化,还包括方向的变化。

例如人脸识别部分就需要检测面部的边缘,因此基于方向的边缘检测技术在这些场景中往往更适用。

这种技术通常采用Sobel、Prewitt、Roberts等操作来计算不同方向的梯度,以识别出图像中的各种边缘。

3. 基于物体内部特征的边缘检测技术这种边缘检测技术主要基于待处理的图像的物体内部特征。

它通常有以下特点:在物体内部无法直接观察到边缘,在处理图像特征上需要对其进行进一步分类和降噪。

4. 基于局部特征的边缘检测技术这种边缘检测技术是基于图像局部特征的一种处理方式。

它通常利用像素之间显著的灰度差异,并确定其中值最大的像素作为目标边缘点。

三、边缘检测技术的应用边缘检测技术已经广泛应用于许多领域中,包括自动驾驶、医学图像、计算机视觉和追踪等。

图像的边缘检测实验报告

图像的边缘检测实验报告

图像的边缘检测实验报告
《图像的边缘检测实验报告》
图像的边缘检测是计算机视觉领域中的重要技术之一,它可以帮助我们识别图
像中物体的边缘和轮廓,从而实现图像分割、特征提取和目标识别等应用。


本次实验中,我们将对几种常用的边缘检测算法进行比较和分析,以评估它们
在不同场景下的性能和适用性。

首先,我们使用了Sobel算子进行边缘检测。

Sobel算子是一种基于梯度的边缘检测方法,它通过对图像进行卷积操作来寻找像素值变化最大的地方,从而找
到图像中的边缘。

实验结果显示,Sobel算子在一些简单场景下表现良好,但
在复杂背景和噪声干扰较大的情况下效果不佳。

接着,我们尝试了Canny边缘检测算法。

Canny算法是一种多阶段的边缘检测
方法,它通过对图像进行高斯滤波、计算梯度、非极大值抑制和双阈值处理等
步骤来检测图像中的边缘。

实验结果显示,Canny算法在复杂场景下表现出色,能够有效地抑制噪声并找到图像中的真实边缘。

最后,我们还尝试了Laplacian算子和Prewitt算子等其他边缘检测算法,并对
它们的性能进行了比较和分析。

实验结果显示,不同的边缘检测算法在不同场
景下表现出各自的优势和劣势,需要根据具体的应用需求来选择合适的算法。

总的来说,本次实验对图像的边缘检测算法进行了全面的比较和分析,为我们
进一步深入理解和应用这些算法提供了重要的参考和指导。

希望通过这些实验
结果,我们能够更好地利用边缘检测技术来解决实际的图像处理问题,为计算
机视觉领域的发展做出更大的贡献。

数字图像处理中的边缘检测算法研究

数字图像处理中的边缘检测算法研究

数字图像处理中的边缘检测算法研究一、引言边缘检测在数字图像处理中是一个非常重要的问题,其主要任务是检测图像中物体的边缘信息,为后续的图像分割、目标跟踪、模式识别等处理提供基础。

目前,数字图像处理领域中常用的边缘检测算法主要包括基于梯度的算法、基于模板的算法和基于机器学习的算法,这些算法各有特点,适用于不同的应用场景。

本文将介绍几种经典的边缘检测算法及其特点,以期对数字图像处理领域的研究有所帮助。

二、基于梯度的边缘检测算法基于梯度的边缘检测算法是最为常见的一种边缘检测算法,其主要思路是通过对图像做梯度运算,来检测图像中的边缘信息。

经典的基于梯度的边缘检测算法包括Sobel算法、Prewitt算法、Roberts算法、Canny算法等。

下面我们将依次介绍这几种算法的特点及其优缺点。

1. Sobel算法Sobel算法是一种常见的基于梯度的边缘检测算法,其主要思想是对图像进行一阶梯度运算。

Sobel算子可以分为水平滤波器和垂直滤波器两个部分,分别用于检测图像中水平和垂直方向的边缘信息。

Sobel算法不仅能够提取较为精确的边缘信息,而且计算速度也较快,在实际应用中得到了广泛的应用。

2. Prewitt算法Prewitt算法也是一种基于梯度的边缘检测算法,其内核包括水平和垂直方向的两个模板。

与Sobel算法相比,Prewitt算法更加注重增强图像的垂直边缘信息,因此在一些需要检测线状目标的应用场景中,效果更加明显。

3. Roberts算法Roberts算法是一种基于梯度的边缘检测算法,它通过对图像做两阶梯度运算,来检测图像中的边缘信息。

Roberts算法在边缘检测的过程中可以检测到细节较为丰富的边缘,但是它所检测到的边缘信息相对于其他算法而言较为稀疏。

4. Canny算法Canny算法是一种经典的基于梯度的边缘检测算法,其主要思路是先将图像做高斯滤波,之后再计算图像的梯度值,通过非极大值抑制和双阈值分割等处理,最终得到准确的边缘信息。

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

数字图像处理实验报告实验名称:边缘检测姓名:班级:学号:09045433专业:电子信息工程(2+2)指导教师:陈华华实验日期:2012年5月17日边缘检测一,原理本实验主要是对图像的边缘进行提取,通过对边缘的分析来分析图像的特征。

首先,了解一些术语的定义:边缘点:图像中具有坐标[i,j]且处在强度显著变化的位置上的点。

边缘段:对应于边缘点坐标[i,j]及其方位 ,边缘的方位可能是梯度角。

边缘检测器:从图像中提取边缘(边缘点和边缘段)集合的算法。

轮廓:边缘列表,或者是一条表示边缘列表的拟合曲线。

边缘连接:从无序边缘表形成有序边缘表的过程,习惯上,边缘表的表示采用顺时针方向来排序。

边缘跟踪:一个用来确定轮廓的图像(指滤波后的图像)搜索过程。

边缘就是图像中包含的对象的边界所对应的位置。

物体的边缘以图像局部特性的不连续性的形式出现的,例如,灰度值的突变,颜色的突变,纹理结构的突变等。

从本质上说,边缘就意味着一个区域的终结和另外一个区域的开始。

图像边缘信息在图像分析和人的视觉中十分重要,是图像识别中提取图像特征的一个重要属性。

边缘检测(edge detection)在图像处理和对象识别领域中都是一个重要的基本问题。

由于边缘的灰度不连续性,可以使用求导数的方法检测到。

最早的边缘检测方法都是基于像素的数值导数的运算。

本实验主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace算子和Canny算子运算,比较处理结果。

边缘检测有三个共性准则,1,好的检测结果,或者说对边缘的误测率尽可能低,就是在图像边缘出现的地方检测结果中不应该没有;另一方面不要出现虚假的边缘。

2,对边缘的定位要准确,也就是我们标记出的边缘位置要和图像上真正边缘的中心位置充分接近。

3,对同一边缘要有尽可能低的响应次数,也就是检测响应最好是单像素的。

二,对图像进行各种算子运算本实验中主要是对图像依次进行Sobel算子,Prewitt算子,Roberts算子,Laplace 算子和Canny算子运算。

Matlab代码:clear all;close all;warning off all;I=imread('cameraman.tif');%%没有噪声时的检测结果BW_sobel=edge(I,'sobel');BW_prewitt=edge(I,'prewitt');BW_roberts=edge(I,'roberts');BW_laplace=edge(I,'log');BW_canny=edge(I,'canny');figure(1);subplot(2,3,1),imshow(I),xlabel('原始图像');subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测');subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测');subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测');subplot(2,3,5),imshow(BW_laplace),xlabel('laplace检测');subplot(2,3,6),imshow(BW_canny),xlabel('canny检测');%%加入高斯噪声(μ=0,σ^2=0.01)检测结果I_g1=imnoise(I,'gaussian',0,0.01);BW_sobel=edge(I_g1,'sobel');BW_prewitt=edge(I_g1,'prewitt');BW_roberts=edge(I_g1,'roberts');BW_laplace=edge(I_g1,'log');BW_canny=edge(I_g1,'canny');figure(2);subplot(2,3,1),imshow(I_g1),xlabel('加入高斯噪声(μ=0,σ^2=0.01)图像'); subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测');subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测');subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测');subplot(2,3,5),imshow(BW_laplace),xlabel('laplace检测');subplot(2,3,6),imshow(BW_canny),xlabel('canny检测');%%加入高斯噪声(μ=0,σ^2=0.02)检测结果I_g2=imnoise(I,'gaussian',0,0.02);BW_sobel=edge(I_g2,'sobel');BW_prewitt=edge(I_g2,'prewitt');BW_roberts=edge(I_g2,'roberts');BW_laplace=edge(I_g2,'log');BW_canny=edge(I_g2,'canny');figure(3);subplot(2,3,1),imshow(I_g2),xlabel('加入高斯噪声(μ=0,σ^2=0.02)图像'); subplot(2,3,2),imshow(BW_sobel),xlabel('sobel检测');subplot(2,3,3),imshow(BW_prewitt),xlabel('prewitt检测');subplot(2,3,4),imshow(BW_roberts),xlabel('roberts检测');subplot(2,3,5),imshow(BW_laplace),xlabel('laplace检测');subplot(2,3,6),imshow(BW_canny),xlabel('canny检测');实验结果:原始图像sobel检测prewitt检测roberts检测laplace检测canny检测加入高斯噪声(μ=0,σ2=0.01)图像sobel检测prewitt检测roberts检测laplace检测canny检测加入高斯噪声(μ=0,σ2=0.02)图像sobel检测prewitt检测roberts检测laplace检测canny检测实验分析:通过对上述几种算子的研究,我们可以发现,Prewit t算子和Sobel算子都是对图像进行差分和滤波运算,仅在平滑部分的权值选择上有些差异,但是图像产生了一定的模糊,而且有些边缘还检测不出来,所以检测精度比较低,该类算子比较适用于图像边缘灰度值比较明显的情况。

Robert s算子检测精度比较高,但容易丢失一部分边缘,使检测的结果不完整,同时图像没经过平滑处理,不能抑制噪声,所以该算子对具有陡峭的低噪声图像响应最好。

Laplace算子通过高斯函数对图像进行了平滑处理,对噪声的抑制作用比较明显,但处理的同时也可能将原有的边缘平滑,造成某些边缘无法检测到。

此外,噪声对其影响也较大,检测到的图细节很丰富,同时就可能出现伪边缘。

但是,如果要降低伪边缘的话,又可能使检测精度下降,丢失很多真边缘。

因此,对于不同图像应选择不同参数。

Canny算子也采用高斯函数对图像进行平滑处理,也具有较强的去噪能力,但同样可能会丢失一些边缘信息,但是,从图中可以看出,Canny算子比Laplace算子的检测边缘的精度要高些。

通过实验结果可以看出,该算子在上述几种边缘检测算子当中效果最好。

通过上述实验结果我们可以发现,在加入高斯噪声以后,canny算子的去噪能力减弱,对边缘检测的效果不太明显。

相反,从图中可以发现sobel算子和prewitt算子对噪声的过滤作用较为明显。

基本上能够检测出较为完整的边缘信号。

自编代码:clc;close all%图读取显示c=imread('cameraman.tif');subplot(1,3,1);imshow(c)[M,N]=size(c);%得到一个M+2*N+2的矩阵,为模板卷积做准备cc=zeros(M+2,N+2);%初始化矩阵for i=1:Mfor j=1:Ncc(i+1,j+1)=c(i,j);endendcc(1,1)=c(1,1);%四个角的赋值cc(1,M+2)=c(1,M);cc(M+2,1)=c(M,1);cc(M+2,N+2)=c(M,N);for i=1:M%四边的赋值cc(i+1,1)=c(i,1);endfor i=1:Ncc(1,i+1)=c(1,i);endfor i=1:Ncc(M+2,i+1)=c(M,i);endfor i=1:Mcc(i+1,N+2)=c(i,N);endc1=zeros(M,N);%初始化一个新矩阵,用来存放水平模板卷积后的值c2=zeros(M,N);%初始化一个新矩阵,用来存放垂直模板卷积后的值c3=zeros(M,N);%初始化一个新矩阵,用来存放以2为范数(欧式距离)计算的值c4=zeros(M,N);%初始化一个新矩阵,用来存放以1为范数(城区距离)计算的值%差分模板d1=[-1,0,1;-1,0,1;-1,0,1];%水平模板d2=[1,1,1;0,0,0;-1,-1,-1];%垂直模板%水平方向for m=2:M+1for n=2:N+1c1(m-1,n-1)=(d1(1,1)*cc(m-1,n-1)+d1(1,2)*cc(m-1,n)+d1(1,3)*cc(m-1,n+1)...+d1(2,1)*cc(m,n-1)+d1(2,2)*cc(m,n)+d1(2,3)*cc(m,n+1)+...d1(3,1)*cc(m+1,n-1)+d1(3,2)*cc(m+1,n)+d1(3,3)*cc(m+1,n+1))/9;endend%垂直方向for m=2:M+1for n=2:N+1 c2(m-1,n-1)=(d2(1,1)*cc(m-1,n-1)+d2(1,2)*cc(m-1,n)+d2(1,3)*cc(m-1,n+1)+...d2(2,1)*cc(m,n-1)+d2(2,2)*cc(m,n)+d2(2,3)*cc(m,n+1)+d2(3,1)*cc(m+1,n-1)+d2(3,2)*cc(m+1,n) +d2(3,3)*cc(m+1,n+1))/9;endend%以2为范数(欧式距离)计算的值for i=1:Mfor j=1:Nc3(i,j)=abs(c1(i,j))+abs(c2(i,j));endend%结果显示subplot(1,3,2);imshow(uint8(c3));%由于之前已经转化为双精度,所以要用uint8显示。

相关文档
最新文档