读陶校长的演讲有感:Niblack---二值化算法 - cxf7394373的专栏 - CSDN博客

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 17:44:33
Niblack---二值化算法 收藏
Niblack二值化算法是比较简单的局部阈值方法,阈值的计算公式是T = m + k*v,其中m为以该像素点为中心的区域的平均灰度值,v是该区域的标准差,k是一个系数,matlab程序如下:view plaincopy to clipboardprint?
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);   
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);   上述程序中选择的窗口大小是5*5,处理结果不好,产生了大量的噪声... 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cxf7394373/archive/2010/08/04/5787908.aspx#