Sim*_*ing 5 matlab image-processing gaussian
我在直方图中有一个具有多元高斯分布的图像。我想将图像分割为两个区域,以便它们都可以遵循正态分布,如直方图中显示的红色和蓝色曲线。我知道高斯混合模型可能适用于此。我尝试使用 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)
Run Code Online (Sandbox Code Playgroud)
您显示直方图的方式不能很好地代表检测到的分布。
histogram
是频率计数这两个小的变化表明您实际上获得了非常好的分布拟合。
histogram(cluster1,0:.01:1); hold on;
histogram(cluster2,0:.01:1);
Run Code Online (Sandbox Code Playgroud)
如果您将集群视为独立分布,则一旦您拥有集群,您就可以平滑两个分布合并的尾部。
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);
Run Code Online (Sandbox Code Playgroud)