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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM