matlab对特定位置进行边缘检测,关于matlab图像边缘提取 使用soble算子对图像进行边缘检测...

该博客介绍了通过Sobel算子进行图像边缘检测,并结合高斯滤波和平滑处理来检测图像中的道路。作者在代码中实现了一种方法,但发现细化过程的阈值设置存在问题,导致效果不佳。最后,作者展示了处理后的图像,并希望找到改进方案将边缘点连成线,以更准确地检测道路。
摘要由CSDN通过智能技术生成

使用soble算子对图像进行边缘检测。再进行细化(阈值有问题),但是效果不是很好。效果如下图

处理的目的是检测出道路。请问接下来如何处理,把边缘点连成线,从而检测出道路。

先在这里谢谢大家了。下面是代码

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('1.bmp');

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检测并细化后的图像')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值