数字图像处理及应用MATLAB第4章习题答案.doc

数字图像处理及应用MATLAB第4章习题答案.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章:习题与思考题参考答案 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); imx=image(x,:); y=f

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档