基于高斯混合的分割

时间:2013-04-23 23:52:23

标签: matlab gaussian image-segmentation

我有四种不同颜色的图像 - 深蓝色,浅蓝色,更浅蓝色 - 背景和白色 - 背景。我只想细分前两个类别

bG= mat2gray(image);
his=imhist(bG);
sai = gmdistribution.fit(his,4);
m1=sai.mu(1);
v1=sai.Sigma(1);
m2=sai.mu(2);
v2=sai.Sigma(2);

imt=bG<m2+v2;
figure;
imagesc(~imt);

我得到一个包含所有像素的图像1. bG图像矩阵的值小于1,但每个高斯的均值和方差更高。

据我所知,bG是一个图像矩阵,因此具有强度值。所以这里的所有值都小于1.

但是四个高斯的手段是:0.8604 0.976 2.9182 6.6377。这些似乎不是强度,因此当我试图使图像中的所有像素小于第二平均值时,所有像素都通过了测试。我在这里缺少一些东西。任何人都可以根据高斯混合物帮助我分割深蓝色和浅蓝色细胞。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

无法保证sai.mu(1)&lt; sai.mu(2)&lt; sai.mu(3)等所以你知道mu(2)可以对应白色,在这种情况下m2 + v2将大于1,并且所有像素都将通过测试。我只想使用sai.cluster(bG(:)),找到两个最低的mus,并连接对应于两个最小的mus的簇,如下所示:

sai = gmdistribution.fit(his,4);

mus = [sai.mu(1),sai.mu(2),sai.mu(3),sai.mu(4)];
[~,sortmus] = sort(mus);

clusters = sai.cluster(bG(:));
bGclustered = clusters == sortmus(1) | clusters == sortmus(2);

subplot(1,2,1);
imagesc(bG)
subplot(1,2,2);
imagesc(reshape(bGclustered,size(bG)))