您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 图像边缘检测各种算子MATLAB实现以及实际应用
《图像处理中的数学方法》实验报告学生姓名:赵芳舟教师姓名:曾理学院:数学与统计学院专业:信息与计算科学学号:20141914联系方式:13983681645梯度和拉普拉斯算子在图像边缘检测中的应用一、数学方法边缘检测最通用的方法是检测灰度值的不连续性,这种不连续性用一阶和二阶导数来检测。1.(1)一阶导数:一阶导数即为梯度,对于平面上的图像来说,我们只需用到二维函数的梯度,即:∇f=[𝑔𝑥𝑔𝑦]=[𝜕𝑓𝜕𝑥𝜕𝑓𝜕𝑦],该向量的幅值:∇f=mag(∇𝑓)=[𝑔𝑥2+𝑔𝑦2]1/2=[(𝜕𝑓/𝜕𝑥)2+(𝜕𝑓/𝜕𝑦)2]1/2,为简化计算,省略上式平方根,得到近似值∇f≈𝑔𝑥2+𝑔𝑦2;或通过取绝对值来近似,得到:∇f≈|𝑔𝑥|+|𝑔𝑦|。(2)二阶导数:二阶导数通常用拉普拉斯算子来计算,由二阶微分构成:∇2𝑓(𝑥,𝑦)=𝜕2𝑓(𝑥,𝑦)𝜕𝑥2+𝜕2𝑓(𝑥,𝑦)𝜕𝑦22.边缘检测的基本思想:(1)寻找灰度的一阶导数的幅度大于某个指定阈值的位置;(2)寻找灰度的二阶导数有零交叉的位置。3.几种方法简介(1)Sobel边缘检测器:以差分来代替一阶导数。Sobel边缘检测器使用一个3×3邻域的行和列之间的离散差来计算梯度,其中,每行或每列的中心像素用2来加权,以提供平滑效果。∇f=[𝑔𝑥2+𝑔𝑦2]1/2={[(𝑧7+2𝑧8+𝑧9)−(𝑧1+2𝑧2+𝑧3)]2+[(𝑧3+2𝑧6+𝑧9)−(𝑧1+2𝑧4+𝑧7)]2}1/2-1-21000121-101-202-101(2)Prewitt边缘检测器:使用下图所示模板来数字化地近似一阶导数。与Sobel检测器相比,计算上简单一些,但产生的结果中噪声可能会稍微大一些。𝑔𝑥=(𝑧7+𝑧8+𝑧9)−(𝑧1+𝑧2+𝑧3)𝑔𝑦=(𝑧3+𝑧6+𝑧9)−(𝑧1−𝑧4−𝑧7)-1-1-1000111-101-101-101(3)Roberts边缘检测器:使用下图所示模板来数字化地将一阶导数近似为相邻像素之间的差,它与前述检测器相比功能有限(非对称,且不能检测多种45°倍数的边缘)。𝑔𝑥=𝑧9−𝑧5𝑔𝑦=𝑧8−𝑧6-10010-110(4)Laplace边缘检测器:二维函数f(x,y)的拉普拉斯是一个二阶的微分定义:∇2𝑓(𝑥,𝑦)=𝜕2𝑓(𝑥,𝑦)𝜕𝑥2+𝜕2𝑓(𝑥,𝑦)𝜕𝑦2模板算子可分为四邻域和八邻域,如下:0101-41010(四邻域)1111-81111(八邻域)(5)LoG边缘检测器由于噪声点(灰度与周围点相差很大的像素点)对边缘检测有一定的影响,所以效果更好的是LoG算子,即Laplacian-Guass算子。引入高斯函数来平滑噪声:该函数的Laplace算子:它把Guass平滑滤波器和Laplace锐化滤波器结合起来,先平滑掉噪声,再进行边缘检测,所以效果比单用Laplace算子要更为平滑,效果更好。(6)Canny边缘检测器主要分为以下几个步骤:①使用具有指定标准差的一个高斯滤波器来平滑图像,以减少噪声;②在每个点处计算局部梯度和边缘方向;③对步骤②中确定的边缘点产生梯度中的脊线顶部进行追踪,并将实际山不在脊线顶部的像素设置为零,从而在输出中给出一条细线(非最大值抑制),然后使用滞后阈值处理法对这些脊线像素进行阈值处理。最后进行边缘连接。G(𝑥,𝑦)=𝑒−𝑥2+𝑦22𝜎2∇2𝐺(𝑥,𝑦)=𝜕2𝐺(𝑥,𝑦)𝜕𝑥2+𝜕2𝐺(𝑥,𝑦)𝜕𝑦2=𝑥2+𝑦2−2𝜎2𝜎4𝑒−𝑥2+𝑦22𝜎2二、实验结果原始图像:1.Roberts算子2.Prewitt算子3.Sobel算子4.Laplace算子(4邻域)(8邻域)5.LoG四种结果的比较:(Laplace采用8邻域模板)图像来源:(网行天下首页设计图库文化艺术插画集:《牧羊犬灰度》)图像规格:800×677格式:SVG模式:RGB硬件条件:软件条件:运行环境:Matlabr2015b三、讨论1.各方法优缺点及比较:(1)Roberts算子:Roberts算子是2×2算子,对具有陡峭的低噪声图像响应最好,并且检测垂直边缘的效果好于斜向边缘,定位精度高。然而,它对噪声敏感,无法抑制噪声的影响。因此,它适用于边缘明显且噪声较少的图像分割。(2)Prewitt算子:Prewitt算子将两个点的各自一定领域内的灰度值求和,并根据两个灰度值和的差来计算x,y的偏导数。它是平均滤波,对噪声有抑制作用,对于灰度渐变的低噪声图像有较好的检测效果,但是像素平均相当于对图像的低通滤波,所以它对边缘的定位不如Roberts算子。对于混合多复杂噪声的图像,效果不太理想。(3)Sobel算子:Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,即Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。(4)Laplace算子:Laplace算子是一种各向同性算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。(5)LoG算子:由于二阶导数是线性运算,利用LoG卷积一幅图像与首先使用高斯型平滑函数卷积改图像,然后计算所得结果的拉普拉斯是一样的。所以在LoG公式中使用高斯函数的目的就是对图像进行平滑处理,使用Laplacian算子的目的是提供一幅用零交叉确定边缘位置的图像;图像的平滑处理减少了噪声的影响并且它的主要作用还是抵消由Laplacian算子的二阶导数引起的逐渐增加的噪声影响。(6)Canny算子:是一个具有滤波,增强和检测的多阶段的优化算子,在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以消除噪声,Canny分割算法采用一阶偏导的有限差分来计算梯度的幅值和方向。在处理过程中,Canny算法还将经过一个非极大值抑制的过程。最后Canny算法将采用两个阈值来连接边缘。高定位精度、低误判率、抑制虚假边缘,适用于高噪声图像。四、实际应用1、概述:图像边缘检测广泛应用于车牌识别,人脸识别,地震带检测,生物医疗以及产品外观检测等方面。为了体现其实际应用,在此针对车牌识别来进行实验,实验流程如下:3、实验结果原图像:确定区域文字分割模板配对均值滤波边缘检测二值化灰度处理灰度处理:将彩色图像转化为灰度图像,缩小图片占用的空间,减少处理时间边缘检测:车牌区域的边缘信息一般比其他部分丰富且集中,只要背景不太复杂,没有过多干扰,边缘特征可将车牌区域与其他部分区别开来,从而消除图像中的无关信息。腐蚀和膨胀:腐蚀可以分割独立的图像元素,膨胀用于连接相邻的元素,更加利于图像的分割最后将车牌号分割成七个单个字符,建立模板库,与其进行配对,最终得出结果。五、程序介绍(1)Roberts边缘检测clear;sourcePic=imread('C:\Users\34899\Desktop\timg.jpg');%读取原图像grayPic=mat2gray(sourcePic);%实现图像矩阵的归一化操作[m,n]=size(grayPic);newGrayPic=grayPic;%为保留图像的边缘一个像素robertsNum=0;%经roberts算子计算得到的每个像素的值robertThreshold=0.2;%设定阈值forj=1:m-1%进行边界提取fork=1:n-1robertsNum=abs(grayPic(j,k)-grayPic(j+1,k+1))+abs(grayPic(j+1,k)-grayPic(j,k+1));if(robertsNumrobertThreshold)newGrayPic(j,k)=255;elsenewGrayPic(j,k)=0;endendendsubplot(1,2,1);imshow(sourcePic);title('原图');subplot(1,2,2);imshow(newGrayPic);title('Robert算子处理后图像');(2)Prewitt边缘检测clear;sourcePic=imread('C:\Users\34899\Desktop\timg.jpg');%读取原图像grayPic=mat2gray(sourcePic);%实现图像矩阵的归一化操作[m,n]=size(grayPic);newGrayPic=grayPic;%为保留图像的边缘一个像素PrewittNum=0;%经Prewitt算子计算得到的每个像素的值PrewittThreshold=0.5;%设定阈值forj=2:m-1%进行边界提取fork=2:n-1PrewittNum=abs(grayPic(j-1,k+1)-grayPic(j+1,k+1)+grayPic(j-1,k)-grayPic(j+1,k)+grayPic(j-1,k-1)-grayPic(j+1,k-1))+abs(grayPic(j-1,k+1)+grayPic(j,k+1)+grayPic(j+1,k+1)-grayPic(j-1,k-1)-grayPic(j,k-1)-grayPic(j+1,k-1));if(PrewittNumPrewittThreshold)newGrayPic(j,k)=255;elsenewGrayPic(j,k)=0;endendendsubplot(1,2,1);imshow(sourcePic);title('原图');subplot(1,2,2);imshow(newGrayPic);title('Prewitt算子处理后图像');(3)Sobel边缘检测clearall;closeall;imag=imread('C:\Users\34899\Desktop\timg.jpg');%读取关键帧imag=rgb2gray(imag);%转化为灰度图subplot(1,2,1);imshow(imag);title('原图');[high,width]=size(imag);%获得图像的高度和宽度F2=double(imag);U=double(imag);uSobel=imag;fori=2:high-1%sobel边缘检测forj=2:width-1Gx=(U(i+1,j-1)+2*U(i+1,j)+F2(i+1,j+1))-(U(i-1,j-1)+2*U(i-1,j)+F2(i-1,j+1));Gy=(U(i-1,j+1)+2*U(i,j+1)+F2(i+1,j+1))-(U(i-1,j-1)+2*U(i,j-1)+F2(i+1,j-1));uSobel(i,j)=sqrt(Gx^2+Gy^2);endendsubplot(1,2,2);imshow(im2uint8(uSobel)):title('Sobel边缘检测后');(4)Laplace边缘检测主函数:f=imread('C:\Users\34899\Desktop\timg.jpg')fGray=rgb2gray(f);figure()imshow(fGray),title('灰度图像');fGray=double(fGray);T=60;LapModType=8;%设置laplace模板方式fLapEdge=LaplaceEdge(fGray,LapModType,T);fGrayLapEdge=uint8(fLapEdge);figure()imshow(fLapEdge),title('lapl
本文标题:图像边缘检测各种算子MATLAB实现以及实际应用
链接地址:https://www.777doc.com/doc-5676811 .html