我有一个池塘的图像(草,边缘的岩石,水)。我想使用GMM作为无监督分类器将图像分割成草,岩石和水。
图像是具有形状(800,800,4)的numpy阵列的形式,其中每个像素包含4个波长的强度数据。例如,像素x = 1 y = 1具有对应于波长[450,500,600,700]的强度数据[1000,2000,1500,4000]。
我尝试使用scikit-learn来适应GMM:
gmm=GaussianMixture(n_components=3, covariance_type="tied")
gmm=gmm.fit(data)
但是,我收到一条错误消息,指出数据的预期维度应小于或等于2.
是否有可用的GM包或函数可以使GMM适应更高维度的数据?
答案 0 :(得分:2)
所以我需要做的就是在x,y维上折叠数组,GMM.fit
方法接受我的数组输入。原始数据格式为(800,800,4),我将其重新整形为(800 * 800,4)数组。
GMM拟合和聚类的代码如下:
newdata = img_data.reshape(800*800, 4)
gmm = GaussianMixture(n_components=3, covariance_type="tied")
gmm = gmm.fit(newdata)
cluster = gmm.predict(newdata)
cluster = cluster.reshape(800, 800)
imshow(cluster)
我之所以选择n_components=3
,是因为我期待分割3种不同类型的材料(岩石,草,水)。