机器学习——奇异值分解案例(图片压缩-代码简洁版)

news2024/11/26 11:38:17

本想大迈步进入前馈神经网络
但是…唉…瞅了几眼,头晕
然后想到之前梳理的奇异值分解、主成分分析、CBOW都没有实战
如果没有实际操作,会有一种浮在云端的虚无感
但是如果要实际操作,我又不想直接调用库包
可是…如果不直接调包,感觉自己又像是在造轮子造螺丝,明明别人都已经造好了,为什么还要自己造一遍呢
意义何在?
这又让我回想当初开始机器学习的初衷:消磨时间
既然初衷至今没变,那就不应该求快,应该尽可能合格专业地磨洋工
生活本就没有意义,再加快脚步,又有什么意义呢?
slow down
好叭,那就慢慢来,自己造个破破烂烂的轮子,也能敝帚自珍

通过奇异值分解,来压缩图片

这就需要opencv来获取图片的RGB信息。

import cv2
img = cv2.imread("crab.png", 1)
print(img)

首先,获取到的图片信息是个嵌套数组,一般每个像素表示一个向量,这个向量里含有RGB三个数值

获取到的颜色信息数据,是个嵌套数组,并不是奇异值分解中的标准矩阵形式
在这里插入图片描述

因此,我们需要将RGB这三个颜色通道的数据拆分开,变成三个矩阵

  • 矩阵1:表示红色通道的图片信息
  • 矩阵2:表示绿色通道的图片信息
  • 矩阵3:表示蓝色通道的图片信息
b,g,r = cv2.split(img)

算了,还是直接给出完整代码吧

import cv2
import numpy as np

# 前k个sigma
k = 1000

# 读取三通道颜色
img = cv2.imread("img1.png", 1)
colors = cv2.split(img)

new_colors = []
for c in colors:
    # 奇异值分解
    u, sigma, v = np.linalg.svd(c, full_matrices=0)
    u = u[:,:k] # 获取U的前k列
    sigma = np.diag(sigma[:k]) # 奇异值是一个一维向量,将奇异值构造成对角矩阵
    v = v[:k,:] # 获取V的前k行
    
    # 组建压缩后的新矩阵
    a = np.matmul(u,sigma)
    new_c = np.matmul(a,v)
    """转型!!!很重要!!!!因为矩阵计算后是float型,float型在cv2的显示有很大问题!!!!!!!!!!"""
    new_c = new_c.astype('uint8')
    new_colors.append(new_c)
    
# 展示原图与压缩图片
cv2.imshow("img-old", cv2.merge(colors))
cv2.imshow("img-new", cv2.merge(new_colors))
cv2.waitKey(0)

这是k=1000时的对比在这里插入图片描述
这是k=100时的样子
在这里插入图片描述
K的取值范围,是基于sigma奇异值的个数范围内
因此,有些人为了避免自己k值设置超出范围报错,可以加以限制
但我被下边的bug烦了4个小时,有些气恼,懒得搞了

找了4个小时的bug!!!!!!居然是没有将float转为整数!!!含恨吐血

new_c = new_c.astype('uint8')

没有转型,就会变成下边这样,。,。。。。鬼样!!
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【苍穹外卖 | 项目日记】第九天 万字总结

前言: 之前就写完了,用了几天补一下项目总结,本文会从宏观上介绍整体项目构架和所应用的技术以及项目亮点,最后再加上我个人的感悟。本文适合打算开始写苍穹外卖的小伙伴阅读,提高对整体项目的认知。 往期项目日记&am…

XSS 漏洞详解

XSS 漏洞详解 文章目录 XSS 漏洞详解漏洞描述漏洞原理漏洞场景漏洞评级漏洞危害漏洞验证漏洞利用防御方案典型案例 漏洞描述 XSS全名叫Cross Site Scripting(跨站脚本攻击)因为简写和css同名所以改名为XSS,该漏洞主要利用javascript可以控制html,css&am…

Redis6的IO多线程分析

性能测试 机器配置 C Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 14 On-line CPU(s) list: 0-13 Mem: 62G性能 配置推荐 官方表示,当使用redis时有性能瓶…

ARM-Cortex_M3/M4处理器开发简介

一、关于ARM-Cortex_M4处理器 ARM-Cortex_M3和ARM-Cortex_M4处理器使用32位架构,寄存器组中的内部寄存器、数据通路以及总线接口都是32位的,两者均基于ARMv7-M架构。 1、 Cortex_M处理器使用的指令集架构(ISA)为Thumb ISA&…

Element-Ui入门教学——<el-upload>限制上传文件类型

要限制<el-upload>上传文件的类型&#xff0c;需要给组件绑定:before-upload属性。 before-upload可选参数, 上传文件之前的钩子&#xff0c;参数为上传的文件&#xff0c;若返回 false 或者 Promise 则停止上传。HTML代码 <template><el-uploadclass"uplo…

将 ONLYOFFICE 文档编辑器与 С# 群件平台集成

在本文中&#xff0c;我们会向您展示 ONLYOFFICE 文档编辑器与其自有的协作平台集成。 ONLYOFFICE 是一款开源办公套件&#xff0c;包括文本文档、电子表格和演示文稿编辑器。这款套件支持用户通过文档编辑组件扩展第三方 web 应用的功能&#xff0c;可直接在应用的界面中使用。…

【Java0基础学Java第八颗】 -- 继承与多态 -- 继承

8.继承与多态 8.1 继承8.1.1 为什么需要继承8.1.2 继承概念8.1.3 继承的语法8.1.4 super关键字8.1.5 父类成员访问子类中访问父类的成员变量子类中访问父类的成员方法 8.1.6 子类构造方法8.1.7 super和this8.1.8 再谈初始化8.1.9 protected 关键字同一包中同一类同一包中不同的…

蓝桥杯每日一题2023.11.10

“蓝桥杯”练习系统 (lanqiao.cn) 题目描述 题目分析 对于此题&#xff1a;我们看到题目要求尽可能大&#xff0c;会联想到二分&#xff0c;注意切出的一定为正方形&#xff0c;其能切出的个数为(h[i] / x) * (w[i] / x)&#xff0c;将所有的个数与要求的个数进行对比&#x…

算术运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符

1.算术运算符 public class OperatorDemo1 {public static void main(String[] args) {int a 10;int b 2;System.out.println(a b);System.out.println(a - b);System.out.println(a * b);System.out.println(a / b);System.out.println(5 / 2);System.out.println(5.0 / 2);…

相机标定:理论与实践

先讨论相机模型&#xff0c;说明投影关系的描述&#xff0c;介绍相机的内外参&#xff0c;最后完成标定。 一、内参含义 把需要标定的相机参数叫做内参&#xff08;intrinsics matrix&#xff09;&#xff0c;它决定了物体的实际位置Q在成像平面上的投影位置q&#xff0c;如下…

MySQL其他集群类型介绍

常用的/常见的Mysql集群方案 1.MySQL Replication2.MySQL Fabric3.MySQL NDB Cluster4.MGR&#xff08;MySQL Group Replication&#xff09;5.心跳检测SAN共享存储&#xff08;heartbeat SAN&#xff09;6.心跳检测DRBD磁盘复制&#xff08;heartbeat DRBD&#xff09;7.MMM…

IDEA 28 个天花板技巧 + 12 款神级插件,生产力起飞...

IDEA 作为Java开发工具的后起之秀&#xff0c;几乎以碾压之势把其他对手甩在了身后&#xff0c;主要原因还是归功于&#xff1a;好用&#xff1b;虽然有点重&#xff0c;但依旧瑕不掩瑜&#xff0c;内置了非常多的功能&#xff0c;大大提高了日常的开发效率&#xff0c;下面汇总…

鸿蒙原生应用开发-DevEco Studio远程模拟器的使用

使用单设备模拟器运行应用/服务 Remote Emulator支持Phone、Wearable、Tablet、TV等设备类型&#xff0c;但不同区域&#xff08;开发者帐号注册地&#xff09;支持的设备类型可能不同&#xff0c;请以实际可申请的设备类型为准。 Remote Emulator中的单设备模拟器&#xff08…

FL Studio21.2宿主软件中文免费版下载

纵观当下宿主软件市场&#xff0c;正值百家争鸣、百花齐放之际像Mac系统的Logic Pro X、传统宿主软件代表Cubase、录音师必备Pro Tools、后起之秀Studio One等&#xff0c;都在各自的领域具有极高的好评度。而在众多宿主软件中&#xff0c;有这么一款历久弥新且长盛不衰的独特宿…

Java类和对象(2)

&#x1f435;本文继续讲解类和对象相关知识 一、封装 封装就是将对象的属性和实现方法隐藏起来&#xff0c;外部无法获得具体的实现细节&#xff0c;只对外公开接口和对象进行交互&#xff0c;将对象的属性隐藏起来的办法就是用关键字private&#xff0c;被private修饰的成员…

安科瑞电力监控系统在浙中总部经济中心的设计与应用

安科瑞 崔丽洁 摘要&#xff1a;电力供应是整个社会生产、人民生活的基本保证之一&#xff0c;也是全世界普遍的能源形式&#xff0c;而且多数资源都被人类运用各种方式转换为电能而加以利用&#xff0c;经济的高速运行也使各领域的用电负荷急速上升&#xff0c;各种疏漏和故障…

刷题学习记录BUUCTF

[极客大挑战 2019]RCE ME1 进入环境直接就有代码 <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($co…

社区街道治安智慧监管方案,AI算法赋能城市基层精细化治理

一、背景需求分析 随着城市建设进程的加快&#xff0c;城市的管理也面临越来越多的挑战。例如&#xff0c;在城市街道的管理场景中&#xff0c;机动车与非机动车违停现象频发、摊贩占道经营影响交通、街道垃圾堆积影响市容市貌等等&#xff0c;都成为社区和街道的管理难点。这…

中波发射机概述

一、简介 1.1 中波发射机简介 中波发射机是一种用于广播电台传输中波频率信号的设备。它们是广播电台系统的重要组成部分&#xff0c;用于发送声音、音乐和其他信息到广泛的地理区域。中波频率范围一般介于530kHz至1700kHz之间&#xff0c;具有较好的传播性能&#xff0c;可以…