【问题标题】:In Matlab, How to divide multivariate Gaussian distributions to separate Gaussians?在Matlab中,如何划分多元高斯分布以分离高斯?
【发布时间】:2017-11-24 17:06:39
【问题描述】:

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

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

【问题讨论】:

  • 代码中的temp 是什么?
  • @BrendanFrick 抱歉 temp 只是我的一维图像像素。为了清楚起见,我将 temp 更改为等于 I(:) 的数据

标签: matlab image-processing gaussian


【解决方案1】:

你的解决方法是正确的

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

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

这两个小的变化表明你实际上得到了一个很好的分布拟合。

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

【讨论】:

  • 非常感谢布伦丹的帮助。我这里还有一个问题。我对 Matlab 中的 fitdist 函数知之甚少,我的问题是如果数据本身是倾斜的,我们还能在该数据上拟合正态分布吗?我的意思是,此时使用 fitdist 是否足够公平?
  • 另外,对于 pdf 图,y 轴单位(最大 10)是什么意思?我正在处理另一个数据,但发现 pdf 图上两个峰值的比率与原始直方图不同。这是我们可以将 pdf 图再次转换为直方图的任何方式,其中 y 是像素计数频率?谢谢!
  • 问题在于fitgmdist() 计算了一个非常窄的分布以使其更加健壮(达到没有重叠的程度)。当我们扩大范围以包括分布重叠时,我们无疑包括了非正态收敛的偏斜。然而,如果我们能够用fitgmdist(), 识别高斯分布,我们可以假设每个分布都足够健壮,即使有尾噪声也可以半准确地重新识别。您可以随时检查fitgmdist() 分布和fitdist() 中的均值,看看结果是否相同。
  • 我认为你可以标准化 (y1 = y1./sum(y1)) 和缩放 (y1 = y1.*numel(I(:)))
  • 谢谢布伦丹!抱歉,我可能理解得很慢,但峰值(频率)仍然不同。以此为例,如果我使用 imhist(I(:)),峰值在 900 和 345 左右,但在 pdf 上它将是 9000 和 2000。让我知道。再次感谢!
【解决方案2】:

您是如何尝试使用这个“模型”的?如果数据是恒定的,那为什么不分别测量两个高斯的均值/方差呢?

如果您试图从这种混合分布中生成新值,那么您可以研究一个混合模型,其中对上述每个分布都赋予了权重。

【讨论】:

  • 因为两个高斯已经混合了tegther,所以我不能直接分别测量它们的均值/标准差。所以我需要把曲线分开~
猜你喜欢
  • 2019-07-15
  • 1970-01-01
  • 2012-09-12
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多