%%----sobel算子边缘检测分割-------
clc
clear
Im=imread('catdog.jpg');
grayImg=mat2gray(Im); %实现图像矩阵的归一化操作
[m,n]=size(grayImg);
newGrayImg=grayImg; %为保留图像的边缘一个像素
sobelNum=0; %经sobel算子计算得到的每个像素的值,初始值为0
sobelThreshold=0.8; %设定阈值
%进行边界提取
for j=2:m-1
for k=2:n-1
sobelNum=abs(grayImg(j-1,k+1)+2*grayImg(j,k+1)+grayImg(j+1,k+1)-grayImg(j-1,k-1)-2*grayImg(j,k-1)-grayImg(j+1,k-1))+abs(grayImg(j-1,k-1)+2*grayImg(j-1,k)+grayImg(j-1,k+1)-grayImg(j+1,k-1)-2*grayImg(j+1,k)-grayImg(j+1,k+1));
if(sobelNum > sobelThreshold)
newGrayImg(j,k)=255;
else
newGrayImg(j,k)=0;
end
end
end
%结果输出及保存
figure,imshow(newGrayImg);
title('Sobel算子的处理结果')
imwrite(newGrayImg,'result\Sobel.jpg');