声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2012|回复: 0

[图像处理] Matlab中一种二值化图像的形态学操作程序

[复制链接]
发表于 2016-4-26 14:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
在Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的、且有灰度值含有大于th1的点的前景区域,而不需要小面积的区域(th1大于th2),这时会遇到这样的问题:当阈值选为th2时会把一些小面积区域也保留下来;若把阈值增大到th1,小面积的区域没了,但是原来大面积的区域又会减小;若要直接去掉阈值th2二值化图像中面积小于某一值的的区域,需要计算每个区域的面积,计算量大,而且有的区域中并没有含有大于th1的点。
下面利用数学形态学的方法来解决上述问题。
这里主要是采用数学形态学中的腐蚀与膨胀操作,采用均值滤波、灰度图像高阈值二值化、种子点选择、灰度图像低阈值二值化和选择滤波相结合的方法,具体来说:腐蚀过程采用均值滤波和高阈值对第一细分图像二值化,滤掉面积较小的区域,得到较大的区域,然后选择每个区域的种子点;膨胀过程采用低阈值对第一细分图像二值化,保留含有种子点的区域,其它的均过滤掉。
  1. wmf10=imread('mwf1.bmp');  %读取图像
  2. wmf1=wmf10(:,:,1);%由于是灰度图像,三个页面相同,故只对第一页面数据操作
  3. figure(1);
  4. subplot(121);imagesc(wmf1);colormap(gray);  %显示原图象
  5. h=fspecial('average',3);
  6. wmf1_filted=uint8(round(filter2(h,wmf1))); %均值滤波

  7. th1=0.94*max(max(wmf1)); %确定阈值th1
  8. wmf1th1=(wmf1_filted>th1);  %按阈值th1二值化

  9. [wmf1th1_label numth1_label]=bwlabel(wmf1th1,8);
  10. rc=zeros(2,numth1_label);  %选择种子点坐标
  11. for i=1:numth1_label
  12.     [r c]=find(wmf1th1_label==i);
  13.     rc(1,i)=r(2);rc(2,i)=c(2);
  14. end
  15. r=rc(1,:);
  16. c=rc(2,:);
  17. coe=1.4;
  18. th2=mean2(wmf1)+coe*std2(wmf1); %确定阈值th2
  19. wmf1th2=(wmf1>th2);  %按阈值th2二值化
  20. wmf1th2_select=bwselect(wmf1th2,c,r,8); %保留含有种子点的前景区域
  21. subplot(122);imagesc(wmf1th2_select);colormap(gray);
复制代码


回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-15 11:51 , Processed in 0.064157 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表