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