搜索
您的当前位置:首页正文

关于MATLAB边缘检测sobel算子

来源:爱够旅游网
 关于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检测并细化后的图像')

因篇幅问题不能全部显示,请点此查看更多更全内容

Top