我在直方图中有一个多变量高斯分布的图像。我想将图像分割成两个区域,这样它们都可以跟随正态分布,如直方图中显示的红色和蓝色曲线。我知道高斯混合模型可能适用于此。我尝试使用fitgmdist函数然后聚类这两个部分,但仍然不能正常工作。任何建议将不胜感激。
以下是我的appraoch的Matlab代码。
% Read Image
I = imread('demo.png');
I = rgb2gray(I);
data = I(:);
% Fit a gaussian mixture model
obj = fitgmdist(data,2);
idx = cluster(obj,data);
cluster1 = data(idx == 1,:);
cluster2 = data(idx == 2,:);
% Display Histogram
histogram(cluster1)
histogram(cluster2)
答案 0 :(得分:4)
显示直方图的方式不佳代表检测到的分布。
histogram
是频率计数这两个小小的变化表明你实际上已经获得了相当不错的发行版。
histogram(cluster1,0:.01:1); hold on;
histogram(cluster2,0:.01:1);
如果您将群集视为独立分发,则可以平滑两个分布合并的尾部。
gcluster1 = fitdist(cluster1,'Normal');
gcluster2 = fitdist(cluster2,'Normal');
x_values = 0:.01:1;
y1 = pdf(gcluster1,x_values);
y2 = pdf(gcluster2,x_values);
plot(x_values,y1);hold on;
plot(x_values,y2);
答案 1 :(得分:-2)
你是如何尝试使用这个'模型'的?如果数据是恒定的,那你为什么不测量两个高斯的平均值/方差呢?
如果你试图从这个混合分布中生成新值,那么你可以查看一个混合模型,其中给出了上述每个分布的权重。