Otsu的全局阈值处理实现

基本介绍

为了克服图像噪声对图像分割结果的影响,利用图像中与像素具有相似邻域结构的像素提取当前像素的非局部空间信息,构造了基于像素的灰度信息和非局部空间灰度信息的二维直方图,并将此二维直方图引入到Otsu曲线阈值分割法中,提出了基于灰度和非局部空间灰度特征的二维Otsu曲线阈值分割法。最小时即为分割的最佳阈值(minimizes the weight  within class variance. ) 这个就意味着当取阀值为t时,前景和背景的方差加权和最小,即前景和背景每部分的像素都比较平稳。

参考代码

function th=thresh_md(a);   
   x=imread(a);   
   a=rgb2gray(x);   
   subplot(211);  
   imshow(a,[]);    
   [m,n]=size(a);   
   N=m*n;   
   L=256;   
     
for i=1:L  
    count(i)=length(find(a==(i-1)));  
    f(i)=count(i)/(N);  
end  
  
for i=1:L   
    if count(i)~=0   
        st=i-1;   
        break;   
    end   
end   
for i=L:-1:1   
    if count(i)~=0   
        nd=i-1;   
        break;   
    end   
end   

p=st;   q=nd-st;   
u=0;   
for i=1:q   
    u=u+f(i)*(p+i-1);     
    ua(i)=u;              
end;   
   
for i=1:q   
    w(i)=sum(f(1:i));    
end;   
  
w=w+0.0001;  
   
d=(u*w-ua).^2./(w.*(1-w));   
[y,tp]=max(d);     
th=tp+p;   
  
for i=1:m   
    for j=1:n   
        if a(i,j)>th   
            a(i,j)=0;   
        else   
            a(i,j)=255;   
        end   
    end   
end    
subplot(212);  
imshow(a,[]);
输出结果:

Otsu的全局阈值处理实现_第1张图片 Otsu的全局阈值处理实现_第2张图片


关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博和新浪微博songzi_tea.


你可能感兴趣的:(【MATLAB/SCILAB】,【Image,Engineering】)