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

本想大迈步进入前馈神经网络
但是…唉…瞅了几眼,头晕
然后想到之前梳理的奇异值分解、主成分分析、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.rhkb.cn/news/187469.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络笔记】Internet网络的网络层——IP协议之IP数据报的结构

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

Pytorch实战教程(一)-神经网络与模型训练

0. 前言 人工神经网络 (Artificial Neural Network, ANN) 是一种监督学习算法,其灵感来自人类大脑的运作方式。类似于人脑中神经元连接和激活的方式,神经网络接受输入,通过某些函数在网络中进行传递,导致某些后续神经元被激活,从而产生输出。函数越复杂,网络对于输入的数…

离线视频ocr识别

sudo apt-get install libleptonica-dev libtesseract-dev sudo apt-get install tesseract-ocr-chi-sim python -m pip install video-ocrwindows安装方法: 下载安装 https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-5.3.3.20231005.exe 下…

百度智能云千帆大模型平台再升级,SDK版本开源发布!

文章目录 1. SDK的优势2. 千帆SDK:快速落地LLM应用3. 如何快速上手千帆SDK3.1 SDK快速启动3.2 SDK进阶指引3.3 通过Langchain接入千帆SDK 4. 开源社区 百度智能云千帆大模型平台再次升级!在原有API基础上,百度智能云正式上线Python SDK&#…

nodejs express vue 酒店预订系统源码

开发环境及工具: nodejs,vscode(webstorm),大于mysql5.5 技术说明: nodejs express vue elementui 功能介绍: 用户端: 用户登录注册 首页显示轮播图,客房分类&…

【媒体邀约】媒体宣传——企业成长的催化剂

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传是企业成长的催化剂,它在各种方面对企业的成功和发展起到了关键作用。 1. 曝光和知名度: 媒体宣传可以将企业和其产品或服务推向广泛的受众,…

通义千问, 文心一言, ChatGLM, GPT-4, Llama2, DevOps 能力评测

引言 “克隆 dev 环境到 test 环境,等所有服务运行正常之后,把访问地址告诉我”,“检查所有项目,告诉我有哪些服务不正常,给出异常原因和修复建议”,在过去的工程师生涯中,也曾幻想过能够通过这…

CSRF(跨站请求伪造)攻击演示

目录 CSRF(跨站请求伪造)攻击演示CSRF 是什么CSRF 演示项目代码CSRF 演示过程服务启动演示 CSRF(跨站请求伪造)攻击演示 CSRF 是什么 CSRF(Cross-Site Request Forgery)跨站请求伪造,是一种网络安全攻击,其目标是利用被攻击者在…

搭建完全分布式Hadoop

文章目录 一、Hadoop集群规划二、在主节点上配置Hadoop(一)登录虚拟机(二)设置主机名(三)主机名与IP地址映射(四)关闭与禁用防火墙(五)配置免密登录&#xff…

计算机毕业设计 基于SpringBoot的养老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

MATLAB中deconvwnr函数用法

目录 语法 说明 示例 使用 Wiener 滤波对图像进行去模糊处理 deconvwnr函数的功能是使用 Wiener 滤波对图像进行去模糊处理。 语法 J deconvwnr(I,psf,nsr) J deconvwnr(I,psf,ncorr,icorr) J deconvwnr(I,psf) 说明 J deconvwnr(I,psf,nsr) 使用 Wiener 滤波算法对…

02-PostgreSQL的基本使用

一、数据库操作 ①: 登录到数据库 psql -U postgres -d postgres -h 127.0.0.1②:查看所有数据库 \l③: 创建数据库 # 创建一个名为 mydb 的数据库 create database mydb;④:切换数据库 # \c 数据库名 \c mydb⑤:删除数据库 # 删除前 先确保数据库没有被连接 drop databa…

安卓RadioButton设置图片大小

RadioButton都不陌生,一般我们都会设置图片在里面,这就涉及一个问题,图片的大小。如果图片过大,效果很不理想。搜了很多方法,都不理想。无奈只能自己研究了 代码如下: 1,一个简单的 RadioButt…

html与django实现多级数据联动

html与django实现多级数据联动 1、流程 1、进入页面后先获取年级数据 2、选择年级后获取院级数据 3、选择院级后获取层次数据 4、选择层次数据后获取专业数据 2、html代码 <p style"margin-top: 10px;"><label>年级</label><select id"…

认识计算机-JavaEE初阶

文章目录 一、计算机的发展史二、冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09;三、CPU基本工作流程3.1 算术逻辑单元&#xff08;ALU&#xff09;3.2 寄存器&#xff08;Register)和内存&#xff08;RAM&#xff09;3.3 控制单元&#xff08;CU&#xff09;3…

深入理解 TCP;场景复现,掌握鲜为人知的细节

握手失败 第一次握手丢失了&#xff0c;会发生什么&#xff1f; 当客户端想和服务端建立 TCP 连接的时候&#xff0c;首先第一个发的就是 SYN 报文&#xff0c;然后进入到 SYN_SENT 状态。 在这之后&#xff0c;如果客户端迟迟收不到服务端的 SYN-ACK 报文&#xff08;第二次…

Apache Airflow (四) :Airflow 调度shell命令

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

Delphi 12 重返雅典 (RAD Studio 12)

RAD Studio 12 的新功能&#xff1a; 以最新的平台版本为目标&#xff01; RAD Studio 12 提供对 iOS 17&#xff08;仅适用于 Delphi&#xff09;、Android 14 和 macOS Sonoma 的官方支持。RAD Studio 12 还支持 Ubuntu 22 LTS 和 Windows Server 2022。 Delphi 源代码的多…

<蓝桥杯软件赛>零基础备赛20周--第5周--杂题-2

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

一题三解(暴力、二分查找算法、单指针):鸡蛋掉落

涉及知识点 暴力、二分查找算法、单指针 题目 给你 k 枚相同的鸡蛋&#xff0c;并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 0 < f < n &#xff0c;任何从 高于 f 的楼层落下的鸡蛋都会碎&#xff0c;从 f 楼层或比它低的…