sauvola算法java写法,图像分割

图像阈值分割无论在视觉检测领域还是在识别领域都是一个非常关键一步。由于项目的需要最近要对图像分割进行一个研究。图像分割中的阈值包括Global threshold和Local threshold,对于Global threshold 目前比较成熟,比较好的包括OTSU,迭代方法选取阈值,直方图迭代等都是比较好的自适应阈值方法,但是Global threshold有个比较大的缺点是当遇到光照不均(illumination)或噪声严重时,比如一些低分辨率的文档图像,其效果不理想。

下面主要介绍Local threshold的一些算法;

一、Bensen的算法

Bersen的算法很简单,是通过计算局部窗口内最大maxVal和最小minVal灰度值,然后计算出阈值 T

T  = (maxVal + maxVaL)/ 2

缺点也很明显,分割后的图像背景区域会出现很多噪声干扰。

二、Niblack的算法

Niblack算法的主要思想是:通过计算窗口的平均值 m 和方差 s来估算当前像素的阈值。通过公式描述

6597582139075698853.jpg

k取 0.2 ~ 0.5,由于是在局部窗口内计算出来的结果,不可避免分割后的图像会在背景去产生很多噪声干扰。

matlab 程序如下

I = imread(‘card3.bmp‘);

I = rgb2gray(I);

w =  2;%

max = 0;

min = 0;

[m,n] = size(I);

T = zeros(m ,n );

for i = (w + 1):(m - w)

for j = (w + 1):(n - w)

sum = 0;

for k = -w:w

for l = -w:w

sum = sum + uint32(I(i + k,j + l));

end

end

average = double(sum) /((2*w+1)*(2*w+1));

s = 0;

for k = -w:w

for l = -w:w

s = s +   (uint32(I(i + k,j + l)) - average)*(uint32(I(i + k,j + l)) - average);

end

end

s= sqrt(double(s)/((2*w+1)*(2*w+1)));

T(i,j) = average + 0.2*s;

end

end

for i =  1:m

for j = 1:n

if I(i,j) > T(i,j)

I(i,j) = uint8(255);

else

I(i,j) = uint8(0);

end

end

end

imshow(I);

三、Sauvola的算法

Sauvola算法是在Niblack上的改进

6598074720284734354.jpg

m代表窗口内的平均灰度,R为全局标准方差的最大值,一般R=128,k取 0.2 ~ 0.5,s为当前窗口的方差。

Sauvola算法在背景和前景对比度较高时分割效果较好,比如字符分割中字符灰度值为0,背景值为255,其分割具有较好的效果。如果前景和背景对比度较差,则分割效果不佳。

四、Christian(or Wolf)的算法

克服Sauvola的算法的缺点,Christian的方法对窗口内的灰度均值和方差进行规范化,新的算法公式描述如下:

6597431505982387359.jpg

其中,M为全图图像最小灰度值,m代表窗口内的平均灰度,R为所有局部窗口的最大值标准方差值,k取0.5,,改方法与前两种Local threshold方法相比,效果最好。对于背景和前景对比度不高的情况改方法效果较好,但是由于R和M的值来源于全局图像,图像中一个小的噪声都会对R和M产生较大影响,另外当不同区域的光照不均太厉害也会对阈值分割产生较大的影响,所以降低了局部阈值的稳定性。

五、Meng-Ling Feng的算法

针对来Christian的算法存在的问题,来自南洋理工大学的Feng等同学,提出的新的算法。Feng增加了第二Local windows,R的计算在第二Local windows中进行,而不是在全局图像中计算,提高了抗光照不均的能力,并且方法中采用5x5的中值滤波提高算法的抗噪能力。公式描述如下:

6598092312470781493.jpg

其中

6597548054215244742.jpg

根据经验,

6597933982796602606.jpg

六、实验结果

6598167079261477978.jpg

原文:http://www.cnblogs.com/lqs19881030/p/4174247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值