课程实验报告2017-2018学年一学期课程名称:计算机视觉及应用实验名称:滤波和边缘检测班级:学生姓名:学号:实验日期:2017.12.3地点:指导教师:成绩评定:批改日期:实验目的及要求边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。实验仪器设备实验设备为一台装有win10系统的PC,qt+opencv软件。实验原理大量的实验研究发现,由摄像机拍摄得到的图像受离散的脉冲、椒盐噪声和零均值的高斯噪声的影响较严重。噪声给图像处理带来很多困难,对图像分割、特征提取、图像识别等具有直接影响。椒盐噪声是指两种噪声,一种是盐噪声(saltnoise),另一种是胡椒噪声(peppernoise)。盐=白色,椒=黑色。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)},其中,f(x,y),g(x,y)分别为原始图像和处理后图像。在通过canny算子和sobel算子进行边缘检测。canny算子进行边缘检测的原理(1)图象边缘检测必须满足两个条件:一能有效地抑制噪声;二必须尽量精确确定边缘的位置。(2)根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。(3)类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。sobel算子进行边缘检测的原理Sobel算子是一阶导数的边缘检测算子,在算法实现过程中,通常使用3×3模板作为核与图像中的每个像素点做卷积和运算,然后选取合适的阈值以提取边缘。实验内容1)通过给定的图像加入椒盐噪声,并通过相应的中值滤波算法过滤掉噪声。2)使用Canny算子提取给定的图像的边缘。3)通过对比Canny算子和Sobel算子在边缘检测上面的应用,比较两则之间的差别。4)在给定的图片上面添加噪声,然后在进行边缘检测。实验步骤及方法1.Canny算子边缘检测的原理1.1对原始图像进行灰度化Canny算法通常处理的图像为灰度图,因此如果摄像机获取的是彩色图像,那首先就得进行灰度化。对一幅彩色图进行灰度化,就是根据图像各个通道的采样值进行加权平均。以RGB格式的彩图为例,通常灰度化采用的方法是Gray=0.299R+0.587G+0.114B。1.2对图像进行高斯滤波图像高斯滤波的实现可以用两个一维高斯核分别两次加权实现,也可以通过一个二维高斯核一次卷积实现。1)高斯核实现K=1𝜎√2∗𝜋𝑒−𝑥22𝜎22)图像高斯滤波通常滤波和边缘检测是矛盾的概念,抑制了噪声会使得图像边缘模糊,这回增加边缘定位的不确定性;而如果要提高边缘检测的灵敏度,同时对噪声也提高了灵敏度。1.3用一阶偏导的有限差分来计算梯度的幅值和方向𝑆𝑥=[−11−11]𝑆𝑦=[11−1−1]其x向、y向的一阶偏导数矩阵,梯度幅值以及梯度方向1.4对梯度幅值进行非极大值抑制图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,但这不能说明该点就是边缘(这仅仅是属于图像增强的过程)。在Canny算法中,非极大值抑制是进行边缘检测的重要步骤,通俗意义上是指寻找像素点局部最大值,将非极大值点所对应的灰度值置为0,这样可以剔除掉一大部分非边缘的点。1.5用双阈值算法检测和连接边缘Canny算法中减少假边缘数量的方法是采用双阈值法。选择两个阈值(关于阈值的选取方法在扩展中进行讨论),根据高阈值得到一个边缘图像,这样一个图像含有很少的假边缘,但是由于阈值较高,产生的图像边缘可能不闭合,未解决这样一个问题采用了另外一个低阈值。在高阈值图像中把边缘链接成轮廓,当到达轮廓的端点时,该算法会在断点的8邻域点中寻找满足低阈值的点,再根据此点收集新的边缘,直到整个图像边缘闭合。2.中值滤波原理2.1通过从图像中的某个采样窗口取出奇数个数据进行排序2.2用排序后的中值取代要处理的数据即可实验数据OPENCV程序代码:1)图像的平滑处理intmain(){Matimage=imread(H:/picture/1.jpg);imshow(Originalpicture,image);MatSalt_Image=addSaltNoise(image,3000);//添加椒盐噪声imshow(addSaltNoise,Salt_Image);Matimage3,image4;MedianFlitering(Salt_Image,image3);imshow(defaultmedianfilterimage,image3);waitKey();}2)边缘检测(canny)intmain(){MatsrcImage=imread(H:/picture/1.jpg);if(!srcImage.data)return-1;Matdst;dst.create(srcImage.size(),srcImage.type());//创建与src同类型和大小的矩阵(dst)imshow(dst,dst);imshow(srcImage,srcImage);Matconver_Image;cvtColor(srcImage,conver_Image,COLOR_BGR2GRAY);//将彩色图转化为灰度图imshow(coversionimage,conver_Image);MatGaussian_image;blur(conver_Image,Gaussian_image,Size(3,3));imshow(Gaussianblurimage,Gaussian_image);Matedge_image;Canny(conver_Image,edge_image,30,90,3);//原本是150,100一般情况就是2:imshow(edgeImage,edge_image);dst=Scalar::all(0);//将g_dstImage内的所有元素设置为0Matedge_image1=srcImage.clone();//将原图片srcImageclone到edgeimageedge_image1.copyTo(dst,edge_image);imshow(coloredgeImage,dst);waitKey(0);return0;}边缘检测(Sobel)intmain(intargc,char**argv){Matsrc,src_gray;Matgrad;char*window_name=Sobelgussiondetecting;intscale=1;//默认值intdelta=0;//默认值intddepth=CV_16S;//防止输出图像深度溢出intc;src=imread(H:/picture/1.jpg);if(!src.data){return-1;}//高斯模糊GaussianBlur(src,src,Size(3,3),0,0,BORDER_DEFAULT);//变换为灰度图cvtColor(src,src_gray,CV_RGB2GRAY);//加入高斯白噪声Matsobel_src=addGaussianNoise(src_gray);//创建窗口namedWindow(window_name,CV_WINDOW_AUTOSIZE);//生成grad_xandgrad_yMatgrad_x,grad_y;Matabs_grad_x,abs_grad_y;//GradientXx方向梯度1,0:x方向计算微分即导数//Scharr(src_gray,grad_x,ddepth,1,0,scale,delta,BORDER_DEFAULT);Sobel(sobel_src,grad_x,ddepth,2,0,3,scale,delta,BORDER_DEFAULT);convertScaleAbs(grad_x,abs_grad_x);//GradientYy方向梯度0,1:y方向计算微分即导数//Scharr(src_gray,grad_y,ddepth,0,1,scale,delta,BORDER_DEFAULT);Sobel(sobel_src,grad_y,ddepth,0,2,3,scale,delta,BORDER_DEFAULT);convertScaleAbs(grad_y,abs_grad_y);//近似总的梯度addWeighted(abs_grad_x,0.9,abs_grad_y,0.9,0,grad);imshow(window_name,grad);waitKey(0);return0;}实验数据分析及处理示例图片角点检测情况:图一图二图一为示例图像加入椒盐噪声的图片。图二是用中值滤波后的图片。图三图四图五图六图三为将原图像进行灰度化后的图片,图四为在灰度图片上面用canny算子进行边缘提取的图片图五为将在灰度图片上面进行边缘提取后的图片夹到原图像的结果,图六为使用了sobel算子进行边缘提取的结果图七图八图九图七为加入sigma=0.1的高斯白噪声后,利用canny算子进行的轮廓提取。图八为加入sigma=0.5的高斯白噪声后,利用canny算子进行的轮廓提取。图九为加入sigma=0.1的高斯白噪声后,利用sobel算子进行的轮廓提取实验结果分析(1)通过这次实验,我们能够看出中值滤波对过滤椒盐噪声的效果很好,主要是因为椒盐噪声的黑白的值为255和0,通过中值滤波能够较好的过滤出里面的噪声。(2)通过使用canny算子和sobel算子对所给的图像进行边缘提取,我们能够看到canny算子在边缘提取中,效果比使用sobel算子进行边缘提取的效果好。(3)通过这次实验,我们能够看出当加入sigma=0.1的高斯噪声时效果比加入sigma=0.5的高斯噪声时效果的边缘提取效果好。主要是因为当加入sigma大的高斯噪声的时候,在进行边缘提取时,会将噪声当成图像提取出来。同样加入sigma=0.1的高斯噪声使用sobel算子进行边缘提取的效果比使用canny算子进行边缘提取的效果差。说明canny算子的抗噪声的能力比sobel算子强。实验总结通过本次实验,是我对滤波的概念更加清晰,也明白了常用的几种滤波算法的原理,和噪声在图像上面的对图像的影响。此外,学会了用canny算子和sobel算子进行边缘检测,明白了两种算子的优缺点,对使用不同的算子的抗噪性进行了检测和运用。批改意见签名:年月日