各类边缘提取算子的MATLAB实现
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-1for j = 2:Width-1OutImage(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)));endend
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)-1for j = 1:size(Image,2)-1OutImage(i,j) = abs(sum(sum(w1.*Image(i:i+1,j:j+1))))+abs(sum(sum(w2.*Image(i:i+1,j:j+1))));endendOutImage = 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-1for j = 2:Width-1OutImage(i,j) = abs(sum(sum(Image(i-1:i+1,j-1:j+1).*w1)));endend
end
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
