import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.utils import shuffle
import mahotas as mh original_img = np.array(mh.imread('Penguins.jpg'), dtype=np.float64) / 255 '''
>>> original_img
array([[[ 0.45490196, 0.68627451, 0.81960784],
[ 0.4627451 , 0.68235294, 0.81960784],
[ 0.4627451 , 0.68235294, 0.81960784],
...,
[ 0.34901961, 0.62352941, 0.81568627],
[ 0.35686275, 0.62352941, 0.81568627],
[ 0.35686275, 0.62352941, 0.81568627]], [[ 0.45490196, 0.69019608, 0.82352941],
[ 0.45490196, 0.68235294, 0.82745098],
[ 0.45882353, 0.68627451, 0.83137255],
...,
[ 0.34117647, 0.63137255, 0.80784314],
[ 0.34117647, 0.63529412, 0.8 ],
[ 0.34117647, 0.63529412, 0.8 ]], [[ 0.4627451 , 0.69411765, 0.82745098],
[ 0.45882353, 0.68627451, 0.83137255],
[ 0.45882353, 0.68627451, 0.83137255],
...,
[ 0.33333333, 0.63921569, 0.78823529],
[ 0.3372549 , 0.64313725, 0.78431373],
[ 0.3372549 , 0.64313725, 0.78431373]], ...,
[[ 0.34509804, 0.4745098 , 0.35294118],
[ 0.50588235, 0.54901961, 0.5254902 ],
[ 0.76078431, 0.79215686, 0.56078431],
...,
[ 0.43921569, 0.54117647, 0.5372549 ],
[ 0.39607843, 0.49803922, 0.50196078],
[ 0.34117647, 0.42352941, 0.42745098]], [[ 0.31764706, 0.44705882, 0.40392157],
[ 0.37647059, 0.46666667, 0.49803922],
[ 0.30196078, 0.40392157, 0.29019608],
...,
[ 0.44313725, 0.52156863, 0.51372549],
[ 0.43921569, 0.50980392, 0.51764706],
[ 0.36078431, 0.45882353, 0.44705882]], [[ 0.30588235, 0.40784314, 0.37254902],
[ 0.31372549, 0.42352941, 0.47058824],
[ 0.31372549, 0.39607843, 0.36862745],
...,
[ 0.40784314, 0.50588235, 0.48235294],
[ 0.41568627, 0.49803922, 0.50196078],
[ 0.33333333, 0.40392157, 0.40392157]]])
>>> original_img.shape[0] #宽度
434
>>> original_img.shape[1] #高度
1024
>>> original_img.shape[2]
3
'''

original_dimensions = tuple(original_img.shape) '''
>>> original_dimensions
(434, 1024, 3)
'''

width, height, depth = tuple(original_img.shape)
#文档说,是高度,宽度,Must be of shape (h,w,3)
#http://mahotas.readthedocs.org/en/latest/api.html
image_flattened = np.reshape(original_img, (width * height, depth))
'''
>>> image_flattened.shape
(444416, 3)
'''
#随机选取1000个颜色点
image_array_sample = shuffle(image_flattened, random_state=0)[:1000]
'''
>>> image_array_sample
array([[ 0.2745098 , 0.37254902, 0.4 ],
[ 0.41568627, 0.6627451 , 0.82352941],
[ 0.64705882, 0.75686275, 0.94117647],
...,
[ 0.11764706, 0.25490196, 0.33333333],
[ 0.7372549 , 0.79607843, 0.96470588],
[ 0.7254902 , 0.78823529, 0.92156863]])
>>> image_array_sample.shape
(1000, 3)
''' #1000个采样点,64个聚簇
estimator = KMeans(n_clusters=64, random_state=0)
estimator.fit(image_array_sample) cluster_assignments = estimator.predict(image_flattened) '''
>>> cluster_assignments
array([ 6, 6, 6, ..., 14, 14, 14])
>>> cluster_assignments.shape
(444416,)
>>>
这样就给每一个颜色值分配了一个颜色标签(这样的标签共有64个)
''' compressed_palette = estimator.cluster_centers_
compressed_img = np.zeros((width, height, compressed_palette.shape[1])) label_idx = 0
for i in range(width):
for j in range(height):
compressed_img[i][j] = compressed_palette[cluster_assignments[label_idx]] #根据标签,获得颜色值
label_idx += 1 plt.subplot(121) #一行两列第一个位置
plt.title('Original Image')
plt.imshow(original_img) plt.axis('off')
plt.subplot(122) #很神奇的地方,一行两列,第二个位置
plt.title('Compressed Image')
plt.imshow(compressed_img)
plt.axis('off')
plt.show()

KMeans的数据压缩的更多相关文章

  1. PCA and kmeans MATLAB实现

    MATLAB基础知识 l  Imread:  读取图片信息: l  axis:轴缩放:axis([xmin xmax ymin ymax zmin zmax cmin cmax]) 设置 x.y 和  ...

  2. 机器学习公开课笔记(8):k-means聚类和PCA降维

    K-Means算法 非监督式学习对一组无标签的数据试图发现其内在的结构,主要用途包括: 市场划分(Market Segmentation) 社交网络分析(Social Network Analysis ...

  3. K-means Algorithm

    在监督学习中,有标签信息协助机器学习同类样本之间存在的共性,在预测时只需判定给定样本与哪个类别的训练样本最相似即可.在非监督学习中,不再有标签信息的指导,遇到一维或二维数据的划分问题,人用肉眼就很容易 ...

  4. Andrew Ng机器学习课程笔记--week8(K-means&PCA)

    Unsupervised Learning 本周我们讲学习非监督学习算法,会学习到如下概念 聚类(clustering) PCA(Principal Componets Analysis主成分分析), ...

  5. Coursera在线学习---第八节.K-means聚类算法与主成分分析(PCA)

    一.K-means聚类中心初始化问题. 1)随机初始化各个簇类的中心,进行迭代,直到收敛,并计算代价函数J. 如果k=2~10,可以进行上述步骤100次,并分别计算代价函数J,选取J值最小的一种聚类情 ...

  6. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  7. 当我们在谈论kmeans(1)

    本稿为初稿,后续可能还会修改:如果转载,请务必保留源地址,非常感谢! 博客园:http://www.cnblogs.com/data-miner/ 简书:建设中... 知乎:建设中... 当我们在谈论 ...

  8. K-Means 聚类算法

    K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...

  9. 用scikit-learn学习K-Means聚类

    在K-Means聚类算法原理中,我们对K-Means的原理做了总结,本文我们就来讨论用scikit-learn来学习K-Means聚类.重点讲述如何选择合适的k值. 1. K-Means类概述 在sc ...

随机推荐

  1. ACM-最小生成树之继续畅通project——hdu1879

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lx417147512/article/details/27092583 ************** ...

  2. linux awk数组相关操作介绍

    用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算又会怎么样呢.我们先看下以下的一些介绍,结合样例我们会解说下它的不同之处.在 awk 中数组叫做关联数组(assoc ...

  3. sqlalchemy——基本操作

    以下所有代码片段都使用了统一的引用,该引用如下: from sqlalchemy import create_engine, ForeignKey from sqlalchemy.ext.declar ...

  4. 《机器学习实战》学习笔记第八章 —— 线性回归、L1、L2范数正则项

    相关笔记: 吴恩达机器学习笔记(一) —— 线性回归 吴恩达机器学习笔记(三) —— Regularization正则化 ( 问题遗留: 小可只知道引入正则项能降低参数的取值,但为什么能保证 Σθ2  ...

  5. screen&tmux快捷键

    screen Key 快捷键 Action 动作 Notes 备注 Ctrl+a c new window 新窗口   Ctrl+a n next window 下一个窗口 I bind F12 to ...

  6. 什么是tmpfs

    什么是tmpfs tmpfs是Linux/Unix系统上的一种基于内存的文件系统.tmpfs可以使用您的内存或swap分区来存储文件. 实现原理:基于VM子系统 tmpfs是基于Linux的虚拟内存管 ...

  7. 算法(Algorithms)第4版 练习 1.3.37

    package com.qiusongde.creative; import com.qiusongde.Queue; import edu.princeton.cs.algs4.StdOut; pu ...

  8. 源码分享-纯CSS3实现齿轮加载动画

    纯CSS3实现齿轮加载动画是一款可以用来做Loading动画的CSS3特效代码. 有兴趣的朋友可以下载下来试试:http://www.huiyi8.com/sc/8398.html

  9. POJ 2728 Desert King:最优比率生成树

    题目链接:http://poj.org/problem?id=2728 题意: 给你n个点(x,y,z),让你求一棵生成树,使得 k = ∑ |z[i]-z[j]| / ∑ dis(i,j)最小. | ...

  10. 从HTTP请求中获取客户IP地址

    /**     * 从HTTP请求中获取客户IP地址     *     * @param request http请求     * @return 客户IP地址     */    public s ...