利用中值滤波的方法对图像进行平滑处理,函数如下
fig_med = medfilt2(fig,[m,n]) % 对矩阵[m,n]进行中值滤波
利用类间方差阈值算法对滤波处理后图像进行分割处理,获取分割图像; 子函数如下所示:
function[threshold]=Ostu(fig) s=256^2; N=zeros(256,1); %-----------各个灰度值出现次数 T=zeros(256,1); for k=0:255 %-----------各个灰度值出现次数计数 num=size(find(fig==k),1); N(k+1,1)=num; end for t=1:256 w0=0; w1=0; u0=0; u1=0; for m=1:t w0=w0+N(m,1)/s; u0=u0+(m-1)*N(m,1)/s; end for m =t:256 w1=w1+N(m,1)/s; u1=u1+(m-1)*N(m,1)/s; end u0=u0/w0; u1=u1/w1; T(t,1)=w0*w1*(u1-u0)^2; end threshold=find(T==max(max(T)))-1; end笔者做了一个GUI界面,可以输入任意m,n值来改变中值滤波的效果。
原图:
效果如下: