改进的OTSU算法处理光照不均匀图像

前言


一、基于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


代码如下(示例): 

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(r - kernelSize, w - kernelSize);
            if (Mask.at(r, w) != 0)//明亮区域
            {
                if (pixelValue > Otsu1*0.9)
                {
                    result.at(r - kernelSize, w - kernelSize) = 255;
                }
            }
            else if (Mask.at(r, w) == 0)//阴暗区域
            {
                if (pixelValue > Otsu2)
                {
                    result.at(r - kernelSize, w - kernelSize) = 255;
                }
            }
        }
    }

三、算法处理效果

改进的OTSU算法处理光照不均匀图像_第1张图片改进的OTSU算法处理光照不均匀图像_第2张图片

总结

你可能感兴趣的:(图像处理实战,opencv,算法,计算机视觉)