毕业设计网站方向,黑龙江住房和城乡建设部网站,电子商务网站建设哪好,台州有哪些做网站的公司03、K-means聚类实现步骤与基于K-means聚类的图像压缩#xff08;2#xff09;
工程下载#xff1a;K-means聚类实现步骤与基于K-means聚类的图像压缩
其他#xff1a; 03、K-means聚类实现步骤与基于K-means聚类的图像压缩#xff08;1#xff09; 03、K-means聚类实现…03、K-means聚类实现步骤与基于K-means聚类的图像压缩2
工程下载K-means聚类实现步骤与基于K-means聚类的图像压缩
其他 03、K-means聚类实现步骤与基于K-means聚类的图像压缩1 03、K-means聚类实现步骤与基于K-means聚类的图像压缩2
K-means聚类的图像压缩
开始学习机器学习啦已经把吴恩达的课全部刷完了现在开始熟悉一下复现代码。对这个手写数字实部比较感兴趣作为入门的素材非常合适。
1、K-means聚类图像压缩基本思路
我的想法是这副图像存在许多很大一块区域的颜色相近既然相近我们就用一种颜色替代一大块区域中的各色。我们可以人为的用8、16、24、32种颜色表示整幅图像的颜色也即说明聚类的个数为8、16、24、32。
上述说法是不准确的准确的说法是这副图像虽然很大但是其有些部分颜色相近这些颜色相近的部分不论是否出自同一位置我们都可以用一种颜色进行替代。我们可以使用8、16、24、32种颜色来代替原来图中的所有颜色。
在使用K-means聚类进行图像压缩时聚类的对象仅仅是颜色而已和颜色的所在位置是否相近无关也就是说这种压缩不改变像素的大小只改变色彩的鲜艳程度而已。具体来讲聚类是在三维坐标下进行的三个坐标轴分别为R G B 的具体数值。
下面简单介绍这种压缩算法的压缩效果。对于一张RGB888的彩色图像假设其大小为1920 * 1080那么其存储所需的大小为1920*1080 * 24因为RGB分别用8位来表示因此每个像素点有24位来表示其颜色。
此处有24位来表示颜色可表示的颜色个数为2^24种假设此处使用K16的K-means聚类算法对其进行压缩则代表压缩后的图像只包含K种颜色。
那么对于每个像素点而言则需要log2K4位来进行表示此外还需要K*24的空间来存储对应的24位RGB颜色因此压缩后的总空间为1920 * 1080 * log2K K * 24。
对于一张1920 * 1080 的图像压缩比例和K的对应关系如下所示
2、K-means聚类图像压缩底层实现
此处从K-means聚类的底层原理进行实现不调用库函数
import numpy as np
from matplotlib import pyplot as plt# 随机初始化聚类初始优化点
def kMeans_init_centroids(X, K):# 随机重新排序样本的索引randidx np.random.permutation(X.shape[0])# 取前K个样本作为聚类中心centroids X[randidx[:K]]return centroidsdef find_closest_centroids(X, centroids):# 获取聚类中心的数量也即K值K centroids.shape[0]# 初始化一个数组用于存储每个样本所属的聚类中心的索引idx np.zeros(X.shape[0], dtypeint)# 遍历数据集中的每个样本for i in range(X.shape[0]):# 初始化一个列表用于存储当前样本到每个聚类中心的距离distance []# 计算当前样本到每个聚类中心的距离for j in range(centroids.shape[0]):# 使用欧几里得距离公式计算样本i与聚类中心j之间的距离norm_ij np.linalg.norm(X[i] - centroids[j])distance.append(norm_ij)# 找出距离列表中的最小值该最小值对应的索引就是当前样本所属的聚类中心idx[i] np.argmin(distance)# 返回每个样本所属的聚类中心的索引数组return idxdef compute_centroids(X, idx, K):# 获取数据集X的行数m和列数n# m表示样本数量n表示每个样本的特征数量m, n X.shape# 初始化一个K x n的零矩阵用于存储K个聚类中心# K表示聚类数量n表示特征数量centroids np.zeros((K, n))# 遍历每个聚类中心for k in range(K):# 从数据集X中选择属于当前聚类k的所有样本# idx是一个长度为m的数组存储了每个样本所属的聚类中心的索引points X[idx k]# 计算属于当前聚类k的所有样本的平均值得到聚类中心# axis0表示按列计算平均值centroids[k] np.mean(points, axis0)# 返回计算得到的K个聚类中心return centroidsdef run_kMeans(X, initial_centroids, max_iters10):# 获取数据集X的行数m和列数n# m表示样本数量n表示每个样本的特征数量m, n X.shape# 获取初始聚类中心的数量KK initial_centroids.shape[0]# 将初始聚类中心赋值给centroids变量centroids initial_centroids# 将初始聚类中心复制给previous_centroids变量用于后续比较聚类中心是否发生变化previous_centroids centroids# 初始化一个长度为m的零数组用于存储每个样本所属的聚类中心的索引idx np.zeros(m)# 开始运行K-means算法最多迭代max_iters次for i in range(max_iters):# 输出当前迭代进度print(K-Means iteration %d/%d % (i, max_iters - 1))# 调用find_closest_centroids函数为数据集X中的每个样本找到最近的聚类中心并返回索引数组idx find_closest_centroids(X, centroids)# 调用compute_centroids函数根据每个样本所属的聚类中心和索引数组计算新的聚类中心centroids compute_centroids(X, idx, K)# 返回最终的聚类中心和每个样本所属的聚类中心的索引return centroids, idx# Load an image of a bird
original_img plt.imread(K_means_data/bird_small.png)
# Visualizing the image
plt.imshow(original_img)
plt.show()
print(Shape of original_img is:, original_img.shape)# Divide by 255 so that all values are in the range 0 - 1
# RGB各8位将其归一化至0-1
original_img original_img / 255
# Reshape the image into an m x 3 matrix where m number of pixels
# 数组的内容是图像各个点的颜色m x 3
X_img np.reshape(original_img, (original_img.shape[0] * original_img.shape[1], 3))# K就是要使用几种颜色进行表达
K 8
max_iters 10# Using the function you have implemented above. 初始化的是rgb的数值因此是包含三个元素的数组
initial_centroids kMeans_init_centroids(X_img, K)# Run K-Means - this takes a couple of minutes
centroids, idx run_kMeans(X_img, initial_centroids, max_iters)# Represent image in terms of indices
X_recovered centroids[idx, :]# Reshape recovered image into proper dimensions
X_recovered np.reshape(X_recovered, original_img.shape)# Display original image
fig, ax plt.subplots(1, 2, figsize(8, 8))
plt.axis(off)ax[0].imshow(original_img * 255)
ax[0].set_title(Original)
ax[0].set_axis_off()# Display compressed image
ax[1].imshow(X_recovered * 255)
ax[1].set_title(Compressed with %d colours % K)
ax[1].set_axis_off()
plt.show()
3、K-means聚类图像压缩库函数实现
此处直接使用from sklearn.cluster import KMeans来进行K-means聚类代码更加简洁了
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
from sklearn.cluster import KMeans
import numpy as nporiginal_pixel mpimg.imread(K_means_data/bird_small.png)
pixel original_pixel.reshape((128 * 128, 3))kmeans KMeans(n_clusters8, random_state0).fit(pixel)newPixel []
for i in kmeans.labels_:newPixel.append(list(kmeans.cluster_centers_[i, :]))newPixel np.array(newPixel)
newPixel newPixel.reshape((128, 128, 3))# Display original image
fig, ax plt.subplots(1, 2, figsize(8, 8))
plt.axis(off)
ax[0].imshow(original_pixel)
ax[0].set_title(Original)
ax[0].set_axis_off()# Display compressed image
ax[1].imshow(newPixel)
ax[1].set_title(Compressed with %d colours % kmeans.n_clusters)
ax[1].set_axis_off()
plt.show()
4、小结
虽说写了那么多但是实际上还是没有输出压缩后的图片文件。压缩后的图片的大小是1920 * 1080 * log2K的此外还需要K * 24位来存储颜色表或许没办法用普通png来表示了那应该怎么生成文件嘞 之后一定填坑。 文章转载自: http://www.morning.psxcr.cn.gov.cn.psxcr.cn http://www.morning.hjssh.cn.gov.cn.hjssh.cn http://www.morning.wwthz.cn.gov.cn.wwthz.cn http://www.morning.prqdr.cn.gov.cn.prqdr.cn http://www.morning.sggzr.cn.gov.cn.sggzr.cn http://www.morning.gctgc.cn.gov.cn.gctgc.cn http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn http://www.morning.tkchm.cn.gov.cn.tkchm.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.cnvlog.cn.gov.cn.cnvlog.cn http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.spsqr.cn.gov.cn.spsqr.cn http://www.morning.bzlsf.cn.gov.cn.bzlsf.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.fbmzm.cn.gov.cn.fbmzm.cn http://www.morning.bccls.cn.gov.cn.bccls.cn http://www.morning.qddtd.cn.gov.cn.qddtd.cn http://www.morning.bfybb.cn.gov.cn.bfybb.cn http://www.morning.fmkjx.cn.gov.cn.fmkjx.cn http://www.morning.mflqd.cn.gov.cn.mflqd.cn http://www.morning.txkrc.cn.gov.cn.txkrc.cn http://www.morning.rkxdp.cn.gov.cn.rkxdp.cn http://www.morning.glbnc.cn.gov.cn.glbnc.cn http://www.morning.xbwqg.cn.gov.cn.xbwqg.cn http://www.morning.gkdqt.cn.gov.cn.gkdqt.cn http://www.morning.rlksq.cn.gov.cn.rlksq.cn http://www.morning.mumgou.com.gov.cn.mumgou.com http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn http://www.morning.jkzjs.cn.gov.cn.jkzjs.cn http://www.morning.sjwzl.cn.gov.cn.sjwzl.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.dlgjdg.cn.gov.cn.dlgjdg.cn http://www.morning.rfyk.cn.gov.cn.rfyk.cn http://www.morning.bnmfq.cn.gov.cn.bnmfq.cn http://www.morning.qdzqf.cn.gov.cn.qdzqf.cn http://www.morning.tslfz.cn.gov.cn.tslfz.cn http://www.morning.qmtzq.cn.gov.cn.qmtzq.cn http://www.morning.kflpf.cn.gov.cn.kflpf.cn http://www.morning.fssmx.com.gov.cn.fssmx.com http://www.morning.gmswp.cn.gov.cn.gmswp.cn http://www.morning.nlryq.cn.gov.cn.nlryq.cn http://www.morning.bslkt.cn.gov.cn.bslkt.cn http://www.morning.rzysq.cn.gov.cn.rzysq.cn http://www.morning.wnjbn.cn.gov.cn.wnjbn.cn http://www.morning.wmglg.cn.gov.cn.wmglg.cn http://www.morning.gppqf.cn.gov.cn.gppqf.cn http://www.morning.sgfgz.cn.gov.cn.sgfgz.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.ldcrh.cn.gov.cn.ldcrh.cn http://www.morning.hjwxm.cn.gov.cn.hjwxm.cn http://www.morning.rpljf.cn.gov.cn.rpljf.cn http://www.morning.zknjy.cn.gov.cn.zknjy.cn http://www.morning.wgtr.cn.gov.cn.wgtr.cn http://www.morning.jlktz.cn.gov.cn.jlktz.cn http://www.morning.rnds.cn.gov.cn.rnds.cn http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com http://www.morning.ylqpp.cn.gov.cn.ylqpp.cn http://www.morning.pnmnl.cn.gov.cn.pnmnl.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.qbnfc.cn.gov.cn.qbnfc.cn http://www.morning.wylpy.cn.gov.cn.wylpy.cn http://www.morning.lszjq.cn.gov.cn.lszjq.cn http://www.morning.wrwcf.cn.gov.cn.wrwcf.cn http://www.morning.jkzjs.cn.gov.cn.jkzjs.cn http://www.morning.kngx.cn.gov.cn.kngx.cn http://www.morning.mttck.cn.gov.cn.mttck.cn http://www.morning.xiaobaixinyong.cn.gov.cn.xiaobaixinyong.cn http://www.morning.hotlads.com.gov.cn.hotlads.com http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn http://www.morning.mdxwz.cn.gov.cn.mdxwz.cn http://www.morning.kgphd.cn.gov.cn.kgphd.cn http://www.morning.njftk.cn.gov.cn.njftk.cn http://www.morning.rjnky.cn.gov.cn.rjnky.cn http://www.morning.rkfgx.cn.gov.cn.rkfgx.cn http://www.morning.njdtq.cn.gov.cn.njdtq.cn http://www.morning.xcyzy.cn.gov.cn.xcyzy.cn http://www.morning.gdpai.com.cn.gov.cn.gdpai.com.cn