前言
无
一、基于OTSU处理不均匀光照图像改进算法
为解决不均匀光照下图像二值化问题,提出一种基于最大类间方差法(OTSU算法)的改进二值化算法,将图片分为明亮区域和阴暗区域两部分,分别计算两部分最大类间方差对应的阈值,通过分析阴暗区域特征,判断每一像素点位于明亮区域还是阴暗区域,从而确定每一点的阈值。实验结果表明,该算法可以解决OTSU算法处理光照不均匀图像丢失信息问题,可广泛应用于光照不均匀条件下的文本图像二值化处理,针对特殊情况较好,相对于其他算法适用性更强。
注明:算法想法来自文献:刘明兴,刘泽平,李斌,符朝兴,孟含所著的基于OTSU处理不均匀光照图像改进算法研究
二、算法原理
1.利用OTSU算法计算照片明亮处的最大间类方差
假设整副图像最大类间方差对应的阈值为T1,在计算时,虽然考虑了阴暗处像素的灰度值,但对明亮处二值化效果影响不大,为了减少输入参数,把T1作为图像明亮处的阈值。
Otsu1 = thresh_otsu(src, 256);//T1 = Otsu1
2.利用OTSU算法照片阴暗处的最大间类方差
对图像阴暗处再次利用OTSU算法计算其最大间类对应的阈值T2。
Otsu2 = thresh_otsu(src, Otsu1);//T2 = Otsu2
3.判断像素点所处区域
利用OTSU算法,2次处理光照不均匀图片,可以得到图片明亮处及阴暗处二值化合适的阈值,因此,只要确定像素点处于明亮处还是阴暗处,就可以确定该像素点的阈值。位于阴暗区域内部的点,其周围一定范围内的点的灰度值都小于T1,因此,比较(x,y)点的周围(h×w)各点与阈值T1的大小关系,确定该点是否位于阴暗区域内部。
计算 h*w 区域内 B(x,y)灰度值和Sum,若Sum值大于a*255*h*w(0<a<1),说明点(x,y)周围 h*w 区域内至少有 a*h*w 个点的灰度值大于 T1 ,该点处于明亮区域或明暗交界处,阈值取T1,否则该点阈值为T2。通过上述得到改进后的OTSU算法。选取 h=17,w=17,a=0. 2
代码如下(示例):
int ThreshldValue = 0.2 * 255;
threshold(Mask, Mask, ThreshldValue, 255, THRESH_BINARY);
4.改进OTSU算法明暗边界处噪点的去除
去除光暗交界处的噪声后,二值化结果将大大提高。边缘痕迹多出现在光暗交界处的明亮背景区域。噪点所在像素点的灰度值小于阈值T1,但灰度值明显大于明亮处内容部分阈值,因此将T1降低作为明亮处的阈值,即β*T1作为阈值,其中0<β<1。当h=17,w=17,a=0. 2,β=0.9时,得到改进OTSU并去噪算法。
代码如下(示例):
for (int r = kernelSize; r < Mask.rows - kernelSize; r++)
{
for (int w = kernelSize; w < Mask.cols - kernelSize; w++)
{
int pixelValue = src.at<uchar>(r - kernelSize, w - kernelSize);
if (Mask.at<uchar>(r, w) != 0)//明亮区域
{
if (pixelValue > Otsu1*0.9)
{
result.at<uchar>(r - kernelSize, w - kernelSize) = 255;
}
}
else if (Mask.at<uchar>(r, w) == 0)//阴暗区域
{
if (pixelValue > Otsu2)
{
result.at<uchar>(r - kernelSize, w - kernelSize) = 255;
}
}
}
}
三、算法处理效果
总结
无