第四章:习题与思考题参考答案
4-1.什么是图像分割?什么是边缘检测?实现方法有哪些?
图像分割是把图像分成若干个有意义区域的处理技术。从本质上说是将各像素进行分类的过程。
图像分割的方法有:基于阈值选取的图像分割、基于区域的图像分割以及基于边缘检测的图像分割。
边缘检测的实质是采用某种算法来提取出图像中对象与背景间的交界线。
边缘检测的方法:Roberts边缘检测算子、Sobel边缘检测算子、Prewitt边缘检测算子、Robinson边缘检测算子、Laplace边缘检测算子、Canny算子和LOG算
4-2.应用MATLAB语言编写实例对Sobel、Prewitt、Roberts、Laplacian-Gaussian Canny方法的边缘检测性能进行比较。
I = imread('tire.tif'); % 读入原始灰度图像并显示
figure(1),imshow(I);
BW1 = edge(I,'sobel',0.1); % 用Sobel算子进行边缘检测,判别阈值为0.1
figure(2),imshow(BW1)
BW2 = edge(I,'roberts',0.1); %用Roberts算子进行边缘检测,判别阈值为0.1
figure(3),imshow(BW2)
BW3 = edge(I,'prewitt',0.1); %用Prewitt算子进行边缘检测,判别阈值为0.1
figure(4),imshow(BW3)
BW4 = edge(I,'log',0.01); % 用LOG算子进行边缘检测,判别阈值为0.01
figure(5),imshow(BW4)
BW5 = edge(I,'canny',0.1); % 用Canny算子进行边缘检测,判别阈值为0.1
figure(6),imshow(BW5)
(a) 原始灰度图像 (b) Sobel算子检测效果 (c) Roberts算子检测效果
(d) Prewitt算子检测效果 (e) LOG算子检测效果 (f) Canny算子检测效果
4-3.在灰度阈值法分割中,阈值如何选择?用MATLAB语言编写出相应的程序。
阈值的选取方法很多,一般可以分为全局阈值法和局部阈值法两类。每个区域是由许多灰度值相近的像素构成的,物体和背景之间或不同物体之间的灰度值有明显的差别,可以通过取阈值来区分。
I=imread( 'cell.tif'); % 读入原始图像到I变量
subplot(2,2,1),imshow (I), title ( '原始图像' );
Ic = imcomplement (I); % 调用imcomplement函数对图像求反色
BW = im2bw( Ic, graythresh (Ic) ); % 使用im2bw函数,转换成二值化图像来阈值分割
subplot ( 2,2,2 ), imshow (BW), title (' 阈值截取分割后图像' );
4-4.什么是Hough变换?试述采用Hough变换检测直线的原理。Hough变换检测直线时,为什么不采用y=kx+b的表示形式?
霍夫(Hough)变换是一种线描述方法。它可以将图像空间中用直角坐标表示的直线变换为极坐标空间中的点。
利用Hough变换法提取直线的基本原理是:把直线上点的坐标变换到过点的直线的系数域,通过利用共线和直线相交的关系,使直线的提取问题转化为计数问题。
因为y=kx+b不能包括斜率无穷大的特殊情况,而常用的直线变换方程为 为直线到原点的距离限定了直线的斜率。
4-5.区域的周长有不同的表示方法,试用链码表示的方法编写程序实现图像区域的周长。
function balianma_zhouchang %主函数
i=bwperim(imread('circles.png'),8);%求二值图像边界
c8=chaincode8(i);%生成8方向链码
sum1=0;
sum2=0;
for k=1:length(c8)
if c8(k)==0 ||c8(k)==2 ||c8(k)==4 ||c8(k)==6
sum1=sum1+1;
else
sum2=sum2+1;
end
end
l=sum1+sum2*sqrt(2)
function out=chaincode8(image) %被调函数,实现8连通链码
n=[0 1;-1 1;-1 0;-1 -1;0 -1;1 -1;1 0;1 1];
flag=1;
cc=[];%初始化输出链码
[x y]=find(image==1);
x=min(x);