Sobel算子
%%
% Sobel算子
clear;
clc;
%%
% 主程序入口
Main();
%%
% 主函数
function Main()
Image = imread('lena.tif');
OutImage = uint8(Method_Sobel(Image));
figure('name','Sobel检测边缘');
imshow(OutImage);
title('Sobel边缘');
end
%%
% Sobel算子函数
function OutImage = Method_Sobel(Image)
w1 = [-1,-2,-1;0 0 0;1,2,1];
w2 = [-1,0,1;-2,0,2;-1,0,1];
Image = double(Image);
[Height,Width] = size(Image);
OutImage = zeros(Height,Width);
for i = 2:Height-1
for j = 2:Width-1
OutImage(i,j) = abs(sum(sum(Image(i-1:i+1,j-1:j+1).*w1))) + abs(sum(sum(Image(i-1:i+1,j-1:j+1).*w2)));
end
end
end
Robert算子
%%
% Robert算子
clear;
clc;
%%
% 主程序入口
Main();
%%
% 主函数
function Main()
Image = imread('lena.tif');
OutImage = Method_Robert(Image);
figure('name','Robert检测边缘');
imshow(OutImage);
title('Robert边缘');
end
%%
% Robert算子函数
function OutImage = Method_Robert(Image)
w1 = [-1,0;0,1];
w2 = [0,-1;1,0];
Image = double(Image);
OutImage = double(zeros(size(Image)));
for i = 1:size(Image,1)-1
for j = 1:size(Image,2)-1
OutImage(i,j) = abs(sum(sum(w1.*Image(i:i+1,j:j+1))))+abs(sum(sum(w2.*Image(i:i+1,j:j+1))));
end
end
OutImage = uint8(OutImage);
end
拉普拉斯算子
%%
% Laplace算子
clear;
clc;
%%
% 主程序入口
Main();
%%
% 主函数
function Main()
Image = imread('lena.tif');
OutImage = uint8(Method_Laplace(Image));
figure('name','Laplace边缘检测');
imshow(OutImage);
title('Laplace边缘');
end
%%
% Laplace算子函数
function OutImage = Method_Laplace(Image)
w1 = [0 1 0;1 -4 1;0 1 0];
Image = double(Image);
[Height,Width] = size(Image);
OutImage = zeros(Height,Width);
for i = 2:Height-1
for j = 2:Width-1
OutImage(i,j) = abs(sum(sum(Image(i-1:i+1,j-1:j+1).*w1)));
end
end
end