数字图像处理实验十一边缘检测
利用Sobel、Roberts、Prewitt、Canny、log和拉普拉斯算子进行边缘提取。
clear;
clc;
%----------------------------图像的灰度化处理-------------------------------
JPG=imread('1.jpg');
JPG=rgb2gray(JPG);
I=im2double(JPG);
%---------------------------Sobel算子边缘检测-------------------------------
%BW=edge(I,'sobel',thresh,direction)该函数采用Sobel算子对图像I进行边缘检测
%将分割阈值thresh设置为空矩阵(即表示函数自动计算分割阈值),direction可以对方向进行设置,共有三个值:horizontal,vertical,both(默认,表示水平和垂直双方向)
S=edge(I,'sobel',15/255,'both');
figure();
subplot(121),imshow(I);title('原始图像');
subplot(122),imshow(S);title('采用Sobel算子提取的边缘');
%--------------------------Roberts算子边缘检测------------------------------
%调用格式BW=edge(I,'roberts',thresh)采用Roberts算子对图像I进行边缘检测,thresh为分割阈值
%该函数会忽略所有小于thresh的像素值,注意阈值需要进行归一化即变换到[0,1]之间
R=edge(I,'roberts',10/255);
figure();
subplot(121),imshow(I);title('原始图像');
subplot(122),imshow(R);title('采用Roberts算子提取的边缘');
%--------------------------Prewitt算子边缘检测------------------------------
% BW=edge(I,'prewitt',thresh,direction)该函数采用Prewitt算子对图像I进行边缘检测
P=edge(I,'prewitt',15/255,'both');
figure();
subplot(121),imshow(I);title('原始图像');
subplot(122),imshow(P);title('采用Prewitt算子提取的边缘');
%---------------------------Canny算子边缘检测-------------------------------
%BW=edge(I,'canny')该函数采用Canny算子对图像I进行边缘检测
%并采用自动计算的低阈值和高阈值进行图像分割,函数的返回值BW为二值图像
C=edge(I,'canny');
figure();
subplot(121),imshow(I);title('原始图像');
subplot(122),imshow(C);title('采用Canny算子提取的边缘');
%----------------------------Log算子边缘检测--------------------------------
%BW=edge(I,'log',thresh,sigma)该函数采用LOG算子对图像I进行边缘检测,
%若不设置阈值tresh或tresh为空,系统会自动计算tresh值
%sigma为LOG滤波器的标准差默认位2
L=edge(I,'log');% 采用LOG算子提取边缘
figure();
subplot(121),imshow(I);title('原始图像');
subplot(122),imshow(L);title('采用LOG算子提取的边缘');
%--------------------------拉普拉斯算子边缘检测-----------------------------
laplace=[0,1,0;1,-4,1;0,1,0];
L1=imfilter(I,laplace);
L=abs(L1);
figure();
subplot(121),imshow(I);title('原始图像');
subplot(122),imshow(L);title('采用拉普拉斯算子提取的边缘');
效果图展示