数字图像 实验五(图像的边缘检测和分割)

本文介绍了如何通过编程实现边缘检测(包括roberts,sobel,prewitt,LOG,Canny等算子)、图像锐化(如robert算子和sobel算子)以及基于不同阈值处理方法(graythresh,otsuthresh)的图像分割。实验要求包括预习报告、编程调试和实验报告撰写。
摘要由CSDN通过智能技术生成

一、实验目的

1.学会使用编程实现不同算法的边缘检测。

2.学会使用编程实现不同算法的图像分割。

3.能够根据实验结果分析各种算法的特点及其应用场合,培养处理实际图像的能力。

二、实验要求

1.实验课前需要写预习实验报告,内容为本次实验要求中的所有程序清单。

2.实验课对预习报告中的编程代码进行上机调试,完成实验指导书中全部实验要求内容。

3.实验课后写出实验报告。报告要求有实验目的,实验内容与步骤,调试完成的准确编程代码,实验小结,回答问题。

三、实验内容与步骤

1.边缘检测:

(1)利用边缘检测函数edge ()对灰度图像(house.tif)进行边缘检测,检测算子分别选择'roberts'、'sobel'、'prewitt'、LOG、'Canny'(其他参数选择:default),比较不同检测算子对边缘检测的效果;

完整代码:

A = imread('house.tif');
B1=edge(A,'roberts'); 
B2=edge(A,'sobel');
B3=edge(A,'prewitt');
B4=edge(A,'log');
B5=edge(A,'canny');
figure(1)
subplot(2,3,1);imshow(A);title('原图像');
subplot(2,3,2);imshow(B1);title('roberts算子边缘检测图');
subplot(2,3,3);imshow(B2);title('sobel算子边缘检测图');
subplot(2,3,4);imshow(B3);title('prewitt算子边缘检测图') 
subplot(2,3,5);imshow(B4);title('log算子边缘检测图');
subplot(2,3,6);imshow(B5);title('canny算子边缘检测图')

运行结果:

 

2)利用工具箱函数imfilter()和如图1所示四种不同方向的线检测模板w1/w2/w3/w4对图像(Fig0908(a).tif)进行边缘检测,比较不同方向的检测算子对边缘检测的效果;

-1

-2

-1

-1

0

1

0

1

2

-2

-1

0

0

0

0

-2

0

2

-1

0

1

-1

0

1

1

2

1

-1

0

1

-2

-1

0

0

1

2

 

 

1   w1(水平)     w2(垂直)      w3 +45°)    w4-45° 

 完整代码:

A = imread('Fig0908(a).tif');
w1=[-1 -2 -1; 0 0 0; 1 2 1 ];
w2=[-1 0 1; -2 0 2; -1 0 1 ];
w3=[0 1 2; -1 0 1; -2 -1 0 ];
w4=[-2 -1 0; -1 0 1; 0 1 2 ];
A1=imfilter(A,w1); 
A2=imfilter(A,w2);
A3=imfilter(A,w3);
A4=imfilter(A,w4); 
subplot(3,2,[1,2]);imshow(A);title('原图像'); 
subplot(3,2,3);imshow(A1);title('w1(水平)');
subplot(3,2,4);imshow(A2);title('w2(垂直)');
subplot(3,2,5);imshow(A3);title('w3(+45°)');
subplot(3,2,6);imshow(A4);title('w4(-45°)');

运行结果:

 

 

2.对灰度图像(rice.tif)编程实现图像锐化增强(算子如图2所示):

(1)利用robert算子检测图像边缘,并采用门限法得到锐化增强图像(T=10,T=50);

完整代码:

A = imread('rice.tif')
[x,y] = size(A);
B =double(A);
robert10 = A;
robert50 = A;
A1 = 10;
A2 = 50;
for i=1:x-1
    for j=1:y-1
        C = ( B(i+1,j+1) - A(i,j) );  
        D = ( B(i,j+1) - A(i+1,j) );
        if ( abs(C) + abs(D) ) >= A1    
            robert10(i, j) = abs(C) + abs(D);   
        else
            robert10(i, j) = 0;          
        end
        if ( abs(C) + abs(D) ) >= A2     
            robert50(i, j) = abs(C) + abs(D);
        else
            robert50(i, j) = 0;
        end   
    end
end
A3 = A-robert10;
A4 = A-robert50;
subplot(1,3,1);imshow(A);title('原图像');
subplot(1,3,2);imshow(A3);title('robert算子(T=10)');
subplot(1,3,3);imshow(A4);title('robert算子(T=50)');

运行结果:

 

 (2)利用sobel算子检测图像边缘并得到锐化增强图像;

完整代码:

A = imread('rice.tif');
s1 = [-1,0,1;-2,0,2;-1,0,1];
s2 = [-1,-2,-1;0,0,0;1,2,1];
a = imfilter(A,s1);
b = imfilter(A,s2);
A1 = abs(a)+abs(b);
A2 = (A+A1)/2;
subplot(2,3,2);imshow(A);title('原图像');
subplot(2,3,4);imshow(a);title('图像的x梯度');
subplot(2,3,5);imshow(b);title('图像的y梯度');
subplot(2,3,6);imshow(A2);title('图像的sobel梯度');

运行结果:

 

 (3)利用Laplacian算子检测图像边缘,分H1和H2两种情况,并得到锐化增强图像;

完整代码:

A = imread('rice.tif');
H1 = [0,1,0;1,-4,1;0,1,0];
H2 = [1,1,1;1,-8,1;1,1,1];
A1 = imfilter(A,H1);
A2 = imfilter(A,H2);
A3 = fspecial('laplacian',0);
A4 = imfilter(A,A3,'replicate');
A5 = A-A4;
subplot(2,3,2);imshow(A);title('原图像');
subplot(2,3,4);imshow(A1);title('laplacian算子(H1)');
subplot(2,3,5);imshow(A2);title('laplacian算子(H2)');
subplot(2,3,6);imshow(A5);title('MATLAB自带函数锐化');

运行结果:

 

 

3. 对灰度图像(Fig1018(a).tif)实现基于阈值处理的图像分割(1为必做内容,2-4为选做内容):

1)利用函数graythresh ()otsuthresh()找到全局阈值,对图像进行分割;

2)采用迭代阈值选取方法,编程实现基于图像数据自动地选择阈值,对图像进行全局阈值分割;

3)使用Otsu阈值选取方法,编程实现对图像进行最佳全局阈值分割;

4)比较迭代法和Otsu法两种不同的阈值处理方法对图像进行分割的效果。

完整代码:

A = imread('Fig1018(a).tif');
subplot(2,2,[1,2]);imshow(A);title('原图像');
A1 = graythresh(A) ;     
a=imhist(A);
A2 = otsuthresh(a);  
[x,y]=size(A);
A3=im2double(A);
for i=1:x
     for j=1:y
         if A3(i,j)>A1 
             B(i,j)=0;
         else
             B(i,j)=1;
         end
     end
end
subplot(2,2,3);imshow(B);title("graythresh");
 
for i=1:x
     for j=1:y
         if A3(i,j)>A2 
             B2(i,j)=0;
         else
             B2(i,j)=1;
         end
     end
end
subplot(2,2,4);imshow(B2);title("otsuthresh");

运行结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值