邊緣檢測算子和小波變換提取圖像邊緣【matlab】


  Roberts邊緣檢測算子:根據一對互相垂直方向上的差分可用來計算梯度的原理,采用對角線方向相鄰兩像素之差。

       小波變換的方法比較適用於展現夾帶在正常信號中的瞬間反常現象,具有方向敏感性。所以可以邊緣檢測。

 

 Roberts邊緣檢測算子:

clear;
I=imread('D:\文件及下載相關\圖片\gray2.png'); 
I=rgb2gray(I);
grayPic=mat2gray(I);
[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')  

 

小波變換檢測邊緣:

clear all; 
I = imread('D:\文件及下載相關\圖片\gray2.png');
I = rgb2gray(I);imshow(I); 
I1 = imadjust(I,stretchlim(I),[0,1]);figure;imshow(I1); 
[N,M] = size(I); 
h = [0.125,0.375,0.375,0.125]; 
g = [0.5,-0.5]; 
delta = [1,0,0]; 
J = 3; 
a(1:N,1:M,1,1:J+1) = 0; 
dx(1:N,1:M,1,1:J+1) = 0; 
dy(1:N,1:M,1,1:J+1) = 0; 
d(1:N,1:M,1,1:J+1) = 0; 
a(:,:,1,1) = conv2(h,h,I,'same'); 
dx(:,:,1,1) = conv2(delta,g,I,'same'); 
dy(:,:,1,1) = conv2(g,delta,I,'same'); 
x = dx(:,:,1,1); 
y = dy(:,:,1,1); 
d(:,:,1,1) = sqrt(x.^2+y.^2); 
I1 = imadjust(d(:,:,1,1),stretchlim(d(:,:,1,1)),[0 1]);figure;imshow(I1); 
lh = length(h); 
lg = length(g); 
 for j = 1:J+1 
lhj = 2^j*(lh-1)+1; 
lgj = 2^j*(lg-1)+1; 
hj(1:lhj)=0; 
gj(1:lgj)=0; 
for n = 1:lh 
hj(2^j*(n-1)+1)=h(n); 
end 
for n = 1:lg 
gj(2^j*(n-1)+1)=g(n); 
end 
a(:,:,1,j+1) = conv2(hj,hj,a(:,:,1,j),'same'); 
dx(:,:,1,j+1) = conv2(delta,gj,a(:,:,1,j),'same'); 
dy(:,:,1,j+1) = conv2(gj,delta,a(:,:,1,j),'same'); 
x = dx(:,:,1,j+1); 
y = dy(:,:,1,j+1); 
dj(:,:,1,j+1) = sqrt(x.^2+y.^2); 
I1 = imadjust(dj(:,:,1,j+1),stretchlim(dj(:,:,1,j+1)),[0 1]);
figure;imshow(I1); 
end

 

 

 圖像邊緣檢測經典算子及MATLAB實現 - CSDN博客 http://blog.csdn.net/u012808193/article/details/45722283

 

 

邊緣檢測是圖像分析和模式識別的主要特征提取手段。所謂邊緣是指其周圍像素灰度后階變化或屋頂狀變化的那些像素的集合,它存在於目標與背景、目標與目標、區域與區域,基元與基元之間。 因此它是圖象分割所依賴的重要的特征,也是紋理特征的重要信息源和形狀特征的基礎;而圖象的紋理形狀特征的提取又常常依賴於圖象分割。 圖象的邊緣提取也是圖象匹配的基礎,因為它是位置的標志,對灰度的變化不敏感,它可作為匹配的特征點。

目前常用的邊緣檢測方法有:Roberts邊緣檢測算子、Sobel邊緣檢測算子、Prewitt邊緣檢測算子、Laplace邊緣檢測算子等等。

1、Roberts邊緣檢測算子

Roberts邊緣檢測算子根據任意一對互相垂直方向上的差分可用來計算梯度的原理,采用對角線方向相鄰兩像素之差。

MATLAB實驗代碼如下:

clear;
sourcePic=imread('lena.jpg'); %讀取原圖像
grayPic=mat2gray(sourcePic); %實現圖像矩陣的歸一化操作
[m,n]=size(grayPic);
newGrayPic=grayPic;%為保留圖像的邊緣一個像素
robertsNum=0; %經roberts算子計算得到的每個像素的值
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算子的處理結果')  

 

實驗結果: 
這里寫圖片描述

2、Sobel邊緣檢測算子

對數字圖像的每個像素,考察它上、下、左、右鄰點灰度的加權差,與之接近的鄰點的權大。 
MATLAB實驗代碼如下:

clear;
sourcePic=imread('lena.jpg');%讀取原圖像
grayPic=mat2gray(sourcePic);%實現圖像矩陣的歸一化操作
[m,n]=size(grayPic);
newGrayPic=grayPic;%為保留圖像的邊緣一個像素
sobelNum=0;%經sobel算子計算得到的每個像素的值
sobelThreshold=0.8;%設定閾值
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算子的處理結果')

 

實驗結果: 
這里寫圖片描述

3、Prewitt邊緣檢測算子

Prewitt算子是一種邊緣樣板算子。這些算子樣板由理想的邊緣子圖像構成。依次用邊緣樣板去檢測圖像,與被檢測區域最為相似的樣板給出最大值。 
MATLAB實驗代碼

clear;
sourcePic=imread('lena.jpg');%讀取原圖像
grayPic=mat2gray(sourcePic);%實現圖像矩陣的歸一化操作
[m,n]=size(grayPic);
newGrayPic=grayPic;%為保留圖像的邊緣一個像素
PrewittNum=0;%經Prewitt算子計算得到的每個像素的值
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算子的處理結果')

 

實驗結果 
這里寫圖片描述

4、Laplace邊緣檢測算子

Laplacian 算子是n維歐幾里德空間中的一個二階微分算子。 
MATLAB實驗代碼

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算子的處理結果')

 

實驗結果 
這里寫圖片描述


免責聲明!

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



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