Python图像聚类

21 篇文章 1 订阅




问题描述

收集图片,分成N簇。

本人使用3簇

!!! 图片的尺寸要一致 !!!




解决方案

  1. 下载PCV
  2. 将里面的PCV文件夹复制粘贴到以下代码同一文件夹
  3. 聚类




IPython代码

# -*- coding: utf-8 -*-
import pickle
from pylab import *
from PIL import Image
from scipy.cluster.vq import *
from PCV.tools import pca, imtools

PCA_MODE = 'pca_mode.pkl'  # 保存的PCA文件
IMG_TRAIN_LIST = './train/'  # 用于计算PCA的图片列表
IMG_CLUSTER_LIST = './train/'  # 用于聚类的图片列表
CLUSTER = 3  # 簇数
IMG_WIDTH, IMG_HEIGHT = 1280, 720  # 图片尺寸
# 获取训练图像列表
imlist = imtools.get_imlist(IMG_TRAIN_LIST)
im = array(Image.open(imlist[0]))  # 打开任意一张图片
m, n = im.shape[:2]  # 图片尺寸(要都统一)
imnbr = len(imlist)  # 图片数量
print('The number of training images is {}'.format(imnbr))
immatrix = array([array(Image.open(imname)).flatten() for imname in imlist], 'f')  # 拼接所有图片

# 保存均值和主成分
print('Training...')
V, S, immean = pca.pca(immatrix)  # PCA降维
f = open(PCA_MODE, 'wb')
pickle.dump(immean, f)
pickle.dump(V, f)
f.close()
print('{} had saved'.format(PCA_MODE))

The number of training images is 60
Training…
pca_mode.pkl had saved

# 获取聚类图像列表
imlist = imtools.get_imlist(IMG_CLUSTER_LIST)
imnbr = len(imlist)
print('The number of clustering images is {}'.format(imnbr))

# 加载主成分
with open(PCA_MODE, 'rb') as f:
    immean = pickle.load(f)
    V = pickle.load(f)
print('{} had loaded'.format(PCA_MODE))

# 使用主成分进行k-means聚类
immatrix = array([array(Image.open(im)).flatten() for im in imlist], 'f')  # 拼接所有图片
immean = immean.flatten()
projected = array([dot(V[:CLUSTER*10], immatrix[i] - immean) for i in range(imnbr)])  # 前10×CLUSTER个主成分

projected = whiten(projected)
centroids, distortion = kmeans(projected, CLUSTER)
code, distance = vq(projected, centroids)

The number of clustering images is 60
pca_mode.pkl had loaded

for k in range(CLUSTER):
    ind = where(code == k)[0]
    figure(figsize=(20,20),dpi = 200)
    gray()
    for i in range(minimum(len(ind),imnbr)):
        subplot(CLUSTER, imnbr/ CLUSTER, i + 1)
        imshow(immatrix[ind[i]].reshape((IMG_HEIGHT, IMG_WIDTH, 3)))
        axis('off')
show()




效果

在这里插入图片描述




参考文献

  1. Python计算机视觉编程 - 第六章 图像聚类
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XerCis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值