Niblack---二值化算法

申明,本文非笔者原创,原文转载自:http://blog.csdn.net/cxf7394373/article/details/5787908


Niblack二值化算法是比较简单的局部阈值方法,阈值的计算公式是T = m + k*v,其中m为以该像素点为中心的区域的平均灰度值,v是该区域的标准差,k是一个系数,matlab程序如下:

[c-sharp]  view plain copy
  1. I = imread('card3.bmp');  
  2. I = rgb2gray(I);  
  3.   
  4. w =  2;%     
  5. max = 0;     
  6. min = 0;     
  7. [m,n] = size(I);     
  8. T = zeros(m ,n );     
  9.     
  10. %  
  11. for i = (w + 1):(m - w)     
  12.     for j = (w + 1):(n - w)        
  13.         sum = 0;  
  14.         for k = -w:w     
  15.             for l = -w:w     
  16.                 sum = sum + uint32(I(i + k,j + l));  
  17.             end     
  18.         end     
  19.         average = double(sum) /((2*w+1)*(2*w+1));  
  20.         s = 0;  
  21.         for k = -w:w     
  22.             for l = -w:w     
  23.                 s = s +   (uint32(I(i + k,j + l)) - average)*(uint32(I(i + k,j + l)) - average);  
  24.             end     
  25.         end     
  26.         s= sqrt(double(s)/((2*w+1)*(2*w+1)));  
  27.           
  28.         T(i,j) = average + 0.2*s;  
  29.     end     
  30. end     
  31. for i =  1:m   
  32.     for j = 1:n   
  33.         if I(i,j) > T(i,j)     
  34.             I(i,j) = uint8(255);     
  35.         else    
  36.             I(i,j) = uint8(0);     
  37.         end     
  38.     end     
  39. end     
  40. imshow(I);    

上述程序中选择的窗口大小是5*5,处理结果不好,产生了大量的噪声...

你可能感兴趣的:(Niblack---二值化算法)