clear
clc
T=180; %设定阈值
X=imread('f:\aa.jpg'); %读入要处理的图像
X=double(X(:,:,1)); %把图变为十进制数
S=size(X); %图像的大小(长和宽)
g=zeros(S); %定义一个大小为S的空矩阵
figure(1)
image(X)
colormap(gray(256))
title('无噪图像,fontsize,18,fontweight,bold,fontname,隶书');
for i=2:S(1)-1
for j=2:S(2)-1
Dx=(X(i+1,j-1)-X(i-1,j-1)+2*(X(i+1,j)-X(i-1,j))+X(i+1,j+1)-X(i-1,j+1))^2; %Sobel算子的Dx(垂直梯度)
Dy=(X(i-1,j+1)-X(i-1,j-1)+2*(X(i,j+1)-X(i,j-1))+X(i+1,j+1)-X(i+1,j-1))^2; %Sobel算子的Dx(水平梯度)
g(i,j)=round(sqrt(Dx+Dy)); %此为梯度模round为取整函数
end
end
for i=1:S(1)
for j=1:S(2)
if g(i,j)>T
X(i,j)=255; %把梯度值和阈值比较 ,大于T的把图像的灰度变为255小于T的把图像的灰度变为0
else
X(i,j)=0;
end
end
end
figure (2)
image(X)
colormap(gray(256)) %显示的图就为边缘图
title('sobel算子检测无噪图像,fontsize,18,fontweight,bold,fontname,隶书');
saveas (2,'F:\bb','jpg')