K-Means算法是最基础的聚类算法、也是最常用的机器学习算法之一。 本教程中,我们利用K-Means对图像中的像素点进行聚类,然后用每个像素所在的簇的中心点来代替每个像素的真实值,从而达到图像压缩的目的。
非负矩阵分解(Non-negative Matrix Factorization, NMF)是一种对非负矩阵进行低维近似逼近的常见方法,同样也能达到图像压缩的目的。
0. 前言
K Means算法比NMF算法慢很多,尤其是当聚类数较大时,所以实验时请耐心等待。此外,由于两者重建图像的原理不同,所以两者的视觉也相差很大,k Means牺牲了颜色的个数而保留了边界和形状,而NMF牺牲了形状以及边界却尽量保留颜色。整个实验过程中会产生一些有趣风格的图像,注意留意哦!
完整的代码在第4节。
1. 图像的读取
本教程以台湾省台北市最高建筑“台北101”大厦的夜景图为例,该图的分辨率为600 * 800。
点击这里下载实验图片。
我们需要skimage
、numpy
、matplotlib.pyplot
这三个库来实现图像的读取以及显示。
import numpy as np
import matplotlib.pyplot as plt
from skimage import io
利用io.imread
直接读取图像文件,并存入np.ndarray
类型的变量d
。注意ÿ