灰度化
在RGB模型
中,当R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值(又称强度值、亮度值),灰度范围为0-255
。获取每个像素点的灰度值有以下几种方式:
1. 分量法
将图像中的三分量的亮度作为三个灰度值,可根据应用需要选取一种灰度值。
2. 最大值法
将图像中的三分量亮度的最大值作为灰度值。
3. 平均值法
将图像中的三分量亮度求平均得到一个灰度值。
4. 加权平均法
根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对红色敏感较低,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度值。
二值化
对RGB彩色图像灰度化以后,扫描图像的每个像素值,将值小于阈值的
将像素值设为0(黑色),将值大于等于阈值
的像素值设为255(白色)。**阈值
可以根据灰度直方图
按照特定的数学方法
获取。可参考大神Imageshop的算法。
灰度直方图
灰度图像由不同灰度值的像素组成,灰度图像中灰度值的分布是该图像的一个重要特征。
图像的灰度直方图就描述了图像中灰度值分布情况,能够很直观的展示出图像中各个灰度值所占的多少。图像的灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率。
计算阈值
1、灰度平局值值法
描述
即使用整幅图像的灰度平均值作为二值化的阈值,一般该方法可作为其他方法的初始猜想值。
- 原理
- 实现代码
1 | public static int GetMeanThreshold(int[] HistGram) { |
2、百分比阈值(P-Tile法)
描述
Doyle于1962年提出的P-Tile (即P分位数法)可以说是最古老的一种阈值选取方法。该方法根据先验概率来设定阈值,使得二值化后的目标或背景像素比例等于先验概率,该方法简单高效,但是对于先验概率难于估计的图像却无能为力。
- 实现代码
1 | /// <summary> |
3、基于谷底最小值的阈值
描述
此方法实用于具有明显双峰直方图的图像,其寻找双峰的谷底作为阈值,但是该方法不一定能获得阈值,对于那些具有平坦的直方图或单峰图像,该方法不合适。
- 实现代码
1 | public static int GetMinimumThreshold(int[] HistGram) { |
其中IsDimodal函数为判断直方图是否是双峰的函数,代码如下:
1 | private static bool IsDimodal(double[] HistGram) // 检测直方图是否为双峰的 |
4、基于双峰平均值的阈值
描述
该算法和基于谷底最小值的阈值方法类似,只是最后一步不是取得双峰之间的谷底值,而是取双峰的平均值作为阈值。
- 参考代码
1 | public static int GetIntermodesThreshold(int[] HistGram) { |
5、迭代最佳阈值
描述
该算法先假定一个阈值,然后计算在该阈值下的前景和背景的中心值,当前景和背景中心值得平均值和假定的阈值相同时,则迭代中止,并以此值为阈值进行二值化。
实现过程
(1)求出图象的最大灰度值和最小灰度值,分别记为gi和gu,令初始阈值为:
(2) 根据阈值T0将图象分割为前景和背景,分别求出两者的平均灰度值Ab和Af:
(3) 令
如果Tk=Tk+1,则取Tk为所求得的阈值,否则,转2继续迭代。
参考代码
1 | public static int GetIterativeBestThreshold(int[] HistGram) { |
1 |
|