ImageJ中图像二值化方法介绍
概述
二值图像分析在对象识别与模式匹配中有重要作用,同时也在机器人视觉中也是图像处理的关键步骤,选择不同图像二值化方法得到的结果也不尽相同。本文介绍超过十种以上的基于全局阈值的图像二值化方法,其中最大值为255表示白色, 0 表示黑色,H表示图像直方图。imageJ重要开源分支Fiji中已经实现了全局自动阈值16种方法。
ImageJ演示
首先来看一下原图,是一张人体细胞组织的图像,显示如下:
各种二值化方法生成的对应的二值图像图像显示如下:
迭代方法:
默认方式是通过迭代方法来求取阈值T,通过假设阈值T来分割图像为两部分,对各个部分求取均值M1与M2假设T' = (M1 M2) 不等于T则令T= T'然后继续迭代直到两者相等。
Huang阈值分割法:
方法来自于Huang L-K & Wang M-JJ模式识别论文《ImageThresholding By minimizing the measure of fuzziness》具体可以自己看论文。
InterModes阈值分割:
该方法假设直方图是一个双峰模式的直方图,对直方图使用平滑滤波迭代多次,知道只剩下两个最大的峰J与K则阈值为T=(J K)/2, 如果图像形成直方图只会有一个单峰或者有大片平坦区域的时候,该方法不太适合。
IsoData阈值分割:
该方法基于Ridler, TW&Calvard的论文《Picture thresholding using an iterative selection method》该方法通过给定一个随机阈值假设127把图像分为对象与背景进行分割,计算两部分的均值,不断迭代,直到阈值大于复合均值为止。最终阈值为:阈值 = (背景像素均值 对象像素均值)/2。感兴趣可以自己看Paper。
Li阈值分割:
基于Li的最小交叉熵阈值迭代方法,感兴趣者可以看论文《Minimum CrossEntropy Thresholding》了解更多细节。
MaxEntropy(最大熵值分割):
基于Kapur-Sahoo-Wong的《Maximum Entropy thresholdingmethod》方法实现该算法,ImageJ Fiji中已经实现。
均值方法分割:
使用灰度图像计算所有像素值的均值作为阈值实现图像二值化分割方法。
MinError(最小错误):
迭代算法基于Kittler与Illingworth的最小错误阈值分割方法,初始开始迭代的阈值为均值。除了ImageJ中已有实现,此方法在MATLAB中也有实现。
Minimum(最小阈值):
该方法类似于中间帧模式(InterModes),都是假设直方图有两个波峰,通过均值平滑滤波最终得到两个本地最大的波峰,阈值等于yt-1>yt<=yt 1。该方法主要用于细胞图像分析,相关论文见《TheAnalysis of cell images》。MATLAB中同样也实现了该方法。
Moments(几何矩阈值):
该方法是根据Tsai.W的论文《Moment-preserving thresholding: anew approach》
Otsu阈值
Otsu主要是图像直方图进行阈值分类,从0~255之间,然后求它们的最小内方差对应直方图灰度索引值作为阈值实现图像二值化,OpenCV中已经实现,而且是OpenCV2.x全局阈值二值化方法。
Percentile阈值
该方法假设前景像素ptile=0.5,然后对直方图按照灰度强度从0~255作为每个阈值分割通过迭代寻找最小比重值,最终得到阈值T。
RenyiEntropy(雷尼熵阈值分割)
跟最大熵值方法类似,唯一不同是用Renyi熵计算公式取代广义熵值公式。
最大熵值为:
其中q取值不同决定阈值不同。通常q取1或者2。
Shanbhag(阈值分割)
该方法同样是基于直方图熵值实现的阈值分割方法。具体可以参考《Utilization of information measure as a means of image thresholding》了解原理。
Triangle(三角阈值分割)
该方法是假设直方图只有一个波峰(单峰直方图)使用如下方法求得最大距离对应的直方图灰度值即为阈值。OpenCV在其3.x版本中已经实现该方法。
Yen(阈值分割)
该方法是基于直方图数据的最大相关条件实现的二值图像分割方法。
16种方法Java源代码实现下载地址:
https://github.com/fiji/Auto_Threshold
是不是点击收藏以备项目需要,这么全的总结可以说2016再也没机会出现了,【OpenCV学堂】2017将继续分享有用的图像处理与机器学习知识。