KMeans的图像压缩

# -*- coding: utf-8 -*-
"""
Created on Thu Aug 11 18:54:12 2016

@author: Administrator
"""

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(‘haonan.jpg‘), dtype=np.float64) / 255
original_dimensions = tuple(original_img.shape)
width, height, depth = tuple(original_img.shape)
#(3264L, 2448L, 3L)
image_flattened = np.reshape(original_img, (width * height, depth))
#(7990272L, 3L)
#将原始的图像,变成多行的样式

#打乱图像像素,选取1000个
image_array_sample = shuffle(image_flattened,random_state=0)[:1000]

#聚集为64个颜色
estimator = KMeans(n_clusters=64, random_state=0)
estimator.fit(image_array_sample)

#Next, we predict the cluster assignment for each of the pixels in the original image:
#将7990272L颜色划分为64种
cluster_assignments = estimator.predict(image_flattened)
‘‘‘
cluster_assignments.shape
Out[19]: (7990272L,)
‘‘‘
#Finally, we create the compressed image from the compressed palette and cluster assignments:

compressed_palette = estimator.cluster_centers_
‘‘‘
compressed_palette.shape
Out[3]: (64L, 3L)

compressed_palette
Out[4]:
array([[ 0.54188948,  0.66987522,  0.73404635],
       [ 0.16122004,  0.20232389,  0.22962963],
       [ 0.06970588,  0.06088235,  0.06794118],
       [ 0.34392157,  0.46039216,  0.53215686],
       [ 0.68235294,  0.29254902,  0.04862745],
       [ 0.2619281 ,  0.34901961,  0.41911765],
       [ 0.68074866,  0.80784314,  0.86737968],
       [ 0.54313725,  0.57843137,  0.57647059],
       [ 0.47882353,  0.36588235,  0.32117647],
       [ 0.11993464,  0.15108932,  0.17821351],
       [ 0.7745098 ,  0.4745098 ,  0.31372549],
       [ 0.62459893,  0.73698752,  0.7983066 ],
       [ 0.81764706,  0.95098039,  0.57843137],
       [ 0.0248366 ,  0.01837755,  0.02568243],
       [ 0.28912656,  0.22816399,  0.20071301],
       [ 0.44456328,  0.44955437,  0.42245989],
       [ 0.19869281,  0.27215686,  0.33856209],
       [ 0.14588235,  0.12797386,  0.12130719],
       [ 0.51568627,  0.21372549,  0.04019608],
       [ 0.68333333,  0.59411765,  0.53431373],
       [ 0.43227753,  0.5040724 ,  0.56440422],
       [ 0.37167756,  0.29803922,  0.26143791],
       [ 0.73908497,  0.86248366,  0.91477124],
       [ 0.55882353,  0.64215686,  0.7004902 ],
       [ 0.70812325,  0.72941176,  0.71820728],
       [ 0.75215686,  0.37098039,  0.11372549],
       [ 0.20980392,  0.72156863,  0.59411765],
       [ 0.57896613,  0.69875223,  0.75995247],
       [ 0.40588235,  0.08529412,  0.01372549],
       [ 0.55764706,  0.45490196,  0.20470588],
       [ 0.41921569,  0.56352941,  0.65411765],
       [ 0.29877451,  0.4129902 ,  0.4877451 ],
       [ 0.08686275,  0.12215686,  0.16686275],
       [ 0.30532213,  0.32156863,  0.34117647],
       [ 0.51980392,  0.61686275,  0.66823529],
       [ 0.51078431,  0.51666667,  0.50686275],
       [ 0.16642157,  0.24730392,  0.30514706],
       [ 0.0629156 ,  0.07212276,  0.09445865],
       [ 0.6373366 ,  0.75955882,  0.82295752],
       [ 0.13777778,  0.17934641,  0.20836601],
       [ 0.65098039,  0.65588235,  0.66176471],
       [ 0.49338235,  0.57867647,  0.63578431],
       [ 0.33823529,  0.37205882,  0.37745098],
       [ 0.2047619 ,  0.30532213,  0.38207283],
       [ 0.20980392,  0.04313725,  0.02941176],
       [ 0.19758673,  0.2361991 ,  0.26033183],
       [ 0.59215686,  0.26143791,  0.01699346],
       [ 0.24145658,  0.17086835,  0.13893557],
       [ 0.50532213,  0.49971989,  0.43417367],
       [ 0.79215686,  0.45196078,  0.21372549],
       [ 0.12529412,  0.20078431,  0.26431373],
       [ 0.59691028,  0.71895425,  0.78193702],
       [ 0.51764706,  0.2745098 ,  0.17647059],
       [ 0.62058824,  0.51911765,  0.46911765],
       [ 0.60952381,  0.68095238,  0.73977591],
       [ 0.11687812,  0.0946559 ,  0.09265667],
       [ 0.28627451,  0.25359477,  0.25294118],
       [ 0.08411765,  0.09392157,  0.11764706],
       [ 0.74845938,  0.76246499,  0.77983193],
       [ 0.62287582,  0.26339869,  0.09607843],
       [ 0.84313725,  0.94901961,  0.42745098],
       [ 0.43267974,  0.41045752,  0.36601307],
       [ 0.65918833,  0.77756498,  0.84012768],
       [ 0.04037763,  0.03384168,  0.04139434]])
‘‘‘
#生成一个新的图像,全部是0,深度和原来图像相等
compressed_img = np.zeros((width, height, compressed_palette.shape[1]))
‘‘‘
compressed_palette.shape
Out[7]: (64L, 3L)
‘‘‘
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(122)
plt.title(‘Original Image‘)
plt.imshow(original_img)
#plt.axis(‘off‘)
plt.subplot(121)
plt.title(‘Compressed Image‘)
plt.imshow(compressed_img)
#plt.axis(‘off‘)
plt.show()

‘‘‘
在matplotlib下,一个Figure对象可以包含多个子图(Axes),可以使用subplot()快速绘制,
其调用形式如下:subplot(numRows, numCols, plotNum)
图表的整个绘图区域被分成numRows行和numCols列,plotNum参数指定创建的Axes对象所在的区域
如何理解呢?如果numRows = 3,numCols = 2,那整个绘制图表样式为3X2的图片区域,
用坐标表示为(1,1),(1,2),(1,3),(2,1),(2,2),(2,3)。
这时,当plotNum = 1时,表示的坐标为(1,3),即第一行第一列的子图;看代码吧!
‘‘‘
import numpy as np
import matplotlib.pyplot as plt
plt.subplot(221) #分成2x2,占用第一个,即第一行第一列的子图
plt.subplot(222)#分成2x2,占用第二个,即第一行第二列的子图
plt.subplot(212)#分成2x1,占用第二个,即第二行
plt.show()

时间: 2024-10-14 09:46:18

KMeans的图像压缩的相关文章

机器学习Matlab实战之图像压缩————Kmeans算法

本系列来自于我<人工智能>课程复习总结以及机器学习部分的实验总结 Kmeans是机器学习中最经典的无监督学习聚类算法,本文复习了无监督学习定义和Kmeans算法,然后提出了一种基于Kmeans算法的图像压缩方案,并给出了其在Matlab中的实现 1.无监督学习 通过非标记数据样本(Xi→),i=1,...,N且Xi→∈,来学习发现这些无标记样本之间内在的相似联系,叫做无监督学习 无监督学习由于没有标记,那就不存在学习误差或奖惩函数来评估一个可行解,这是无监督学习和监督学习最大的差别 2.Km

高端实战 Python数据分析与机器学习实战 Numpy/Pandas/Matplotlib等常用库

课程简介:? ? 课程风格通俗易懂,真实案例实战.精心挑选真实的数据集为案例,通过Python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例.课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例.算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家快速入门机器学习.旨在帮助同学们快速上手如何使用python库来完整机器学习案例. ------------------

机器学习必备手册

机器学习是计算机科学的一个子领域,在人工智能领域,机器学习逐渐发展成模式识别和计算科学理论的研究.从2016年起,机器学习到达了不合理的火热巅峰.但是,有效的机器学习是困难的,因为机器学习本身就是一个交叉学科,没有科学的方法及一定的积累很难入门. 如果你也想学习机器学习或者正在学习机器学习,本手册一定会帮助你走向你自己的"人生巅峰".手册包含如何入门机器学习,机器学习流行算法,机器学习实战等等. 一.机器学习入门篇: 1.让你少走弯路:这有一份开展机器学习的简短指南 摘要:本文分享了一

【转】 聚类算法-Kmeans算法的简单实现

1. 聚类与分类的区别: 首先要来了解的一个概念就是聚类,简单地说就是把相似的东西分到一组,同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它"这个东西被分为某某类"这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行"学习",从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做 supervised learning (监督学习),而在聚类的时候,我们并不关心某一类是什么,我们需

EM算法(1):K-means 算法

目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法详解 EM算法(1) : K-means算法 1. 简介 K-means算法是一类无监督的聚类算法,目的是将没有标签的数据分成若干个类,每一个类都是由相似的数据组成.这个类的个数一般是认为给定的. 2. 原理 假设给定一个数据集$\mathbf{X} = \{\mathbf{x}_1, \mathbf{x}_2,...,\mathbf{x}_N \}$, 和类的个数K.我们的每个类都用一个中心点$

学习笔记:聚类算法Kmeans

前记 Kmeans是最简单的聚类算法之一,但是运用十分广泛,最近看到别人找实习笔试时有考到Kmeans,故复习一下顺手整理成一篇笔记.Kmeans的目标是:把n 个样本点划分到k 个类簇中,使得每个点都属于离它最近的质心对应的类簇,以之作为聚类的标准.质心,是指一个类簇内部所有样本点的均值. 算法描述 Step 1. 从数据集中随机选取K个点作为初始质心         将每个点指派到最近的质心,形成k个类簇 Step 2. repeat             重新计算各个类簇的质心(即类内部

K-Means聚类

聚类(clustering) 用于找出不带标签数据的相似性的算法 K-Means聚类算法简介 与广义线性模型和决策树类似,K-Means参 数的最优解也是以成本函数最小化为目标.K-Means成本函数公式如下: 成本函数是各个类畸变程度(distortions)之和.每个类的畸变程度等于 该类重心与其内部成员位置距离的平方和.若类内部的成员彼此间越紧凑则类的畸变程度越小,反 之,若类内部的成员彼此间越分散则类的畸变程度越大.求解成本函数最小化的参数就是一个重复配 置每个类包含的观测值,并不断移动

机器学习文本挖掘之spherical k-means algorithm初识

Spherical K-Means 法によるクラスタ分析の実験検証 1.1研究背景.目的: インターネットの普及などにより.膨大なデータの中からデータ間の関係を見つけ出したり.有用な情報をを取り出すためにクラスタリングを行われている. { 本研究では.データマイニングの手法の一つであるクラスタリングに関して研究を行う.ク ラスタリングとは.様々な数値解析手法の総称であり.それらの目的は多変量データを解析 し.観測データを同一のクラスタごとに分類し.それぞれのクラスタの区別を明確化あるいは 発見す

[数据挖掘] - 聚类算法:K-means算法理解及SparkCore实现

聚类算法是机器学习中的一大重要算法,也是我们掌握机器学习的必须算法,下面对聚类算法中的K-means算法做一个简单的描述: 一.概述 K-means算法属于聚类算法中的直接聚类算法.给定一个对象(或记录)的集合,将这些对象划分为多个组或者“聚簇”,从而使同组内的对象间比较相似而不同组对象间差异比较大:换言之,聚类算法就是将相似的对象放到同一个聚簇中,而将不相似的对象放到不同的聚簇中.由于在聚类过程中不使用到类别标签,所以相似性的概念要基于对象的属性进行定义.应用不同则相似性规则和聚类算法一般不太