关于MATLAB边缘检测sobel算子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于MATLAB边缘检测sobel算子
一、sobel介绍
索贝尔算子是图像处理中的算子之一,主要用作边缘检测。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以代表原始图像,及分别代表经横向及纵向边缘检测的图像,其公式如下:
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
然后可用以下公式计算梯度方向。
在以上例子中,如果以上的角度等于零,即代表图像该处拥有纵向边缘,左方较右方暗。
二、程序
例1
clear all;
close all;
f=imread('dsy.jpg');
u=rgb2gray(f);
F=double(f);
U=double(u);
[H,W]=size(u);
uSobel=u;
% ms=0;
% ns=0;
for i=2:H-1
for j=2:W-1
Gx=(U(i+1,j-1)+2*U(i+1,j)+F(i+1,j+1))-(U(i-1,j-1)+2*U(i-1,j)+F(i-1,j+1));
Gy=(U(i-1,j+1)+2*U(i,j+1)+F(i+1,j+1))-(U(i-1,j-1)+2*U(i,j-1)+F(i+1,j-1));
uSobel(i,j)=sqrt(Gx^2+Gy^2);
% ms=ms+uSobel(i,j);
% ns=ns+(uSobel(i,j)-ms)^2;
end
end
% ms=ms/(H*W);
% ns=ns/(H*W);
subplot(1,2,1);imshow(f);title('原图');
subplot(1,2,2);imshow(im2uint8(uSobel));title('Sobel处理后');
% S=[ms ns];
程序运行结果:
例2
hg=zeros(3,3); %设定高斯平滑滤波模板的大小为3*3
delta=0.5;
for x=1:1:3
for y=1:1:3
u=x-2;
v=y-2;
hg(x,y)=exp(-(u^2+v^2)/(2*pi*delta^2));
end
end
h=hg/sum(hg(:));
g = imread('jjj.jpg ');
f=rgb2gray(im2double(g));
subplot(2,2,1),imshow(f)
title('原始图像');
[m,n]=size(f);
ftemp=zeros(m,n);
rowhigh=m-1;
colhigh=n-1;
%%%高斯滤波%%%
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];
A=h.*mod;
ftemp(x,y)=sum(A(:));
end
end
f=ftemp
subplot(2,2,2),imshow(f)
title('高斯滤波器后的图像');
%%%%3*3的soble算子%%%%%%%%
sx=[-1 -2 -1;0 0 0;1 2 1];
sy=[-1 0 1;-2 0 2;-1 0 1];
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];
fsx=sx.*mod;
fsy=sy.*mod;
ftemp(x,y)=max((abs(sum(fsx(:)))),(abs(sum(fsy(:)))));
end
end
fs=im2uint8(ftemp);
subplot(2,2,3),imshow(fs)
title('用soble检测的原始图像');
%%%域值分割%%%
TH2=30; %设定阈值
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
if (fs(x,y)>=TH2)&((fs(x,y-1) <= fs(x,y)) & (fs(x,y) > fs(x,y+1)) )
fs(x,y)=200;
elseif(fs(x,y)>=TH2)&( (fs(x-1,y) <=fs(x,y)) & (fs(x,y) >fs(x+1,y))) fs(x,y)=200;
else fs(x,y)=50;
end
end
end
subplot(2,2,4),imshow(fs)
title('用soble检测并细化后的图像')