1

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

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。这些似乎不是强度,所以当我试图让图像中的所有像素小于第二个平均值时,所有像素都通过了测试。我在这里缺少一些东西。谁能帮我根据高斯混合分割深蓝色和浅蓝色细胞。任何帮助表示赞赏!

4

1 回答 1

0

不能保证 sai.mu(1) < sai.mu(2) < 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)))
于 2013-04-24T00:40:42.923 回答