您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 基于sobelcanny的边缘检测实现
基于sobel、canny的边缘检测实现一.实验原理Sobel的原理:索贝尔算子(Sobeloperator)是图像处理中的算子之一,主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量.该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:101202*101xGA121000*121yGA图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。22xyGGG然后可用以下公式计算梯度方向。arctan()yxGG在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。在边沿检测中,常用的一种模板是Sobel算子。Sobel算子有两个,一个是检测水平边沿的;另一个是检测垂直平边沿的。与和相比,Sobel算子对于象素的位置的影响做了加权,因此效果更好。Sobel算子另一种形式是各向同性Sobel(IsotropicSobel)算子,也有两个,一个是检测水平边沿的,另一个是检测垂直平边沿的。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel算子的处理方法。由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。Canny的原理:(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。Canny边缘检测算法step1:用高斯滤波器平滑图象;step2:用一阶偏导的有限差分来计算梯度的幅值和方向;step3:对梯度幅值进行非极大值抑制step4:用双阈值算法检测和连接边缘二.实验过程利用上述原理实现车牌号的检测及识别实验程序:%这是一个图像对象提取方案。车辆号牌的书面分割和提取clc;clearall;im=imread('bmw.bmp');im1=rgb2gray(im);im1=medfilt2(im1,[33]);%中值滤波消除图像噪声%BW=edge(im1,'sobel');%寻找边缘[imx,imy]=size(BW);msk=[00000;01110;01110;01110;00000;];B=conv2(double(BW),double(msk));%平滑图像,减少连接的元件数量L=bwlabel(B,8);%计算连通mx=max(max(L))[r,c]=find(L==17);rc=[rc];[sxsy]=size(rc);n1=zeros(imx,imy);fori=1:sxx1=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检测的函数部分:functionR=edgecolor(nm);img=imread(nm);[xyz]=size(img);ifz==1rslt=edge(img,'canny');elseifz==3img1=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));endR=rslt;根据上图明显可以得出canny检测比sobel检测的效果更好。三、实验总结1、sobel算子根据像素点上下、左右邻点灰度值加权值,在边缘处打到极大值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高的时候,是一种较为常用的边缘检测的方法。2、canny算子是边缘检测中最具有代表的一种局部极值边缘检测。无论从视觉效果还是客观评价来看,canny算子提取的边缘线性连接程度较好,对此类的边缘提取的比较完整,边缘线很细腻。
本文标题:基于sobelcanny的边缘检测实现
链接地址:https://www.777doc.com/doc-2572114 .html