gpt4 book ai didi

matlab - 在 Matlab 中,如何划分多元高斯分布以分离高斯分布?

转载 作者:太空宇宙 更新时间:2023-11-03 20:03:35 24 4
gpt4 key购买 nike

我有一个在直方图中具有多元高斯分布的图像。我想将图像分割成两个区域,以便它们都可以遵循正态分布,如直方图中显示的红色和蓝色曲线。我知道高斯混合模型可能适用于此。我尝试使用 fitgmdist 函数,然后对这两个部分进行聚类,但仍然效果不佳。任何建议将不胜感激。 enter image description here enter image description here enter image description here enter image description here

下面是我的方法的 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)

最佳答案

你的解决方案是正确的

您显示直方图的方式不能很好地代表检测到的分布。

  1. 归一化 bin 大小,因为 histogram 是频率计数
  2. 使轴限制一致(或在同一轴上绘制)

这两个小变化表明您实际上获得了非常好的分布拟合。

histogram(cluster1,0:.01:1); hold on;
histogram(cluster2,0:.01:1);

Hists

为每个集群重新拟合高斯曲线

如果您将集群视为独立的分布,则在拥有集群后,您可以平滑两个分布合并处的尾部。

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);

Gaussian

关于matlab - 在 Matlab 中,如何划分多元高斯分布以分离高斯分布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com