zoukankan      html  css  js  c++  java
  • matlab-图像处理-边缘检测算法五种

    五种实现matlab边缘检测算法:

    方法一:

    matlab自带的edge函数:

    将图片保存为lena.jpg

    I=imread('lena.jpg');%提取图像
    
    img=rgb2gray(I);
    
    [m,n]=size(img);
    
    BW1=edge(img,'sobel'); %用Sobel算子进行边缘检测
    
    BW2=edge(img,'roberts');%用Roberts算子进行边缘检测
    
    BW3=edge(img,'prewitt'); %用Prewitt算子进行边缘检测
    
    BW4=edge(img,'log'); %用Log算子进行边缘检测
    
    BW5=edge(img,'canny'); %用Canny算子进行边缘检测
    
    h=fspecial('gaussian',5);%?高斯滤波
    
    BW6=edge(img,'canny');%高斯滤波后使用Canny算子进行边缘检测
    
    subplot(2,3,1), imshow(BW1);
    
    title('sobel edge check');
    
    subplot(2,3,2), imshow(BW2);
    
    title('roberts edge check');
    
    subplot(2,3,3), imshow(BW3);
    
    title('prewitt edge check');
    
    subplot(2,3,4), imshow(BW4);
    
    title('log edge check');
    
    subplot(2,3,5), imshow(BW5);
    
    title('canny edge check');
    
    subplot(2,3,6), imshow(BW6);
    
    title('gasussian&canny edge check');
    

     效果如下图所示:

     方法二:Laplacian算法

    clear;
    
    sourcePic=imread('lena.jpg');%图像读入
    
    grayPic=mat2gray(sourcePic);%实现图像的矩阵归一化操作
    
    [m,n]=size(grayPic);
    
    newGrayPic=grayPic;
    
    LaplacianNum=0;%经Laplacian操作得到的每个像素的值
    
    LaplacianThreshold=0.2;%设定阈值
    
    for j=2:m-1 %进行边界提取
    
        for k=2:n-1
    
            LaplacianNum=abs(4*grayPic(j,k)-grayPic(j-1,k)-grayPic(j+1,k)-grayPic(j,k+1)-grayPic(j,k-1));
    
            if(LaplacianNum > LaplacianThreshold)
    
                newGrayPic(j,k)=255;
    
            else
    
                newGrayPic(j,k)=0;
    
            end
    
        end
    
    end
    
    figure,imshow(newGrayPic);
    
    title('Laplacian算子的处理结果')
    

      效果图如下:

     方法三:Prewitt算法

    %Prewitt 算子的实现:
    
    clear;
    
    sourcePic=imread('lena.jpg');
    
    grayPic=mat2gray(sourcePic);
    
    [m,n]=size(grayPic);
    
    newGrayPic=grayPic;
    
    PrewittNum=0;
    
    PrewittThreshold=0.5;%设定阈值
    
    for j=2:m-1 %进行边界提取
    
        for k=2:n-1
    
            PrewittNum=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(PrewittNum > PrewittThreshold)
    
                newGrayPic(j,k)=255;
    
            else
    
                newGrayPic(j,k)=0;
    
            end
    
        end
    
    end
    
    figure,imshow(newGrayPic);
    
    title('Prewitt算子的处理结果')
    

      效果图如下:

     

     方法四:Sobel算法

    %Sobel 算子的实现:
    
    clear;
    
    sourcePic=imread('lena.jpg');
    
    grayPic=mat2gray(sourcePic);
    
    [m,n]=size(grayPic);
    
    newGrayPic=grayPic;
    
    sobelNum=0;
    
    sobelThreshold=0.7;
    
    for j=2:m-1
    
        for k=2:n-1
    
            sobelNum=abs(grayPic(j-1,k+1)+2*grayPic(j,k+1)+grayPic(j+1,k+1)-grayPic(j-1,k-1)-2*grayPic(j,k-1)-grayPic(j+1,k-1))+abs(grayPic(j-1,k-1)+2*grayPic(j-1,k)+grayPic(j-1,k+1)-grayPic(j+1,k-1)-2*grayPic(j+1,k)-grayPic(j+1,k+1));
    
            if(sobelNum > sobelThreshold)
    
                newGrayPic(j,k)=255;
    
            else
    
                newGrayPic(j,k)=0;
    
            end
    
        end
    
    end
    
    figure,imshow(newGrayPic);
    
    title('Sobel算子的处理结果')
    

      效果如下:

     

     方法五:Roberts 算子的实现

    %Roberts 算子的实现:
    
    clear all;
    
    clc;
    
    sourcePic=imread('lena.jpg');
    
    grayPic=mat2gray(sourcePic);
    
    [m,n]=size(grayPic);
    
    newGrayPic=grayPic;
    
    robertsNum=0;
    
    robertThreshold=0.2;
    
    for j=1:m-1
    
        for k=1:n-1
    
            robertsNum = abs(grayPic(j,k)-grayPic(j+1,k+1)) + abs(grayPic(j+1,k)-grayPic(j,k+1));
    
            if(robertsNum > robertThreshold)
    
                newGrayPic(j,k)=255;
    
            else
    
                newGrayPic(j,k)=0;
    
            end
    
        end
    
    end
    
    figure,imshow(newGrayPic);
    
    title('roberts算子的处理结果')
    

      效果图:

     

     参考:https://www.cnblogs.com/leegod/p/8109023.html

  • 相关阅读:
    Atitit.code base view 视图的实现原理
    Atitit.code base view 视图的实现原理
    Atitit。  工作流引擎的发展趋势
    Atitit. atiOrder   Order 订单管理框架的设计
    Atitit。  工作流引擎的发展趋势
    Atitit. atiOrder   Order 订单管理框架的设计
    atitit.编程语言 类与对象的 扩展机制.doc
    atitit.编程语言 类与对象的 扩展机制.doc
    Atitit.为什么小公司也要做高大上开源项目
    Atitit.为什么小公司也要做高大上开源项目
  • 原文地址:https://www.cnblogs.com/Catherinezhilin/p/15088677.html
Copyright © 2011-2022 走看看