首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的聚类-图像聚类

Python中的聚类-图像聚类
EN

Stack Overflow用户
提问于 2017-04-03 13:32:48
回答 2查看 4.5K关注 0票数 3

我想使用K均值或其他算法对图像进行聚类(建议需要)。

问题是这样的-我想把图像聚成3组(自然,日落,水)。我使用os.listdir()加载所有图像,然后将所有图像转换为数组(RGB),然后创建一个数据框架,其中包含三个列- ID、Image_array、Label。

现在,当我使用K均值聚类(提供n_clusters = 3 )时,它显示了以下错误:

从sklearn.cluster导入KMeans = KMeans(n_clusters = 3).fit(img_array)错误=找到带有dim 4的数组。估计器期望<= 2。

现在,在这个集群问题上,我需要您的帮助。我创建的数据框架如下所示

代码语言:javascript
复制
img_array = []

path = "C://Users/shivam/Desktop/freelancer/p22/data/green_nature/"
for f in os.listdir('.'):
    if f.endswith('.jpg'):
        img = Image.open(f)
        data = np.asarray(img, dtype='uint8')
        img_array.append(data)


df = pd.DataFrame({'image_arrays':img_array})
df['id'] = range(1, len(df) + 1)
EN

回答 2

Stack Overflow用户

发布于 2017-04-03 13:47:50

就像你说的,k-指的是每个输入的向量,而你提供的是每个图像的三维数组。解决这样一个问题(确实需要一些创造性)的最简单的方法是设计一组为您所拥有的类指定的特性。

既然在这种情况下,你想在大自然(罗得的o‘绿色),水(罗得的o’蓝色)和日落(罗得的o‘读/黄色/粉红色可能?)之间分类?您可以使用总值或平均绿色、蓝色和红色值。若要检查所选的特征是否具有区分性,可以绘制直方图。

从4D (图像x宽度x高度x颜色)数组到2D (图像x平均颜色)数组。你需要把np.mean的颜色,高度和宽度缩小。最后,您应该有一个(图像x3(颜色))数组。

票数 0
EN

Stack Overflow用户

发布于 2017-04-03 13:57:03

之所以会发生这种情况,是因为您传递了4-DINE数组,而2-DINE则是预期的。'img_array.shape‘应该是这样(n_samples,n_features)。您需要使用特征提取算法。

这可以通过科学图像模块来完成。您需要将图像转换为灰度格式。代码:

代码语言:javascript
复制
import skimage.feature as feature
img_converted = []
for i in range(len(img_array)):
    img_converted.append(feature.hog(img_array[i]))
model.fit(np.array(img_converted))

文档:http://scikit-image.org/docs/dev/api/skimage.feature.html#hog

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43186054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档