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

本想大迈步进入前馈神经网络

但是...唉...瞅了几眼,头晕

然后想到之前梳理的奇异值分解、主成分分析、CBOW都没有实战

如果没有实际操作,会有一种浮在云端的虚无感

但是如果要实际操作,我又不想直接调用库包

可是...如果不直接调包,感觉自己又像是在造轮子造螺丝,明明别人都已经造好了,为什么还要自己造一遍呢

意义何在?

这又让我回想当初开始机器学习的初衷:消磨时间

既然初衷至今没变,那就不应该求快,应该尽可能合格专业地磨洋工

生活本就没有意义,再加快脚步,又有什么意义呢?

slow down

好叭,那就慢慢来,自己造个破破烂烂的轮子,也能敝帚自珍

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

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

python 复制代码
import cv2
img = cv2.imread("crab.png", 1)
print(img)

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

获取到的颜色信息数据,是个嵌套数组,并不是奇异值分解中的标准矩阵形式

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

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

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

python 复制代码
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转为整数!!!含恨吐血

python 复制代码
new_c = new_c.astype('uint8')

没有转型,就会变成下边这样,。,。。。。鬼样!!

相关推荐
之墨_35 分钟前
【大语言模型】—— 自注意力机制及其变体(交叉注意力、因果注意力、多头注意力)的代码实现
人工智能·语言模型·自然语言处理
从孑开始1 小时前
ManySpeech.MoonshineAsr 使用指南
人工智能·ai·c#·.net·私有化部署·语音识别·onnx·asr·moonshine
涛涛讲AI1 小时前
一段音频多段字幕,让音频能够流畅自然对应字幕 AI生成视频,扣子生成剪映视频草稿
人工智能·音视频·语音识别
可触的未来,发芽的智生2 小时前
新奇特:黑猫警长的纳米世界,忆阻器与神经网络的智慧
javascript·人工智能·python·神经网络·架构
悟乙己2 小时前
MLops | 基于AWS Lambda 架构构建强大的机器学习(ML)血缘关系
机器学习·架构·aws
WWZZ20252 小时前
快速上手大模型:机器学习2(一元线性回归、代价函数、梯度下降法)
人工智能·算法·机器学习·计算机视觉·机器人·大模型·slam
AKAMAI2 小时前
数据孤岛破局之战 :跨业务分析的难题攻坚
运维·人工智能·云计算
Chicheng_MA2 小时前
算能 CV184 智能相机整体方案介绍
人工智能·数码相机·算能
Element_南笙2 小时前
吴恩达新课程:Agentic AI(笔记2)
数据库·人工智能·笔记·python·深度学习·ui·自然语言处理
倔强青铜三3 小时前
苦练Python第69天:subprocess模块从入门到上瘾,手把手教你驯服系统命令!
人工智能·python·面试