疝气灯改远光还是近光:17.6 使用纹理滤波器分割图像(2) - 51CTO.COM

来源:百度文库 编辑:中财网 时间:2024/05/10 11:09:00

17.6 使用纹理滤波器分割图像(2)

http://book.51cto.com  2009-06-24 13:35  张强/王正林  电子工业出版社  我要评论()
  • 摘要:《精通MATLAB图像处理》第17章MATLAB图像分割实战,本章主要讲述了图像分割方面的7大实例,读者通过这些实例,能够熟练掌握MATLAB在图像分割方面的应用。本节为大家介绍使用纹理滤波器分割图像。
  • 标签:MATLAB  图像处理  精通MATLAB图像处理
  • Oracle帮您准确洞察各个物流环节

17.6  使用纹理滤波器分割图像(2)

分割后的图像目标区域显示为白色,跟原图像相比,图像顶部的纹理被过度分割,而底部的纹理则以一个整体被分割出来,可以使用bwareaopen函数提取图像的底部纹理,如图17-31左边图像所示。在这个图像中,分割出的边界并不光滑,并且含有很多孔洞,可以使用imclose函数对图像执行形态学关操作,处理后的图像如图17-31右边图像所示。

使用imfill函数对图像中的孔洞进行填充,填充后的图像如图17-32左边图像所示,跟原图像相比,生成的图像底部纹理并不完全吻合,可以使用这个图像对原图像顶部的纹理进行分割,得到的图像顶部纹理如图17-32右边图像所示。

  (点击查看大图)图17-31  图像的底部纹理   (点击查看大图)图17-32  图像的顶部纹理

使用entropyfilt进行滤波分割。

代码如下:

  1. E2 = entropyfilt(I2);%创建纹理图像  
  2. E2im = mat2gray(E2);%转化为灰度图像  
  3. figure; subplot(121)  
  4. imshow(E2im);%显示纹理图像  
  5. BW2 = im2bw(E2im,graythresh(E2im));%转化为二值图像  
  6. subplot(122); imshow(BW2)%显示二值图像  
  7. mask2 = bwareaopen(BW2,1000);%求取图像顶部的纹理掩膜  
  8. figure; imshow(mask2);%显示顶部纹理掩膜图像  
  9. texture1 = I; texture1(~mask2) = 0;%底部设置为黑色  
  10. texture2 = I; texture2(mask2) = 0;%顶部设置为黑色  
  11. figure; subplot(121)%显示图像顶部  
  12. imshow(texture1); subplot(122),   
  13. imshow(texture2);%显示图像底部  
  14. boundary = bwperim(mask2);%求取边界  
  15. segmentResults = I;  
  16. segmentResults(boundary) = 255;%边界处设置为白色  
  17. figure; imshow(segmentResults);%显示分割结果 

使用entropyfilt函数对图像进行滤波,求取纹理图像,如图17-33左边图像所示。选择合适的阈值将纹理图像转化为二值图像,如图17-33右边图像所示。

使用bwareaopen函数对图像进行开操作,得到图像顶部纹理的掩膜图像,如图17-34所示。

  图17-33  纹理图像和二值图像

  图17-34  图像顶部纹理的掩膜图像
分别提取图像的顶部纹理和底部纹理,如图17-35所示,其中左边图像为顶部纹理的图像,右边图像为底部纹理的图像。

上下两种纹理的边界线以白色显示,如图17-36所示。

  图17-35  图像的顶部纹理和底部纹理

  图17-36  图像纹理的边界

使用stdfilt和rangefilt进行滤波分割。

代码如下:

  1. S = stdfilt(I,nhood);%标准差滤波  
  2. figure; subplot(121)  
  3. imshow(mat2gray(S));%显示标准差滤波后的图像  
  4. R = rangefilt(I,ones(5));%rangefilt滤波  
  5. subplot(122); imshow(R);%显示rangefilt滤波后的图像 

除了使用entropyfilt函数,还可以使用stdfilt函数和rangefilt函数来达到类似的分离效果,分离的效果如图17-37所示,其中左边图像为使用stdfilt函数滤波后分割的图像,右边图像为使用rangefilt函数滤波后分割的图像。

  图17-37  stdfilt和rangefilt函数滤波分割的图像