http://download.csdn.net/detail/dayenglish/8384547
代码下载请到上面的资源页面。
整个代码的思想是利用混合高斯模型计算出每个像素属于K个高斯模型中某一个的概率值,利用这个概率值取代原来的像素值达到分割图像的目的,实质是通过像素的聚类达到分割的目的。因为需要根据高斯模型求得某一个像素的概率值,因此第一步就是建立高斯模型。至于建多少个高斯模型需要手工指定,建立的高斯模型混合起来用于拟合像素原来的直方图分布——以类似于核密度估计的方式进行拟合。不过由于是多个高斯模型对直方图进行拟合,因此涉及到求每一个高斯模型的平均值和方差的问题,以及每个高斯模型对一个像素的概率位多少。(如果只有一个高斯模型,直接求得平均值和方差就对图像直方图进行了很好的拟合)。
function[h]=histogram(datos)
datos=datos(:);
ind=find(isnan(datos)==1);
datos(ind)=0;
ind=find(isinf(datos)==1);
datos(ind)=0;
tam=length(datos);
m=ceil(max(datos))+1;
h=zeros(1,m);
for i=1:tam,
f=floor(datos(i));
if(f>0 & f<(m-1))
a2=datos(i)-f;
a1=1-a2;
h(f) =h(f) + a1;
h(f+1)=h(f+1)+ a2;
end;
end;
h=h/sum(h);
</