当前位置: 首页 > news >正文

奇异值分解(SVD)的应用——图像压缩

SVD方法是模型降阶的一类重要方法,本征正交分解(POD)和平衡截断(BT)都属于SVD类方法。

要想深入了解模型降阶技术,我们可以先从SVD的应用入手,做一个直观的了解。

1. SVD的定义和分类

我们想寻找一个A的逼近:Ak,使得rank(Ak) = k < n,且|A - Ak|最小。

下面的定理(也称为Schmidt-Mirsky, Eckart-Young定理)说明矩阵A的低秩逼近可以用SVD实现:

2. SVD在图像压缩中的应用

原始图片, rank=720:

绘制其R,G,B的奇异值:

压缩图片,rank=144:

压缩图片,rank=72:

代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as imageA = image.imread("svd-image-compression-img.jpg")# Each pixel (typically) consists of 3 bytes — for the red, green and blue components of the color, respectively. 
# So, if we want to efficiently store the image, we need to somehow efficiently encode 3 matrices R, G and B 
# for each color component, respectively.
# We can extract the 3 color component matrices as briefly mentioned above as follows:
# 0xff代表十进制数值255
R = A[:,:,0] / 0xff
G = A[:,:,1] / 0xff
B = A[:,:,2] / 0xff# Now, we compute the SVD decomposition:
R_U, R_S, R_VT = np.linalg.svd(R)
G_U, G_S, G_VT = np.linalg.svd(G)
B_U, B_S, B_VT = np.linalg.svd(B)# polt the singular values
xaxis = np.arange(0, len(R_S))
plt.plot(xaxis, R_S, label='R_S')
plt.plot(xaxis, G_S, label='G_S')
plt.plot(xaxis, B_S, label='B_S')
plt.legend()relative_rank = 0.1
max_rank = int(relative_rank * min(R.shape[0], R.shape[1]))
print("max rank = %d" % max_rank)  # 144def read_as_compressed(U, S, VT, k):Ak = np.zeros((U.shape[0], VT.shape[1]))for i in range(k):U_i = U[:,[i]]VT_i = np.array([VT[i]])Ak += S[i] * (U_i @ VT_i)return Ak## Actually, it is easier and more efficient to perform the same operation 
## with a lower-rank matrix multiplication.
# def read_as_compressed(U, S, VT, k):
#     return (U[:,:k] @ np.diag(S[:k])) @ VT[:k]R_compressed = read_as_compressed(R_U, R_S, R_VT, max_rank)
G_compressed = read_as_compressed(G_U, G_S, G_VT, max_rank)
B_compressed = read_as_compressed(B_U, B_S, B_VT, max_rank)compressed_float = np.dstack((R_compressed, G_compressed, B_compressed))
compressed = (np.minimum(compressed_float, 1.0) * 0xff).astype(np.uint8)# Plot
plt.figure()
plt.imshow(A)plt.figure()
plt.imshow(compressed)image.imsave("compressed.jpg", compressed)

参考资料:

[A.C. Antoulas 2001] Approximation of large-scale dynamical systems: An overview
[潘建瑜] 矩阵计算_讲义 
Compressing images with singular value decomposition (SVD) | ZeroBone

相关文章:

奇异值分解(SVD)的应用——图像压缩

SVD方法是模型降阶的一类重要方法&#xff0c;本征正交分解&#xff08;POD&#xff09;和平衡截断&#xff08;BT&#xff09;都属于SVD类方法。 要想深入了解模型降阶技术&#xff0c;我们可以先从SVD的应用入手&#xff0c;做一个直观的了解。 1. SVD的定义和分类 我们想寻找…...

RTDETR改进系列指南

基于Ultralytics的RT-DETR改进项目.(89.9) 为了感谢各位对RTDETR项目的支持,本项目的赠品是yolov5-PAGCP通道剪枝算法.具体使用教程 自带的一些文件说明 train.py 训练模型的脚本main_profile.py 输出模型和模型每一层的参数,计算量的脚本(rtdetr-l和rtdetr-x因为thop库的问…...

类和结构体的区别

类&#xff08;class&#xff09;和结构体&#xff08;struct&#xff09;是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;中常见的两种数据类型&#xff0c;它们在不同的编程语言中有一些共同之处&#xff0c;但也存在一些区别。以下是它们…...

利用Excel模拟投币试验

文章目录 试验前对Excel要进行的设置试验步骤计算正面频率结果图试验前对Excel要进行的设置 进入Excel依次点击如下选项,最后将分析工具库勾选 #mermaid-svg-bIvrxZGI9buCMW6U {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#m…...

WebService接口测试

WebService的理解 WebService就是Web服务的意思&#xff0c;对应的应用层协议为SOAP&#xff08;相当于HTTP协议&#xff09;&#xff0c;可理解为远程调用技术。 特点&#xff1a; 客户端发送的请求主体内容&#xff08;请求报文&#xff09;的格式为XML格式 接口返回的响…...

语音唤醒——

文章目录 配置主代码 参考文档&#xff1a;https://picovoice.ai/docs/quick-start/porcupine-python/ 配置 pip install pvporcupine主代码 ACCESS_KEY&#xff1a;需要将该参数填入即可 # # Copyright 2018-2023 Picovoice Inc. # # You may not use this file except in …...

typeScript 类型推论

什么是类型推论&#xff1f; 类型推论是 TypeScript 中的一个特性&#xff0c;它允许开发人员不必显式地指定变量的类型。相反&#xff0c;开发人员可以根据变量的使用情况让 TypeScript 编译器自动推断出类型。例如&#xff0c;如果开发人员将一个字符串赋值给一个变量&#…...

JavaScript 设计模式之代理模式

代理模式 其实这种模式在现在很多地方也都有使用到&#xff0c;如 Vue3 中的数据相应原理就是使用的 es6 中的 Proxy 代理及 Reflect 反射的方式来处理数据响应式 我们日常在使用数据请求时&#xff0c;也会用到一些代理的方式&#xff0c;比如在请求不同的域名&#xff0c;端…...

JavaScript 对象判断

如何判断一个对象是否是Set、Map、Array、Object 参考链接&#xff1a; https://blog.csdn.net/yunchong_zhao/article/details/115915624 let set new Set() let map new Map() let arr [] let obj {}console.log(Object.prototype.toString.call(obj)); // [object Obje…...

Android下SF合成流程重学习之onMessageInvalidate

Android下SF合成流程重学习之onMessageInvalidate 引言 虽然看了很多关于Android Graphics图形栈的文章和博客&#xff0c;但是都没有形成自己的知识点。每次学习了&#xff0c;仅仅是学习了而已&#xff0c;没有形成自己的知识体系&#xff0c;这次趁着有时间&#xff0c;这次…...

基于SpringBoot+WebSocket+Spring Task的前后端分离外卖项目-订单管理(十七)

订单管理 1. Spring Task1.1 介绍1.2 cron表达式1.3 入门案例1.3.1 Spring Task使用步骤1.3.2 代码开发1.3.3 功能测试 2.订单状态定时处理2.1 需求分析2.2 代码开发2.3 功能测试 3. WebSocket3.1 介绍3.2 入门案例3.2.1 案例分析3.2.2 代码开发3.2.3 功能测试 4. 来单提醒4.1 …...

【Java多线程进阶】JUC常见类以及CAS机制

1. Callable的用法 之前已经接触过了Runnable接口&#xff0c;即我们可以使用实现Runnable接口的方式创建一个线程&#xff0c;而Callable也是一个interface&#xff0c;我们也可以用Callable来创建一个线程。 Callable是一个带有泛型的interface实现Callable接口必须重写cal…...

Python算法100例-1.7 最佳存款方案

完整源代码项目地址&#xff0c;关注博主私信’源代码’后可获取 1.问题描述2.问题分析3.算法设计4.完整的程序 1&#xff0e;问题描述 假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱&#xff0c;他打算在今后5年中的每年年底取出1000元&#xff0c;到第5年时刚…...

ADO世界之FIRST

目录 一、ADO 简介 二、ADO 数据库连接 1.创建一个 DSN-less 数据库连接 2.创建一个 ODBC 数据库连接 3.到 MS Access 数据库的 ODBC 连接 4.ADO 连接对象&#xff08;ADO Connection Object&#xff09; 三、ADO Recordset&#xff08;记录集&#xff09; 1.创建一个 …...

【COMP337 LEC 5-6】

LEC 5 Perceptron &#xff1a; Binary Classification Algorithm 8 感应器是 单个神经元的模型 突触连接的强度取决于接受外部刺激的反应 X input W weights a x1*w1x2*w2....... > / < threshold Bias MaxIter is a hyperparameter 超参数 which has to be chosen…...

力扣72. 编辑距离(动态规划)

Problem: 72. 编辑距离 文章目录 题目描述思路复杂度Code 题目描述 思路 由于易得将字符串word1向word2转换和word2向word1转换是等效的&#xff0c;则我们假定统一为word1向word2转换&#xff01;&#xff01;&#xff01; 1.确定状态&#xff1a;我们假设现在有下标i&#x…...

linux tree命令找不到:如何使用Linux Tree命令查看文件系统结构

Linux tree命令是一个用于显示文件夹和文件的结构的工具&#xff0c;它可以帮助用户更好地理解文件系统的结构。如果你在linux系统上找不到tree命令&#xff0c;那么可能是因为你的系统中没有安装tree命令。 解决方案 Linux tree命令是一个用于显示文件夹和文件的结构的工具&…...

OJ_最大逆序差

题目 给定一个数组&#xff0c;编写一个算法找出这个数组中最大的逆序差。逆序差就是i<j时&#xff0c;a[j]-a[i]的值 c语言实现 #include <stdio.h> #include <limits.h> // 包含INT_MIN定义 int maxReverseDifference(int arr[], int size) { if (size…...

MyBatis-Plus 实体类里写正则让字段phone限制为手机格式

/* Copyright © 2021User:啾啾修车File:ToupiaoRecord.javaDate:2021/01/12 19:29:12 */ package com.jjsos.repair.toupiao.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomido…...

K8S之运用污点、容忍度设置Pod的调度约束

污点、容忍度 污点容忍度 taints 是键值数据&#xff0c;用在节点上&#xff0c;定义污点&#xff1b; tolerations 是键值数据&#xff0c;用在pod上&#xff0c;定义容忍度&#xff0c;能容忍哪些污点。 污点 污点是定义在k8s集群的节点上的键值属性数据&#xff0c;可以决…...

Llama-3.2V-11B-cot开源大模型实战教程:双卡4090环境下11B视觉模型快速调用

Llama-3.2V-11B-cot开源大模型实战教程&#xff1a;双卡4090环境下11B视觉模型快速调用 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡4090环境深度优化。这个工具解决了视觉权重加载的关键问题&am…...

OpenClaw+Qwen3.5-9B:3步搭建自动化内容审核系统

OpenClawQwen3.5-9B&#xff1a;3步搭建自动化内容审核系统 1. 为什么选择OpenClaw做内容审核&#xff1f; 去年运营一个技术社区时&#xff0c;我每天要花2小时手动审核用户提交的内容。直到发现OpenClaw这个开源自动化框架&#xff0c;配合Qwen3.5-9B的多模态能力&#xff…...

U校园脚本背后的技术揭秘:油猴Tampermonkey如何实现自动答题与挂时长?

油猴脚本技术解析&#xff1a;从DOM操作到自动化实践 打开浏览器开发者工具时&#xff0c;你是否注意过那些在页面加载时闪烁的DOM元素&#xff1f;正是这些看似简单的节点操作&#xff0c;构成了现代Web自动化的基础。Tampermonkey&#xff08;油猴&#xff09;作为最流行的用…...

KKManager:Illusion游戏模组管理终极指南,一键安装更新所有插件和卡片

KKManager&#xff1a;Illusion游戏模组管理终极指南&#xff0c;一键安装更新所有插件和卡片 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager KKManager是一…...

别再只跑Demo了!手把手教你用vLLM部署微调后的Qwen2.5-3B-Instruct模型,实现高效批量推理

从微调到生产&#xff1a;Qwen2.5-3B-Instruct模型的高效推理部署实战 当开发者完成LoRA微调后&#xff0c;往往会面临一个现实问题&#xff1a;如何将训练好的模型真正用起来&#xff1f;原生Transformers推理在吞吐量和延迟上的表现&#xff0c;很难满足生产环境的需求。本文…...

FPGA实战:增量式编码器信号处理与高精度位置解算

1. 增量式编码器在工业控制中的核心作用 增量式编码器就像工业设备的"眼睛"&#xff0c;它能精确捕捉旋转物体的位置和速度信息。在数控机床、机械臂、伺服电机等设备中&#xff0c;编码器的精度直接决定了整个系统的控制质量。我做过一个伺服电机项目&#xff0c;编…...

10分钟精通语音识别:FunASR热词定制实战指南

10分钟精通语音识别&#xff1a;FunASR热词定制实战指南 FunASR作为端到端语音识别工具包&#xff0c;其热词定制功能能够显著提升专业术语的识别准确率。在医疗、金融、科技等专业领域&#xff0c;通过简单的配置文件即可实现98%以上的专业词汇识别精度。本文将从零开始&…...

中考真题资源合集

2024版《万唯中考真题分类》合集 文件大小: 2.2GB内容特色: 2024版万唯中考真题按考点分类&#xff0c;全科覆盖适用人群: 初三学生、教师、家长陪读备考核心价值: 刷透真题&#xff0c;精准查漏补缺&#xff0c;冲刺高分下载链接: https://pan.quark.cn/s/73347caeee74 2026…...

Qwen3-VL-8B快速原型开发:基于Typora风格输入实时生成图文并茂的技术文档

Qwen3-VL-8B快速原型开发&#xff1a;基于Typora风格输入实时生成图文并茂的技术文档 不知道你有没有过这样的经历&#xff1a;写一份技术方案或者产品文档&#xff0c;脑子里想法很多&#xff0c;但落到纸上就变得干巴巴的&#xff0c;总觉得缺几张图来说明&#xff0c;或者文…...

快充时代必备!5款USB保护芯片横评:从PW1502到PW1555怎么选?

快充时代USB保护芯片选型指南&#xff1a;5款主流方案深度解析 在快充技术普及的今天&#xff0c;USB接口的电压规格从传统的5V一路攀升至20V甚至更高。这种变化虽然带来了更快的充电速度&#xff0c;却也埋下了设备损坏的隐患——一个不小心将20V快充头插入仅支持5V的设备&…...