python - 如何使用高斯混合模型按波长分割图像?

标签 python image-processing machine-learning scikit-learn cluster-analysis

我有一个池塘的图像(草、边缘的岩石、水)。我想使用 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/

相关文章:

Python APScheduler - AsyncIOScheduler 如何工作?

image - Matlab图像插值interp2()

python - 神经网络中预测数据的反规范化

python - NLTK最大熵分类器原始分数

python - Python 3.x 中匹配此类字符串的正则表达式

python - 紧随其后提取子字符串 - 在 Python 中

python - math.floor(N) 与 N//1

c# - 如何将 ISampleGrabber::BufferCB 的缓冲区转换为位图

matlab - 霍夫变换 : Converted polar coordinates back to Cartesian, 但仍然无法绘制它们

matlab - 在 matlab 中创建径向基函数核矩阵