谭升
非主流人工智能科学家 我和外面那些妖艳的货不一样

【数字图像处理】7.4:灰度图像-图像分割 阈值处理之谷底阈值、峰顶平均

废话开始,这篇介绍两种基于直方图的方法,前面介绍的几种阈值处理方法,可以使用直方图作为处理工具,也可以不使用直方图,直接操作图像也可以,不过建议使用直方图,因为直方图只进行一次计算,免去后续多次的访问全图像素。
今天介绍的算法有意个前提条件,就是直方图必须是一个双峰图,我们通过找到双峰之间的谷底,或者双峰值的平均值作为阈值。
其次是对直方图进行加工,怎么加工?平滑,通过对直方图的平滑使不标准的直方图变得平滑,最终达到双峰的效果。

算法描述

算法过程详解
1. 计算图像直方图
2. 使用$\frac{1}{4}[1,2,1]$平滑直方图,直到直方图平滑成双峰图。
3. 计算直方图的一阶导数,按照符号(正负)将一阶导数“格式化”–一阶导数大于0的设置为1,等于0的设置为0,小于0的设置为-1
4. 寻找峰顶和谷底,从1 -> 0 -> -1的为峰顶从-1 -> 0 -> 1的为谷底
5. 谷底为阈值,或者使用双峰的峰值的平均值作为阈值,进行阈值处理。
解释下第2步,如何判断是否是双峰,同样使用第3步的方法,得出“格式化”的直方图,如果整个“格式化”直方图的模式是:
1,1,1,1,1,1,1,0,(0,0,0,0)-1,-1,-1,-1,-1,-1,-1,0(0,0,0,0),1,1,1,1,1,1,1,1,1,0(0,0,0,0)-1,-1,-1,-1,-1,-1,-1
满足这种模式的直方图就是一个双峰图,否则不是。粗体处为谷底。
本算法难度不大,所以直接上代码。

代码实现

上面包括谷底阈值和双峰平均值的阈值处理

结果观察

原图:

直方图和平滑后的直方图,以及格式化的直方图:

阈值处理结果

原图

直方图和平滑后的直方图,以及格式化的直方图:

阈值处理结果

结论

针对双峰图像的谷底阈值和峰顶平均阈值算法是纯粹的基于直方图的阈值处理方法,本算法对图像的唯一要求是原直方图是双峰的,或者经过平滑可以形成双峰的,这样就可以利用一阶导数得到谷底和峰顶位置,找到合适的阈值进行阈值处理,本算法对噪声不敏感,但鲁棒性不好,容易无法给出阈值。所以需要谨慎使用。
待续。。。

Share

You may also like...

说点什么

avatar
  Subscribe  
提醒

由于博客移至wordpress,部分公式和代码显示不正常,博主正在努力修改,如发现公式显示错误,请及时在文章下留言,感谢您的帮助,尽请原谅!