《机器学习》—— SVD奇异值分解方法对图像进行压缩

news2024/9/24 20:25:02

文章目录

  • 一、SVD奇异值分解简单介绍
  • 二、代码实现—SVD奇异值分解方法对图像进行压缩

一、SVD奇异值分解简单介绍

SVD(奇异值分解)是一种在信号处理、统计学、线性代数、机器学习等多个领域广泛应用的矩阵分解方法。它将任何 m×n 矩阵 A 分解为三个特定矩阵的乘积:
在这里插入图片描述

  • 其中:

    • U 是一个 m×m 的正交矩阵(或 m×min(m,n),取决于是否计算完整矩阵),其列被称为左奇异向量。
    • Σ 是一个 m×n 的矩形对角矩阵(但通常以 m×min(m,n) 的形式出现,并且只在对角线上有值,其余位置为0),对角线上的元素称为奇异值,它们是非负的,并按降序排列。在实际应用中,Σ 经常以一维数组的形式返回,仅包含对角线上的奇异值。
    • V^T 是 V 的转置,V 是一个 n×n 的正交矩阵(或 n×min(m,n)),其列被称为右奇异向量。
  • SVD 的一些重要性质和用途包括

    • 信息压缩:由于奇异值是按降序排列的,因此可以通过只保留最大的几个奇异值及其对应的左右奇异向量来近似原始矩阵,从而实现数据的压缩。这种方法在图像压缩、信号处理等领域非常有用。
    • 噪声过滤:SVD 可以用于过滤噪声,特别是当噪声主要影响较小的奇异值时。通过去除或减小这些较小的奇异值,可以去除或减轻噪声的影响。
    • 主成分分析(PCA):在统计学中,PCA 可以通过 SVD 来实现。PCA 旨在找到数据中的主成分,这些成分解释了数据中的最大方差。SVD 的左奇异向量对应于 PCA 的主成分方向。
    • 求解线性方程组:SVD 可以用于求解线性方程组 Ax=b,特别是当 A 是非方阵或奇异矩阵时。
    • 推荐系统:在推荐系统中,SVD 可以用于矩阵补全,即根据部分已知的评分来预测用户对物品的评分。

二、代码实现—SVD奇异值分解方法对图像进行压缩

  • 在 python的NumPy库 中,np.linalg.svd() 函数用于计算矩阵的 SVD。

  • 它返回三个对象:左奇异向量 U、奇异值数组 σ(注意这里返回的是一维数组,而不是完整的对角矩阵 Σ)和右奇异向量的转置 V ^T(在 NumPy 中通常直接返回 V,因为 V^T 可以很容易地通过 V.T (转置)获得)。

  • 代码对一张灰度图像进行压缩

  • 代码如下:

    import numpy as np
    from PIL import Image
    import matplotlib.pyplot as plt
    
    """ 定义奇异值分解函数 并返回压缩后的图片和大小"""
    # k为压缩的维度
    # pic_array 为传入图片的array矩阵格式
    def pic_compress(k, pic_array):
        # 定义全局变量
        global u, sigma, vt, sig, new_pic
    
        u, sigma, vt = np.linalg.svd(pic_array)  # 进行奇异值分解
        sig = np.eye(k) * sigma[: k]     # np.eye 用于生成一个单位对角矩阵
        # np.dot 用于矩阵的乘法运算 (计算:A=UΣV^T ——> 压缩后的图片矩阵)
        new_pic = np.dot(np.dot(u[:, :k], sig), vt[:k, :])  
        size = u.shape[0] * k + sig.shape[0] * sig.shape[1] + k * vt.shape[1]  # 计算压缩后的图片大小
        return new_pic, size
    
    # 读取图片
    img = Image.open('lf.jpg')
    ori_img = np.array(img)  # 将图片转换成符合 np.linalg.svd() 参数要求的array矩阵格式
    # 调用奇异值分解函数
    new_img, size = pic_compress(100, ori_img)  # 压缩的维度为100 可设定不同的值查看不同效果
    
    # 分别打印出图片压缩前后的大小
    print("original size:" + str(ori_img.shape[0] * ori_img.shape[1]))
    print("compress size:" + str(size))
    
    # 创建画布,在同一张画布中显示压缩前后的两张图片
    fig, ax = plt.subplots(1, 2)
    ax[0].imshow(ori_img, cmap='gray')
    ax[0].set_title("before compress")
    ax[1].imshow(new_img, cmap='gray')
    ax[1].set_title("after compress")
    plt.show()
    
  • 结果如下:
    在这里插入图片描述
    在这里插入图片描述

  • 由结果可以看出图片的大小大约被压缩至原大小的60%,但是图片所呈现出来的效果没有太大的变化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考基础知识之性能指标

目录 前言 性能指标 计算机 1、时钟频率(主频) 2 、高速缓存 3、运算速度 4、运算精度 5、内存的存储容量 6、存储器的存取周期 7、数据处理速率 8、响应时间 9、RASIS 特性 10、平均故障响应时间 11、兼容性 网络 1、设备级性能指标 2、…

18067 字符统计

### 思路 1. **初始化计数器**:初始化字母计数器nL和数字计数器nN为0。 2. **遍历输入字符串**:逐个字符检查。 3. **判断字符类型**: - 如果是字母,增加nL。 - 如果是数字,增加nN。 - 如果是空格&#xff0c…

OpenAI 计划推出最高每月 2000 美元的 ChatGPT 订阅服务|TodayAI

OpenAI 正在计划推出更高价的 ChatGPT 订阅服务,以满足日益增长的市场需求。据《The Information》报道,OpenAI 已经在内部讨论了高级订阅的价格,最高可能达到每月 2000 美元。这些高级订阅将提供目前正在开发的高性能 AI 模型中的高级功能&a…

快充协议工作原理 XSP04快充协议芯片的简绍

快充协议‌是一种通过提高充电效率来缩短设备充电时间的电池充电技术。它是通过在充电器和设备之间建立一种沟通机制,使得充电器能够根据设备的需求和状态,调整输出的电压和电流。这种沟通机制由快充协议定义,它决定了设备和充电器如何互相识…

创建与操作MySQL数据库

2.1 创建数据库 数据库技术主要研究如何科学地组织和存储数据,以及如何高效地获取和处理数据,它已广泛应用于各个领域。数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库可以看作一个存储数据对象的容器,这些对象包括数…

抖音热门《点燃我,温暖你》李峋同款爱心特效复刻

引言 最近,电视剧《点燃我,温暖你》的热度在抖音上持续升温,特别是剧中李峋的爱心特效,让不少观众为之心动。许多粉丝都在寻找这个特效的源码,希望能够在自己的电脑上重现这一浪漫场景。幸运的是,我在B站上…

【白话MQ】消息队列MQ的使用和选型

快速导航 面试题:为什么使用消息队列?1. 解耦2. 异步3. 削峰 消息队列的优缺点?1. 系统可用性可能会降低2. 系统复杂度提高3. 一致性的挑战 Kafka、ActiveMQ、RabbitMQ、RocketMQ 的区别和适合的场景?区别:使用建议&am…

【Python机器学习系列】使用SMAC优化SVC分类模型的超参数(案例+源码)

这是我的第352篇原创文章。 一、引言 在机器学习和人工智能领域,优化超参数以提升模型性能是一项至关重要的任务。SMAC3,全称Sequential Model-based Algorithm Configuration,是一个强大且灵活的贝叶斯优化包,专注于高效地寻找算…

SpringBoot依赖之Spring Boot Admin(二)

本文核心:集成Prometheus 指标实现应用指标图表监控 作者语录: 我们一直在追逐需求和迭代的路上,却不曾回头看自己曾经的作品是否给自己留下经验和遗憾。技术永远没有边界,但个人必须对自己过往的行为买单,无论对与错…

TestNet 资产管理信息收集系统,附下载链接

我们团队在进行例行的安全活动时,信息管理和监控变得越来越重要了。尤其是在 hvv 和 zb 的任务中,我们需要对公司的资产有一个全貌的了解,以便及时识别和修复潜在的安全漏洞。这个过程通常涉及到大量的信息收集和数据分析,往往会消…

基于多技术融合下生态系统服务权衡与协同动态分析及论文写作方法

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用,是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估(Millennium ecosystem assessment,MA)提出生态系统服务包括供给、调节、…

Vue——day13之脚手架

目录 概述 创建一个脚手架 首先下载脚手架 创建文件 脚手架中代码分析 main.js index.html render 为什么要用render 脚手架的默认配置 总结 概述 Vue的脚手架是一个快速构建Vue项目的工具,它集成了一系列的开发工具和配置,提供了一种标准化的…

MFC修改控件ID的详细说明

控件的ID可以在该对话框的.rc中修改 首先需要开启资源视图 然后在资源视图中打开该对话框 选中某个控件,就可以在属性面板中修改ID了 在此处修改ID后,对应Resource.h中也会发生变化 若在.rc中创建了一个控件时,Resource.h中会生成一个对应…

XML 保存 显示XML 方式 encoding=“UTF8“

XML 保存 encoding“UTF8” 将文件另存为 编码 UTF8 , 跟encoding“UTF8” 保持一致 。

NVDLA专题13:NVDLA软件部分设计和Compiler library

NVDLA拥有完整的软件生态,包括从编译神经网络到推理的支持。这个生态的一部分包括on-device软件栈(software stack),它是NVDLA开源版本的一部分。此外,英伟达将提供完整的training infrastructure,用来构建…

基于yolov8的肺炎检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的肺炎检测系统是一项前沿的深度学习应用,该系统利用YOLOv8这一先进的目标检测算法,能够高效地分析病人的X射线肺部图像,从而快速识别出肺炎的征状。YOLOv8作为Ultralytics公司开发的最新版本,引入了多项…

猎板通信PCB动态:苹果16系列多款设备上线,PCB供应商的机遇与挑战!

在最新的苹果供应链动态中,苹果公司对于PCB供应商的选择标准非常严格,主要考虑因素包括技术能力、生产规模、质量控制、成本效益、供应链稳定性以及环境和社会责任等。随着苹果产品技术的不断进步,PCB供应商也需要具备相应的技术升级能力&…

安泰功率放大器在微纳光固化3D打印中的具体应用

随着科技的进步,3D打印技术已经渗透到各个领域,尤其是微纳光固化3D打印技术。这种技术结合了光学、材料科学和微电子学的知识,能够制造出具有微米级精度的复杂物体。本文Aigtek安泰电子将带你探索功率放大器在微纳光固化3D打印中的应用&#…

太简单,用这个例子详解TCP协议你肯定不知道

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友 当你在微信上给你的朋友发送一条消息,或者在淘宝浏览商品时,这些信息是如何安全、准确地…

LLM - 理解 多模态大语言模型 (MLLM) 的架构与相关技术 (二)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142063880 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 多模态…