canny sobel算子

canny sobel算子
canny sobel算子

基于sobel 、canny 的边缘检测实现

一.实验原理

Sobel 的原理:

索贝尔算子(Sobel operator )是图像处理中的算子之一,主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量.

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A 代表原始图像,Gx 及Gy 分别代表经横向及纵向边缘检测的图像,其公式如下:

101202*101x G A -+?? ?=-+ ? ?-+?? 121000*121y G A +++?? ?= ? ?---??

图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。

在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。

在边沿检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边沿的 ;另一个是检测垂直平边沿的 。与 和 相比,Sobel 算子对于象素的位置的影响做了加权,因此效果更好。

Sobel 算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的 。各向同性Sobel 算子和普通Sobel 算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel 算子的处理方法。

由于Sobel 算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel 算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel 算子没有基于图像灰度进行处理,由于Sobel 算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。 在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。

Canny 的原理:

(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘

的位置。

(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测

算子。

(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。

Canny边缘检测算法

step1:用高斯滤波器平滑图象;

step2:用一阶偏导的有限差分来计算梯度的幅值和方向;

step3:对梯度幅值进行非极大值抑制

step4:用双阈值算法检测和连接边缘

二.实验过程

利用上述原理实现车牌号的检测及识别

实验程序:

%这是一个图像对象提取方案。车辆号牌的书面分割和提取

clc;

clear all;

im=imread('bmw.bmp');

im1=rgb2gray(im);

im1=medfilt2(im1,[3 3]); %中值滤波消除图像噪声%

BW = edge(im1,'sobel'); %寻找边缘

[imx,imy]=size(BW);

msk=[0 0 0 0 0;

0 1 1 1 0;

0 1 1 1 0;

0 1 1 1 0;

0 0 0 0 0;];

B=conv2(double(BW),double(msk)); %平滑图像,减少连接的元件数量

L = bwlabel(B,8); %计算连通

mx=max(max(L))

[r,c] = find(L==17);

rc = [r c];

[sx sy]=size(rc);

n1=zeros(imx,imy);

for i=1:sx

x1=rc(i,1);

y1=rc(i,2);

n1(x1,y1)=255;

end %存储在数组中提取图像

DD=edgecolor('bmw.bmp');%此处实现cany检测,通过调用函数的方式实现,函数代码在下面附有

figure,imshow(im);

title('原始的彩色图像')

figure,imshow(im1);

title('转换后的二值图像')

figure,imshow(B);

title('sobel边缘检测后的图像')

figure,imshow(B);

title('canny边缘检测后的图像')

CANY检测的函数部分:

function R=edgecolor(nm);

img=imread(nm);

[x y z]=size(img);

if z==1

rslt=edge(img,'canny');

elseif z==3

img1=rgb2ycbcr(img);

dx1=edge(img1(:,:,1),'canny');

dx1=(dx1*255);

img2(:,:,1)=dx1;

img2(:,:,2)=img1(:,:,2);

img2(:,:,3)=img1(:,:,3);

rslt=ycbcr2rgb(uint8(img2));

end

R=rslt;

根据上图明显可以得出canny 检测比sobel检测的效果更好。

三、实验总结

1、sobel算子根据像素点上下、左右邻点灰度值加权值,在边缘处打到极大值这一

现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高的时候,是一种较为常用的边缘检测的方法。

2、canny算子是边缘检测中最具有代表的一种局部极值边缘检测。无论从视觉效果

还是客观评价来看,canny算子提取的边缘线性连接程度较好,对此类的边缘提取的比较完整,边缘线很细腻。

几种常用边缘检测算法的比较

几种常用边缘检测算法的比较摘要:边缘是图像最基本的特征,边缘检测是图像分析与识别的重要环节。基于微分算子的边缘检测是目前较为常用的边缘检测方法。通过对Roberts,Sobel,Prewitt,Canny 和Log 及一种改进Sobel等几个微分算子的算法分析以及MATLAB 仿真实验对比,结果表明,Roberts,Sobel 和Prewitt 算子的算法简单,但检测精度不高,Canny 和Log 算子的算法复杂,但检测精度较高,基于Sobel的改进方法具有较好的可调性,可针对不同的图像得到较好的效果,但是边缘较粗糙。在应用中应根据实际情况选择不同的算子。 0 引言 边缘检测是图像分析与识别的第一步,边缘检测在计算机视觉、图像分析等应用中起着重要作用,图像的其他特征都是由边缘和区域这些基本特征推导出来的,边缘检测的效果会直接影响图像的分割和识别性能。边缘检测法的种类很多,如微分算子法、样板匹配法、小波检测法、神经网络法等等,每一类检测法又有不同的具体方法。目前,微分算子法中有Roberts,Sobel,Prewitt,Canny,Laplacian,Log 以及二阶方向导数等算子检测法,本文仅将讨论微分算子法中的几个常用算子法及一个改进Sobel算法。 1 边缘检测

在图像中,边缘是图像局部强度变化最明显的地方,它主要存在于目标与目标、目标与背景、区域与区域( 包括不同色彩) 之间。边缘表明一个特征区域的终结和另一特征区域的开始。边缘所分开区域的内部特征或属性是一致的,而不同的区域内部特征或属性是不同的。边缘检测正是利用物体和背景在某种图像特征上的差异来实现检测,这些差异包括灰度、颜色或纹理特征,边缘检测实际上就是检测图像特征发生变化的位置。边缘的类型很多,常见的有以下三种: 第一种是阶梯形边缘,其灰度从低跳跃到高; 第二种是屋顶形边缘,其灰度从低逐渐到高然后慢慢减小; 第三种是线性边缘,其灰度呈脉冲跳跃变化。如图1 所示。 (a) 阶梯形边缘(b) 屋顶形边缘 (b) 线性边缘 图像中的边缘是由许多边缘元组成,边缘元可以看作是一个短的直线段,每一个边缘元都由一个位置和一个角度确定。边缘元对应着图像上灰度曲面N 阶导数的不连续性。如果灰度曲面在一个点的N 阶导数是一个Delta 函数,那么就

Canny算子提取边缘Matlab源代码

Canny算子提取边缘Matlab源代码介绍function e=canny_edge(I,sigma) %functione=edge(I,'canny',thresh,sigma); %该函数实现Canny算子提取边缘点 %输入图像为I,标准差sigma,输出为边缘图像e [m,n]=size(I); Rr=2:m-1;cc=2:n-1; e=repmat(logical(uint8(0)),m,n); %产生同样大小的边缘图像e,初始化为1 ,即初始化边缘GaussianDieOff=-0.001;%设定高斯函数消失门限PercentOfPixelsNotEdges=-7;%用于计算边缘门限 ThresholdRatio=-4;%设置两个门限的比例 %首先设计高斯滤波器和它的微分 pw=1:30; %设定滤波器宽度 ssq=sigma*sigma; %计算方差 width=max(find(exp(-(pw.*pw)/(2*sigma*sigma))>GaussianDieOff)); %计算滤波算子宽度 t=(-width:width); len=2*width+1; t3=[t-.5;t;t+.5]; %对每个像素左右各半个像素位置的值进行平均 gau=sum(exp(-(t3.*t3)/(2*ssq))).'/(6*pi*ssq); %一维高斯滤波器 dgau=(-t.*exp(-(t.*t)/(2*ssq))/ssq).'; %高斯滤波器的微分 ra=size(I,1); ca=size(I,2); ay=255*double(I);ax=255*double(I'); h=conv(gau,dgau);

canny sobel算子

基于sobel 、canny 的边缘检测实现 一.实验原理 Sobel 的原理: 索贝尔算子(Sobel operator )是图像处理中的算子之一,主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量. 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A 代表原始图像,Gx 及Gy 分别代表经横向及纵向边缘检测的图像,其公式如下: 101202*101x G A -+?? ?=-+ ? ?-+?? 121000*121y G A +++?? ?= ? ?---?? 图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。 在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。 在边沿检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边沿的 ;另一个是检测垂直平边沿的 。与 和 相比,Sobel 算子对于象素的位置的影响做了加权,因此效果更好。 Sobel 算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的 。各向同性Sobel 算子和普通Sobel 算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel 算子的处理方法。 由于Sobel 算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel 算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel 算子没有基于图像灰度进行处理,由于Sobel 算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。 在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。 Canny 的原理:

sobel算子

Sobel算子改进算法 通过以上对经典边缘检测算法的分析可知,Sobel算法的优点是计算简单,速度快。但是由于只采用了2个方向的模板,只能检测水平和垂直方向的边缘,因此这种算法对于纹理较为复杂的图像,其边缘检测效果就不是很理想。该算法认为:凡灰度新值大于或等于阈值的像素点时都是边缘点。这种判断欠合理,会造成边缘点的误判,因为许多噪声点的灰度值也很大。由于图像的边缘有许多方向,除了水平方向和垂直方向外,还有其他的方向,下面将对Sobel算子进行改进,即将算子模板扩展到8个模板,如图3.1所示。 图3.1 8个方向模板 进过8个方向模板的计算,对某一幅图像进行逐点计算,并且去最大值为像素点的新灰度值,通过阈值的设定,判断边缘点。最大值对应的模板所表示的方向为该像素点的边缘方向。 Sobel改进算法的思想与步骤。 针对经典Sobel算子对边缘具有很强的方向性特点,设计了一种基于Sobel算子上改进的算法,其主要思想是先对图像进行全局阈值的分割处理,因为分割后的图像是二值图像,此时进行边缘提取,这就可以各个方向的边缘都可以检测到。但也可能会丢失原本直接用算子检测到的边缘。Sobel 算子的优点是方法简单、处理速度快, 并且所得的边缘光滑, 其缺点是 边缘较粗, 得到的边缘象素往往是分小段连续, 由于处理时需作二值化处理, 故得到的边缘与阈值的选取有很大的关系, 并且边缘图中梯度幅值较小的边缘也丢失了。为克服 这个缺陷,对 S( i, j)引入一个衰减因子 D, 用它去除计算的结果, 即 : (,) S i j=(3.1)

因此,用处理后的所得到图像与Sobel 算子直接对原始图像进行边缘检测的图像相加,这一步显得尤为重要。最后分别对数字图像和红外图像进行MATLAB 仿真,从仿真的结果可以看出,此算法具有较好的精度。 三次样条插值 Sobel 算子检测出像素级边缘后,为了得到亚像素级的边缘,要对灰度边缘图进行内插处理。插值算法有很多种,例如最近邻插值、双线性插值、三次样条插值等等。最近邻插值和双线性插值不如三次样条插值精度高。为了得到精度高的亚像素级边缘,本文采用三次样条插值法对灰度边缘图进行插值处理。下面先介绍三次样条插值函数的定义。 若函数S(x)满足:S(x)在每个子区间[xi-1, xi](i =1,2, …n)上是不高于三次的多项式,其中(a=x 0

Sobel边缘检测算子

经典边缘检测算子比较 一 各种经典边缘检测算子原理简介 图像的边缘对人的视觉具有重要的意义,一般而言,当人们看一个有边缘的物体时,首先感觉到的便是边缘。灰度或结构等信息的突变处称为边缘。边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。需要指出的是,检测出的边缘并不等同于实际目标的真实边缘。由于图像数据时二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等因素的影响,使得有边缘的地方不一定能被检测出来,而检测出的边缘也不一定代表实际边缘。图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈。边缘上的这种变化可以用微分算子检测出来,通常用一阶或两阶导数来检测边缘,如下图所以。不同的是一阶导数认为最大值对应边缘位置,而二阶导数则以过零点对应边缘位置。 (a )图像灰度变化 (b )一阶导数 (c )二阶导数 基于一阶导数的边缘检测算子包括Roberts 算子、Sobel 算子、Prewitt 算子等,在算法实现过程中,通过22?(Roberts 算子)或者33?模板作为核与图像中的每个像素点做卷积和运算,然后选取合适的阈值以提取边缘。拉普拉斯边缘检测算子是基于二阶导数的边缘检测算子,该算子对噪声敏感。一种改进方式是先对图像进行平滑处理,然后再应用二阶导数的边缘检测算子,其代表是LOG 算子。前边介绍的边缘检测算子法是基于微分方法的,其依据是图像的边缘对应一阶导数的极大值点和二阶导数的过零点。Canny 算子是另外一类边缘检测算子,它不是通过微分算子检测边缘,而是在满足一定约束条件下推导出的边缘检测最优化算子。 1 Roberts (罗伯特)边缘检测算子 景物的边缘总是以图像中强度的突变形式出现的,所以景物边缘包含着大量的信息。由于景物的边缘具有十分复杂的形态,因此,最常用的边缘检测方法是所谓的“梯度检测法”。 设(,)f x y 是图像灰度分布函数; (,)s x y 是图像边缘的梯度值;(,)x y ?是梯度的方向。则有 [][]{} 1 2 22 (,)(,)(,)(,)(,)s x y f x n y f x y f x y n f x y = +-++- (1) (n=1,2,...) [][]{}1 (,)tan (,)(,)/(,)(,)x y f x y n f x y f x n y f x y ?-=+-+- (2)

sobel算子边缘检测

源程序如下:#include #include #include #include #include #include #include #include #define ff(x,y) pBmpBuf0[256*(y)+(x)] #define gg(x,y) pBmpBuf9[256*(y)+(x)] //--------------------------------------------------------------------------------------- unsigned char *pBmpBuf;//读入图像数据的指针 int bmpWidth;//图像的宽 int bmpHeight;//图像的高 RGBQUAD *pColorTable;//颜色表指针 int biBitCount;//图像类型,每像素位数 //------------------------------------------------------------------------------------------- //读图像的位图数据、宽、高、颜色表及每像素位数等数据进内存,存放在相应的全局变量中 bool readBmp(char *bmpName) { FILE *fp=fopen(bmpName,"rb");//二进制读方式打开指定的图像文件 if(fp==0) return 0; //跳过位图文件头结构BITMAPFILEHEADER fseek(fp, sizeof(BITMAPFILEHEADER),0); //定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中 BITMAPINFOHEADER head; fread(&head, sizeof(BITMAPINFOHEADER), 1,fp); //获取图像宽、高、每像素所占位数等信息 bmpWidth = head.biWidth; bmpHeight = head.biHeight; biBitCount = head.biBitCount;//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)

matlab canny算子边缘检测函数代码

分享到: 2012-04-24 20:42网友采纳 clc clear all close all I = imread('cameraman.tif'); % 读入图像 imshow(I);title('原图') BW1 = edge(I,'canny'); % 调用canny函数 figure,imshow(BW1); % 显示分割后的图像,即梯度图像 title('Canny') 用Lena标准检测图像,图像与代码下面注明了是哪张图像。 一、没有噪声时的检测结果 1 原始图像 2 Sobel算子边缘检测 3 Prewitt算子边缘检测 4 Roberts算子边缘检测 5 Laplace算子边缘检测 6 Canny算子边缘检测 二、加入高斯噪声(μ=0,σ^2=0.01)检测结果 1 原始图像 2 Sobel算子边缘检测 3 Prewitt算子边缘检测 4 Roberts算子边缘检测 5 Laplace算子边缘检测 6 Canny算子边缘检测 三、加入高斯噪声(μ=0,σ^2=0.02)检测结果 1 原始图像 2 Sobel算子边缘检测 3 Prewitt算子边缘检测 4 Roberts算子边缘检测 5 Laplace算子边缘检测 6 Canny算子边缘检测 clear all; close all; warning off all; I = imread('lena.bmp'); %%如果是其他类型图像,请先转换为灰度图 %%没有噪声时的检测结果 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检测');

经典边缘检测算子对比

经典边缘检测算子比较 张丽 南京信息工程大学信息与计算科学系,南京210044 摘要:图像边缘检测技术是图像分割、目标识别、区域形态提取等图像分析领域中十分重要的基础。本文简要介绍各种经典图像边缘检测算子的基本原理,用Matlab仿真实验结果表明各种算子的特点及对噪声的敏感度,为学习和寻找更好的边缘检测方法提供参考价值。 关键字:图像处理;边缘检测;算子;比较 引言 图像的边缘时图像最基本的特征之一。所谓边缘(或边沿)是指周围像素灰度有阶跃性变化或“屋顶”变化的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间,因此它是图像分割依赖的重要特征。图像边缘对图像识别和计算机分析十分有用,边缘能勾划出目标物体,使观察者一目了然;边缘蕴含了丰富的内在信息(如方向、阶跃性质、形状等)。从本质上说,图像边缘是图像局部特性不连续性(灰度突变、颜色突变、纹理结构突变等)的反应,它标志着一个区域的终结和另一个区域的开始。 边缘检测技术是所有基于边界分割的图像分析方法的第一步,首先检测出图像局部特性的不连续性,再将它们连成边界,这些边界把图像分成不同的区域,检测出边缘的图像就可以进行特征提取和形状分析。为了得到较好的边缘效果,现在已经有了很多的边缘检测算法以及一些边缘检测算子的改进算法。但各算子有自己的优缺点和适用领域。本文着重对一些经典边缘检测算子进行理论分析、实际验证并对各自性能特点做出比较和评价,以便实际应用中更好地发挥其长处,为新方法的研究提供衡量尺度和改进依据。 一各种经典边缘检测算子原理简介 图像的边缘对人的视觉具有重要的意义,一般而言,当人们看一个有边缘的物体时,首先感觉到的便是边缘。灰度或结构等信息的突变处称为边缘。边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。需要指出的是,检测出的边缘并不等同于实际目标的真实边缘。由于图像数据时二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等因素的影响,使得有边缘的地

canny算子原理

经典图像边缘检测(综合法思想)——Canny算子 John Canny于1986年提出Canny算子,它与Marr(LoG)边缘检测方法类似,也属于是先平滑后求导数的方法。 John Canny研究了最优边缘检测方法所需的特性,给出了评价边缘检测性能优劣的三个指标: l好的信噪比,即将非边缘点判定为边缘点的概率要低,将边缘点判为非边缘点的概率要低; l高的定位性能,即检测出的边缘点要尽可能在实际边缘的中心; l对单一边缘仅有唯一响应,即单个边缘产生多个响应的概率要低,并且虚假响应边缘应该得到最大抑制。 用一句话说,就是希望在提高对景物边缘的敏感性的同时,可以抑制噪声的方法才是好的边缘提取方法。 Canny算子求边缘点具体算法步骤如下: 1. 用高斯滤波器平滑图像. 2. 用一阶偏导有限差分计算梯度幅值和方向. 3. 对梯度幅值进行非极大值抑制. 4. 用双阈值算法检测和连接边缘. 步1. 图像与高斯平滑滤波器卷积:

步3. 对梯度幅值进行非极大值抑制(non_maxima suppression,NMS): 仅仅得到全局的梯度并不足以确定边缘,因此为确定边缘,必须保留局部梯度最大的点,而抑制非极大值。 解决方法:利用梯度的方向: 步4. 用双阈值算法检测和连接边缘: 对非极大值抑制图像作用两个阈值th1和th2,两者关系th1=0.4th2。我们把梯度值小于th1的像素的灰度值设为0,得到图像1。然后把梯度值小于th2的像素的灰度值设为0,得到图像2。由于图像2的阈值较高,去除大部分噪音,但同时也损失了有用的边缘信息。而图像1的阈值较低,保留了较多的信息,我们可以以图像2为基础,以图像1为补充来连结图像的边缘。

数字图像处理几种边缘检测算子的比较

数字图像处理 几种边缘检测算子的比较 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图 像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 这些包括:深度上的不连续、表面方向不连续、物质属性变化和场景照明变化。边缘 检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。图像边缘检测 大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结 构属性。有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于查找一 类和基于零穿越的一类。基于查找的方法通过寻找图像一阶导数中的最大和最小值 来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图 像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过 零点。 人类视觉系统认识目标的过程分为两步:首先,把图像边缘与背景分离出来;然后,才能知觉到图像的细节,辨认出图像的轮廓。计算机视觉正是模仿人类视觉的这个过程。因此在检测物体边缘时,先对其轮廓点进行粗略检测,然后通过链接规则把原来 检测到的轮廓点连接起来,同时也检测和连接遗漏的边界点及去除虚假的边界点。图 像的边缘是图像的重要特征,是计算机视觉、模式识别等的基础,因此边缘检测是图 象处理中一个重要的环节。然而,边缘检测又是图象处理中的一个难题,由于实际景 物图像的边缘往往是各种类型的边缘及它们模糊化后结果的组合,且实际图像信号存 在着噪声。噪声和边缘都属于高频信号,很难用频带做取舍。 这就需要边缘检测来进行解决的问题了。边缘检测的基本方法有很多,一阶的有Roberts Cross算子,Prewitt算子,Sobel算子,Canny算子, Krisch算子,罗盘算子;而二阶的还有Marr-Hildreth,在梯度方向的二阶导数过零点。现在就来 简单介绍一下各种算子的算法

边缘检测算子比较

边缘检测算子比较 不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。有可能有边缘的地方并非边界,也有可能边界的地方并无边缘,因为现实世界中的物体是三维的,而图像只具有二维信息,从三维到二维的投影成像不可避免的会丢失一部分信息;另外,成像过程中的光照和噪声也是不可避免的重要因素。正是因为这些原因,基于边缘的图像分割仍然是当前图像研究中的世界级难题,目前研究者正在试图在边缘提取中加入高层的语义信息。 课题所用图像边缘与边界应该算是等同的。 在实际的图像分割中,往往只用到一阶和二阶导数,虽然,原理上,可以用更高阶的导数,但是,因为噪声的影响,在纯粹二阶的导数操作中就会出现对噪声的敏感现象,三阶以上的导数信息往往失去了应用价值。二阶导数还可以说明灰度突变的类型。在有些情况下,如灰度变化均匀的图像,只利用一阶导数可能找不到边界,此时二阶导数就能提供很有用的信息。二阶导数对噪声也比较敏感,解决的方法是先对图像进行平滑滤波,消除部分噪声,再进行边缘检测。不过,利用二阶导数信息的算法是基于过零检测的,因此得到的边缘点数比较少,有利于后继的处理和识别工作。 各种算子的存在就是对这种导数分割原理进行的实例化计算,是为了在计算过程中直接使用的一种计算单位; Roberts算子:边缘定位准,但是对噪声敏感。适用于边缘明显且噪声较少的图像分割。Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子通常会在图像边缘附近的区域内产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。Prewitt算子:对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子。 Sobel算子:Sobel算子和Prewitt算子都是加权平均,但是Sobel算子认为,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越远,产生的影响越小。 Isotropic Sobel算子:加权平均算子,权值反比于邻点与中心点的距离,当沿不同方向检测边缘时梯度幅度一致,就是通常所说的各向同性。 在边沿检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边沿的;另一个是检测垂直平边沿的。Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边沿的,另一个是检测垂直平边沿的。各向同性Sobel 算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel算子的处理方法。 由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们可以给出阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。

哈夫变换和Canny边缘检测算法及其实现代码

哈夫变换和Canny边缘检测算法 摘要在图象边缘检测中往往要求所检测到的边缘具有封闭特性,本文详细地分析了目前常用的两种算法:哈夫变换和Canny边缘检测算法,最后,探讨边缘算子应满足的准则。关键词边缘检测;闭合性;哈夫变换;Canny算子 1引言 图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。图象的边缘部分集中了图象的大部分信息,图象边缘的确定与提取对于整个图象场景的识别与理解是非常重要的,同时也是图象分割所依赖的重要特征,边缘检测主要是图象的灰度变化的度量、检测和定位,自从1959提出边缘检测以来,经过五十多年的发展,已有许多中不同的边缘检测方法。在我们常用的几种用于边缘检测的算子中Laplace算子常常会产生双边界;而其他一些算子如Sobel算子又往往会形成不闭合区域。本文主要讨论了在边缘检测中,获取封闭边界区域的算法。 2 图象边缘检测的基本步骤 (1)滤波。边缘检测主要基于导数计算,但受噪声影响。但滤波器在降低噪声的同时也导致边缘强度的损失。 (2)增强。增强算法将邻域中灰度有显著变化的点突出显示。一般通过计算梯度幅值完成。 (3)检测。但在有些图象中梯度幅值较大的并不是边缘点。最简单的边缘检测是梯度幅值阈值判定。 (4)定位。精确确定边缘的位置。 图1 边缘检测酸法的基本步骤 3 边界闭合的算法 3.1 哈夫变换[3] 由于噪声的存在,用各种算子得到的边缘象素不连续,但是由于边缘象素之间有一定的连续性,我们就可以根据边缘象素在梯度幅度或梯度方向上的连续性把他们连接起来。具体说来,如果象素(s,t)在象素(x,y)的领域且它们的梯度幅度与梯度方向在给定的阈值下满足: T是幅度阈值;A是角度阈值; 那么,如对所有的边缘象素都进行上述的判断和连接就可以得到一个闭合的边界。哈夫变换方法是利用图像得全局特性而对目标轮廓进行直接检测的方法,在已知区域形状的条

canny算子简述

背景简述 Canny提出一种新的边缘检测方法[1][2],它对受白噪声影响的阶跃型边缘是最优的。Canny检测子的最优性与三个标准有关:第一、检测标准:不失去重要的边缘,不应有虚假的边缘;第二、定位标准:实际边缘与检测到的边缘位置之间的偏差最小;第三、单位应标准:将多个响应降低为单个边缘响应。这一点被第一个标准部分地覆盖了。因为当有两个响应对应于单个边缘时,其中之一应该被是虚假的。这第三个标准解决受噪声影响的边缘问题,起亦制非平滑边缘检测算子的作用。 基本理论 首先,Canny算子是针对1D信号和前两个最优标准表达的。用微积分方法可以得到完整的解。如果我们加上第三个标准,需要通达数值优化的办法得到最优解。其最优滤波器可有有效地为标准差的高斯平滑滤波器的一阶微分,其误差小于20%。然后,将边缘检测算子映射到2D情况。阶跃边缘由位置、方向和可能的幅度(强度)来确定。由于噪声引起的对单个边缘的虚假响应通常造成的所谓“纹状”问题。一般而言,该问题在边缘检测中是非常普遍。边缘检测算子的输出通常要做阈值化处理,以确定哪些边缘是突出的。纹状是指边缘轮廓断开的情形,是由算子输出超出或阈值的波动引起。我可以通过来Thresholding with hysteresis消除。在一般情况下,我选择具有最小尺度的算子,因为它定位最准确。

Canny提出了特征综合方法。首先标记出所有由最小尺度算子得到的突出边缘。而整个Canny边缘检测器算法分成如下四步: 1.噪声去除。因为这个检测器用到了微分算子,所以对于局部的不连续是敏感的,某区域的噪声点很容易造成边缘的模糊。在我做的这个应用里,因为要检测的是文本的边缘,而文本的背景是比较规则的变形后的正方形方格,所以如果用wiki里建议的高斯滤波器,会造成整个图像都变成一种颜色,即全黑或者全白。因此如果换一种观点,把这些变形后的方格也看成图的一部分,因为字体的纹理和方格的纹理不同,所以可以看作是两种区域组合成的图像。由此我改用一般的镜子,增强图像边缘。 2.计算图像的边缘梯度。这个是常规运算,用了Sobel算子,分别计算图像的x和y方向的梯度值,最后计算出图像各点的梯度值以及梯度角。计算得到梯度角需要进行近似,近似四个值{-45(或135), 0, 45,90}。 3.非最大梯度值点抑制第2步计算后得到两组值,第一组是各点的梯度值,第二组是各点梯度角的近似值。这一个非最大梯度值点抑制是比较不好理解的一步。遍历各点,做如下操作。(1)如果该点(x, y)的梯度角是0,如果其梯度值比北(x - 1, y)和南(x + 1, y)的梯度值大,则认为(x,y)点是一个边缘点,否则抑制其值,该其梯度值为设定的背景值(0或255);(2)如果该点(x, y)的梯度角是90,如果其梯度值比西(x, y - 1)和东(x, y +1)的梯度值大,则认为(x, y)点是一个边缘点,否则抑制其值,该其梯度值为设定的背景值(0或

基于Sobel算子的数字图像边缘检测

基于S o b e l算子的数字图像边缘检测 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

信号处理综合 设计报告 综合设计名称:基于Sobel算子的数字图像边缘检测学员:学号: 培养类型:技术类年级: 2013级专业:电子工程所属学院: 指导教员:职称:教授实验室: 305-507 实验日期:-2016.9.2

一、综合设计目的 (1)掌握数字信号处理的基本概念、基本理论和基本方法; (2)了解边缘检测的算法和用途,学习利用 Sobel 算子进行边缘检测的程序设计方法; (3)完成图像边缘处理系统的设计和实现,分析处理性能; (4)学会TMS320VC5509A DSP的程序设计方法。 二、综合设计要求 (1)在Matlab上独立编程实现通过Sobel算子的边缘检测; (2)读懂DSP-CCS平台例程,自选图像修改例程实现边缘检测,对比Matlab仿真和DSP-CCS平台处理的结果。 (3)完成实验思考题 三、详细设计过程 1.设计原理分析; Sobel边缘检测算子: 图像中的每个点都用这连个核做卷积,一个核对通常的垂直边缘相应最大,另一个对水平边缘相应最大。两个卷积的最大值作为该点的输出位(下文我们统称为梯度)。 Prewitt边缘检测算子: 以上两个卷积核形成了Prewitt算子。使用方法和Sobel算子一致,区别是系数不同。 2.设计方案和过程。 总体方案:

(1)选择图像灰度处理 这是程序运行的预处理,需要注意的Matlab仿真时,图像选取限制较小,在DSP-CCS平台处理时,注意图像选择要满足例程的空间要 求,一般选择80*80尺寸图像。 (2)卷积计算得出梯度 把图像与Sobel算子的两个模板分别进行卷积,取卷积后较大值为 该点的梯度。 上图显示了在只考虑水平边缘或垂直边缘的情况下的检测效果与实际效果的对比。 (3)二值处理计算阈值 把计算出的梯度归一化,然后带入Matlab中的graythresh函数,采用最大类间方差法获得阈值。 (4)高于阈值设为1,低于阈值设为0。把二值图像显示出来即为边缘检测的最终结果。 3.改进与创新 (1)八方向Sobel算子 在原有中两个模板的基础上,又增加六个方向的模板,即45°,135°,180°,225°,270°,315°。这样可以更加有效地检测图像多个方向边缘,使边缘信息更加完整。 (2)抗噪性能分析 通过在原图像中加入不同信噪比的高斯白噪声,观察边缘检测图像的变化,分析差别。

图像处理之四种边缘检测算子比较

数字图像处理 第三次作业 SpadesQ, Sun Yat-sen University 2017/4/27 1.边缘检测 边缘一般是指图像在某一局部强度剧烈变化的区域。强度变化一般有两种情况: ●阶跃变化 ●屋顶变化 边缘检测的任务: 找到具有阶跃变化或者屋顶变化的像素点的集合。 边缘检测基本原理: 既然边缘是灰度变化最剧烈的位置,最直观的想法就是求微分。 对于第一种情况:一阶微分的峰值为边缘点,二阶微分的零点为边缘点。 对于第二种情况:一阶微分的零点为边缘点,二阶微分的峰值为边缘点。

2.matlab内置函数

分析:通过对Roberts,Sobel,Prewitt,Log和Canny进行MATLAB 仿真实验对比,结果表明,Sobel,Prewitt和Roberts算子的算法简单,但检测精度不高,Log和Canny算子的算法复杂,但检测精度较高。在应用中应根据实 际情况选择不同的算子。

3.四种算子对比分析 3.1 Sobel算子 Sobel算子在边缘检测算子扩大了其模版,在边缘检测的同时尽量削弱了噪声。其模版大小为3×3,其将方向差分运算与局部加权平均相结合来提取边缘。在求取图像梯度之前,先进行加权平均,然后进行微分,加强了对噪声的一致。Sobel 算子所对应的卷积模版为: 图像中的每个像素点和以上水平和垂直两个卷积算子做卷积运算后,再计算得到梯度幅值G ( x,y),然后选取适当的阈值τ,若G ( x,y)>τ,则(i ,j)为边缘点,否则,判断(i,j)为非边缘点。由此得到一个二值图像{ g (i,j)},即边缘图像。Sobel 算子在空间上比较容易实现,不但产生较好的边缘检测效果,同时,由于其引入了局部平均,使其受噪声的影响也较小。若使用较大的邻域,抗噪性会更好,但也增加了计算量,并且得到的边缘比较粗。在对精度要求不是很高的场合下,

Canny边缘检测算法总结

一.Canny边缘检测算法原理 JohnCanny于1986年提出Canny算子,属于是先平滑后求导数的方法。其处理过程大体上分为下面四部分。 1. 对原始图像进行灰度化 Canny算法通常处理的图像为灰度图,因此如果获取的是彩色图像,那首先就得进行灰度化。对一幅彩色图进行灰度化,就是根据图像各个通道的采样值进行加权平均。以RGB格式的彩图为例,通常灰度化采用的方法主要有: 方法1:Gray=(R+G+B)/3; 方法2:Gray=0.299R+0.587G+0.114B;(这种参数考虑到了人眼的生理特点) 至于其他格式的彩色图像,可以根据相应的转换关系转为RGB然后再进行灰度化;在编程时要注意图像格式中RGB的顺序通常为BGR。 2. 对图像进行高斯滤波 图像高斯滤波的实现可以用两个一维高斯核分别两次加权实现,也可以通过一个二维高斯核一次卷积实现。 1)高斯核实现 上式为离散化的一维高斯函数,确定参数就可以得到一维核向量。 上式为离散化的二维高斯函数,确定参数就可以得到二维核向量。 在求得高斯核后,要对整个核进行归一化处理。 2)图像高斯滤波 对图像进行高斯滤波,其实就是根据待滤波的像素点及其邻域点的灰度值按照一定的参数规则进行加权平均。这样可以有效滤去理想图像中叠加的高频噪声。 通常滤波和边缘检测是矛盾的概念,抑制了噪声会使得图像边缘模糊,这会增加边缘定位的不确定性;而如果要提高边缘检测的灵敏度,同时对噪声也提高了灵敏度。实际工程经验表明,高斯函数确定的核可以在抗噪声干扰和边缘检测精确定位之间提供较好的折衷方案。 3. 用一阶偏导的有限差分来计算梯度的幅值和方向

拉普拉斯算子、prewitt算子、sobel算子对图像锐化处理.doc

《数字图像处理作业》 图像的锐化处理 ---拉普拉斯算子、prewitt算子、sobel算子性能研究对比 完成日期:2012年10月6日

一、算法介绍 1.1图像锐化的概念 在图像增强过程中,通常利用各类图像平滑算法消除噪声,图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息也主要集中在其高频部分。这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现。 为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意能够进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理。

考察正弦函数,它的微分 。微分后频率不变,幅度上升2πa倍。空间频率愈高,幅度增加就愈大。这表明微分是可以加强高频成分的,从而使图像轮廓变清晰。最常用的微分方法是梯度法和拉普拉斯算子。但本文主要探究几种边缘检测算子,Laplace、Prewitt、Sobel算子以下具体介绍。 图像边缘检测:边缘检测是检测图像局部显著变化的最基本运算,梯度是函数变化的一种度量。图像灰度值的显著变化可用梯度的离散逼近函数来检测,大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。边缘检测可分为两大类基于查找一类和基于零穿越的一类。基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过零点。 1.2拉普拉斯算子

关于MATLAB边缘检测sobel算子

关于MATLAB边缘检测sobel算子 一、sobel介绍 索贝尔算子是图像处理中的算子之一,主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以代表原始图像,及分别代表经横向及纵向边缘检测的图像,其公式如下: 图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。 然后可用以下公式计算梯度方向。 在以上例子中,如果以上的角度等于零,即代表图像该处拥有纵向边缘,左方较右方暗。 二、程序 例1 clear all; close all; f=imread('dsy.jpg'); u=rgb2gray(f); F=double(f); U=double(u); [H,W]=size(u); uSobel=u; % ms=0; % ns=0;

for i=2:H-1 for j=2:W-1 Gx=(U(i+1,j-1)+2*U(i+1,j)+F(i+1,j+1))-(U(i-1,j-1)+2*U(i-1,j)+F(i-1,j+1)); Gy=(U(i-1,j+1)+2*U(i,j+1)+F(i+1,j+1))-(U(i-1,j-1)+2*U(i,j-1)+F(i+1,j-1)); uSobel(i,j)=sqrt(Gx^2+Gy^2); % ms=ms+uSobel(i,j); % ns=ns+(uSobel(i,j)-ms)^2; end end % ms=ms/(H*W); % ns=ns/(H*W); subplot(1,2,1);imshow(f);title('原图'); subplot(1,2,2);imshow(im2uint8(uSobel));title('Sobel处理后'); % S=[ms ns]; 程序运行结果: 例2 hg=zeros(3,3); %设定高斯平滑滤波模板的大小为3*3 delta=0.5; for x=1:1:3 for y=1:1:3 u=x-2; v=y-2; hg(x,y)=exp(-(u^2+v^2)/(2*pi*delta^2)); end

Canny边缘检测算法总结

Canny边缘检测算法总结

一.Canny边缘检测算法原理 JohnCanny于1986年提出Canny算子,属于是先平滑后求导数的方法。其处理过程大体上分为下面四部分。 1. 对原始图像进行灰度化 Canny算法通常处理的图像为灰度图,因此如果获取的是彩色图像,那首先就得进行灰度化。对一幅彩色图进行灰度化,就是根据图像各个通道的采样值进行加权平均。以RGB格式的彩图为例,通常灰度化采用的方法主要有:方法1:Gray=(R+G+B)/3; 方法2:Gray=0.299R+0.587G+0.114B;(这种参数考虑到了人眼的生理特点) 至于其他格式的彩色图像,可以根据相应的转换关系转为RGB然后再进行灰度化;在编程时要注意图像格式中RGB的顺序通常为BGR。 2. 对图像进行高斯滤波

图像高斯滤波的实现可以用两个一维高斯核分别两次加权实现,也可以通过一个二维高斯核一次卷积实现。 1)高斯核实现 上式为离散化的一维高斯函数,确定参数就可以得到一维核向量。 上式为离散化的二维高斯函数,确定参数就可以得到二维核向量。 在求得高斯核后,要对整个核进行归一化处理。 2)图像高斯滤波 对图像进行高斯滤波,其实就是根据待滤波的像素点及其邻域点的灰度值按照一定的参

数规则进行加权平均。这样可以有效滤去理想图像中叠加的高频噪声。 通常滤波和边缘检测是矛盾的概念,抑制了噪声会使得图像边缘模糊,这会增加边缘定位的不确定性;而如果要提高边缘检测的灵敏度,同时对噪声也提高了灵敏度。实际工程经验表明,高斯函数确定的核可以在抗噪声干扰和边缘检测精确定位之间提供较好的折衷方案。 3. 用一阶偏导的有限差分来计算梯度的幅 值和方向 关于图像灰度值得梯度可使用一阶有限差分来进行近似,这样就可以得图像在x和y 方向上偏导数的两个矩阵。常用的梯度算子有如下几种: 1)Roberts算子

相关文档
最新文档