zoukankan      html  css  js  c++  java
  • 在Python中使用K-Means聚类和PCA主成分分析进行图像压缩

    各位读者好,在这片文章中我们尝试使用sklearn库比较k-means聚类算法和主成分分析(PCA)在图像压缩上的实现和结果。 压缩图像的效果通过占用的减少比例以及和原始图像的差异大小来评估。 图像压缩的目的是在保持与原始图像的相似性的同时,使图像占用的空间尽可能地减小,这由图像的差异百分比表示。 图像压缩需要几个Python库,如下所示:

    # image processing
    from PIL import Image
    from io import BytesIO
    import webcolors
    
    # data analysis
    import math
    import numpy as np
    import pandas as pd
    
    # visualization
    import matplotlib.pyplot as plt
    from importlib import reload
    from mpl_toolkits import mplot3d
    import seaborn as sns
    
    # modeling
    from sklearn.cluster import KMeans
    from sklearn.decomposition import PCA
    from sklearn.preprocessing import MinMaxScaler

    探索图像

    每个颜色通道的图像
    图像中的每个像素都可以表示为三个0到255之间的8位无符号(正)整数,或缩放为三个0到1之间的无符号(正)浮点数。这三个值分别指定红色,绿色,蓝色的强度值,这通常称为RGB编码。 在此文章中,我们使用了220 x 220像素的lena.png,这是在图像处理领域广泛使用的标准测试图像。

    ori_img = Image.open("images/lena.png")
    ori_img

    原始图像

    X = np.array(ori_img.getdata())
    ori_pixels = X.reshape(*ori_img.size, -1)
    ori_pixels.shape

    图像储存方式是形状为(220、220、3)的3D矩阵。 前两个值指定图像的宽度和高度,最后一个值指定RBG编码。 让我们确定图像的其他属性,即图像大小(以千字节(KB)为单位)和原色的数量。

    def imageByteSize(img):
        img_file = BytesIO()
        image = Image.fromarray(np.uint8(img))
        image.save(img_file, 'png')
        return img_file.tell()/1024
    ori_img_size = imageByteSize(ori_img)
    ori_img_n_colors = len(set(ori_img.getdata()))
    

    lena.png的原始图像大小为86 KB,并具有37270种独特的颜色。 因此,我们可以说lena.png中的两个像素具有相同的精确RGB值的可能性很小。

    接下来,让我们计算图像的差异作为压缩结果的基准。

    ori_img_total_variance = sum(np.linalg.norm(X - np.mean(X, axis = 0), axis = 1)**2)

    我们得到方差为302426700.6427498。 但是我们无法解释方差本身的价值。 我们稍后将在K-Means聚类中使用它。

    完整内容请访问:https://imba.deephub.ai/p/3e37ea307a2211ea90cd05de3860c663

  • 相关阅读:
    2020.08.28【周报】
    区间合并【排序、栈】
    1042 数字0-9的数量【解题数分DP】
    asp.net数据分页方法
    纯css面板插件,自适应,多样式
    c#winform图表控件使用示例
    使用妹子UI开发的体验分享
    阿里云储存代码整理(由三卷天书整理)
    测试程序的时候用到写参数或者错误日志的几个方法,用来方便发现错误
    fineUI表格控件各属性说明
  • 原文地址:https://www.cnblogs.com/deephub/p/12666424.html
Copyright © 2011-2022 走看看