基于MATLAB的图像边缘检测

MATLAB图像的边缘检测

一、目的

1、理解图像边缘提取的基本概念;

2、熟悉进行边缘提取的基本方法;

3、掌握用MATLAB语言进行图像边缘提取的方法。

二、原理

图像理解是图像处理的一个重要分支,他研究为完成某一任务需要从图像中提取哪些有用的信息,以及如何利用这些信息解释图像。边缘检测技术对于处理数字图像非常重要,因为边缘是所要提取目标和背景的分界线,提取出边缘才能将目标和背景区分开来。在图像中,边界表明一个特征区域的终结和另一个特征区域的开始,边界所分开区域的内部特征或属性是一致的,而不同的区域内部的特征或属性是不同的,边缘检测正是利用物体和背景在某种图像特性上的差异来实现的,这些差异包括灰度,颜色或者纹理特征。边缘检测实际上就是检测图像特征发生变化的位置。

三、要求

  1. 读取MATLAB图像处理工具箱中提供的rice.tif这幅图像,并显示。
  2. 分别用Roberts、Sobel和拉普拉斯高斯算子对图像进行边缘检测。比较三种算子处理的结果。

A=imread('E:\1\rice.tif');

subplot(2,2,1);imshow(A);

BW1=edge(A,'sobel');

BW2=edge(A,'roberts');

BW3=edge(A,'log');

subplot(2,2,2);imshow(BW1),title('用Roberts算');

subplot(2,2,3);imshow(BW2),title('用Sobel算子');

subplot(2,2,4);imshow(BW3),title('用拉普拉斯高斯算子');

v2-ca74bb2e117ec8ac1ee9744a84af8401_b.jpg

1、用不同方向(‘水平’、‘垂直’、‘水平和垂直’)的Sobel算子对图像进行边缘检测。比较三种情况的结果。

A=imread('E:\1\rice.tif');

subplot(2,2,1);imshow(A),title('原图像');

BW1=edge(A,'sobel','horizontal');

BW2=edge(A,'sobel','vertical');

BW3=edge(A,'sobel','both');

subplot(2,2,2);imshow(BW1),title('水平方向');

subplot(2,2,3);imshow(BW2),title('垂直方向');

subplot(2,2,4);imshow(BW3),title('水平和垂直两个方向');


v2-2069675c47ccfee7712216538cf3115a_b.jpg


  1. 读取其它图像,重复2,3要求。

A=imread('E:\1\girl.bmp');

figure(1),subplot(2,2,1);imshow(A),title('原图像');

BW1=edge(A,'sobel');

BW2=edge(A,'roberts');

BW3=edge(A,'log');

figure(1),subplot(2,2,2);imshow(BW1),title('用Roberts算');

figure(1),subplot(2,2,3);imshow(BW2),title('用Sobel算子');

figure(1),subplot(2,2,4);imshow(BW3),title('用拉普拉斯高斯算子');


v2-eff91d0eefedd880fb8bf6d49ff6513c_b.jpg




B=edge(A,'sobel','horizontal');

C=edge(A,'sobel','vertical');

D=edge(A,'sobel','both');

figure(2),subplot(2,2,1);imshow(A),title('原图像');

figure(2),subplot(2,2,2);imshow(BW1),title('水平方向');

figure(2),subplot(2,2,3);imshow(BW2),title('垂直方向');

figure(2),subplot(2,2,4);imshow(BW3),title('水平和垂直两个方向');


v2-d05074772811bf88fa7dca08d38a816f_b.jpg


5、自编程序,实现边缘检测处理。

[F,MAP]=imread('E:\1\girl.bmp');

f=double(F);

[m,n]=size(f);

g=zeros(m,n);

for i=2:m-1

for j=2:n-1

DX=(f(i+1,j-1)-f(i-1,j-1))+2*(f(i+1,j)-f(i-1,j))+(f(i+1,j+1)-f(i-1,j+1));

DY=(f(i-1,j+1)-f(i-1,j-1))+2*(f(i,j+1)-f(i,j-1))+(f(i+1,j+1)-f(i+1,j-1));

g(i,j)=round(sqrt(DX*DX+DY*DY));

end

end

G=uint8(g);

subplot(1,2,1), imshow(F,MAP), title('原图像');

subplot(1,2,2), imshow(G,MAP), title('取边缘');

v2-f2cbc9a9c3661a8e2510e9813cd7b765_b.jpg

1、图像分割

clear;

I=imread('E:\1\girl.bmp','bmp');

[x,map]=imread('E:\1\girl.bmp');

h0=imhist(I);

h=h0';

j=0;k=0;

q0=inf;

for th0=1:size(h,2)

for i=1:size(h,2)

if h(i)<th0

j=j+1;

c1(j)=h(i);

else

k=k+1;

c2(k)=h(i);

end

end

N1=j;

N2=k;

N=N1+N2;

a1=var(c1);

a2=var(c2);

p1=N1/N;

p2=N2/N;

q=p1*a1+p2*a2;

if q<q0

th=th0;

end

q0=q;

j=0;k=0;

end

x1=double(x);

g1=x1;

for i=1:size(x,1)

for j=1:size(x,2)

if x1(i,j)<th

g1(i,j)=0;

else

g1(i,j)=256;

end

end

end

g=uint8(g1);

subplot(1,2,2);imshow(g,map);

subplot(1,2,1);imshow(x,map);


v2-61ef0901b1250ada7d5df660822d2707_b.jpg

  • 3
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值