我有一个池塘的图像(草、边缘的岩石、水)。我想使用 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。
是否有任何可用的 Python 包或函数可以将 GMM 拟合到更高维度的数据?
最佳答案
因此,我需要做的就是在 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 种不同类型的 Material (岩石、草、水)。
关于python - 如何使用高斯混合模型按波长分割图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44315352/