基本全局阈值处理

 基本全局阈值处理

选取阈值的一种方法就是图像直方图的视觉检测。例如,图10-12(a)中的直方图有两个截然不同的模式;很容易选择阈值T来分开它们。选择T的另一个方法是反复实验,选取不同的阈值,直到观测者觉得产生了较好的结果为止,这在交互环境下特别有效。例如,这种方法允许使用者通过widget(图形控制)改变阈值,就像游标一样,可以立即看见结果。

通常,在图像处理中首选的方法是使用一种能基于图像数据自动地选择阈值的算法,为了自动选阈值,下列迭代过程采用的就是这样的方法:

(1) 针对全局阈值选择初始估计值T。

(2) 用T分割图像。这会产生两组像素:G1由所有灰度值大于T的像素组成,G2由所有灰度值小于等于T的像素组成。

(3) 分别计算G1、G2区域内的平均灰度值m1和m2。

(4) 计算出新的阈值:

(5) 重复步骤(2)~(4),直到在连续的重复中,T的差异比预先设定的参数△T小为止。

(6) 使用函数im2bw分割图像:

 
 
  1. g = im2bw(f, T/den) 

其中,den是整数(例如一幅8比特图像的255),是T/den比率为1的数值范围内的最大值,正如函数im2bw要求的那样。

在速度成为重要问题时,参数△T用于控制迭代次数。通常,△T越大,算法执行的迭代次数越少。这可以得到证明,假如初始阈值在图像中的最大和最小灰度值之间选择(平均图像灰度对T来说是不错的选择),那么算法在有限的步数内收敛。根据分割,在涉及物体和背景的直方图模式之间有相当清楚的谷的情况下,算法会工作得很好。我们以下边的例子来说明在MATLAB中如何执行这个过程。

例10.7  计算全局阈值

刚才讨论的基本迭代方法可按如下方式来执行,其中的f是图10-13(a)中的图像:

 
 
  1. >> count = 0;  
  2. >> T = mean2(f);  
  3. >> done = false;  
  4. >> while ~done  
  5.       countcount = count + 1;  
  6.       g = f > T;  
  7.       Tnext = 0.5*(mean(f(g)) + mean(f(~g)));  
  8.       done = abs(T - Tnext) < 0.5;  
  9.       T = Tnext;  
  10. end  
  11. >> count  
  12. count =  
  13.       2 
  14. >> T  
  15. T =  
  16.       125.3860  
  17. >> g = im2bw(f, T/255);  
  18. >> imshow(f) % Fig. 10.13(a).  
  19. >> figure, imhist(f) % Fig. 10.13(b).  
  20. >> figure, imshow(g) % Fig. 10.13(c). 

算法仅需两步迭代就可收敛,并且得到的阈值接近灰度级的中点。可以期待清晰的分割,因为直方图中的模式之间有很宽的分开度。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值