资源描述:
《实验五 图像分割 (2)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验5图像分割实验目的:1.了解图像分割的基本理论和方法;2.掌握对图像进行点、线和边缘检测的方法;3.掌握阈值分割的方法和阈值的选择;4.熟悉区域生长法和分水岭分割算法实验内容:1.对图片lung2.bmp和加噪声的lung3.bmp分别用3*3的sobel算子、prewitt算子、log算子、canny算子进行处理,根据处理结果分析上述算子,分别是什么类型的?有何作用?思考一下如何设计算子。lung3.bmp为g=imnoise(f,”salt&pepper”,0.02)(0.02表示发生概率)答:lung2.bmp:>>f=imread
2、('lung2.bmp');>>[fs,ts]=edge(f,'sobel');>>[fp,tp]=edge(f,'prewitt');>>[fl,tl]=edge(f,'log');>>[fc,tc]=edge(f,'canny');>>subplot(2,3,1),imshow(f),title'原图',subplot(2,3,2),imshow(fs),title'sobel',subplot(2,3,3),imshow(fp),title'prewitt',subplot(2,3,4),imshow(fl),title'log',su
3、bplot(2,3,5),imshow(fc),title'canny';lung3.bmp:>>g=imnoise(f,'salt&pepper',0.02);>>[gs,tgs]=edge(g,'sobel');>>[gp,tgp]=edge(g,'prewitt');>>[gl,tgl]=edge(g,'log');>>[gc,tgc]=edge(g,'canny');>>subplot(2,3,1),imshow(g),title'噪音图',subplot(2,3,2),imshow(gs),title'sobel',subplot(
4、2,3,3),imshow(gp),title'prewitt',subplot(2,3,4),imshow(gl),title'log',subplot(2,3,5),imshow(gc),title'canny';Prewitt算子和Sobel算子提取边缘的结果差不多。Sobel算子在提取边缘的同时它对噪声具有平滑作用,能够抑制一定的噪声,sobel算子要比prewitt算子更能准确检测图像边缘。LOG算子是个二阶算子,在对图像进行差分运算之前,先对图像使用高斯低通滤波器进行平滑处理,以减少噪声,因此缓解了一般差分对噪声响应很敏感的问题,
5、但它对噪声过于敏感,使其使用大为受限。Canny算子提取的边缘最为完整,而且边缘的连续性很好,定位比较精确。但在实际工作应用中编程较为复杂且运算较慢。总的来说就是:Sobel算子、Prewitt算子的处理结果连续性不好,LOG算子的处理结果不精确,而Canny算子的处理结果更多更精确地保留了图像的边缘特征,具有较好的连续性2、(1)对图片lung.bmp用im2bw进行处理,其分割的阈值分别设为0.05,0.15和0.7,分析哪个效果好(结合图像的直方图)。>>f=imread('lung.bmp');>>g=im2bw(f,0.05);>>
6、g1=im2bw(f,0.15);>>g2=im2bw(f,0.7);>>subplot(4,2,1),imshow(f),title'原图',subplot(4,2,2),imhist(f),title'直方图',subplot(4,2,3),imshow(g),title'阈值0.05',subplot(4,2,4),imhist(g),title'直方图',subplot(4,2,5),imshow(g1),title'阈值0.15',subplot(4,2,6),imhist(g1),title'直方图',subplot(4,2,7)
7、,imshow(g2),title'阈值0.7',subplot(4,2,8),imhist(g2),title'直方图';(2)用全局阈值法或Otsu算法计算出合适的阈值。>>T=graythresh(f)T=0.1647>>T*255ans=42(3)对分割出来的二值图像运用所学的形态学知识,得到肺部图像。提示:如f为原图像,fillhole为处理后的二值图像(其中肺部为白色,其他为黑色),则以下语句可以得到原图中的肺部图像。f(fillhole==0)=255;%或f(fillhole==0)=0也可以>>f=imread('lung.
8、bmp');>>fillhole=im2bw(f,0.1647);>>fillhole=~fillhole;>>imshow(fillhole)>>f(fillho