浙江省建设厅网站在哪里,ui设计简介,上海 企矩 网站建设,wordpress中数据库文章目录 一、SVD奇异值分解简单介绍二、代码实现—SVD奇异值分解方法对图像进行压缩 一、SVD奇异值分解简单介绍
SVD#xff08;奇异值分解#xff09;是一种在信号处理、统计学、线性代数、机器学习等多个领域广泛应用的矩阵分解方法。它将任何 mn 矩阵 A 分解为三个特定矩… 文章目录 一、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 可以用于求解线性方程组 Axb特别是当 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_picu, sigma, vt np.linalg.svd(pic_array) # 进行奇异值分解sig np.eye(k) * sigma[: k] # np.eye 用于生成一个单位对角矩阵# np.dot 用于矩阵的乘法运算 (计算AUΣ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, cmapgray)
ax[0].set_title(before compress)
ax[1].imshow(new_img, cmapgray)
ax[1].set_title(after compress)
plt.show()结果如下 由结果可以看出图片的大小大约被压缩至原大小的60%但是图片所呈现出来的效果没有太大的变化