1.前言
因为python的特征值分解存在复数矩阵的情况,而后续步骤不能很好的兼容复数,于是采用了范围更广的奇异值分解(SVD)进行图像处理。并且在后续测试中选取了不同的特征值进行保留(并不一定是最大的特征值)。
2.准备
numpy 处理矩阵
学习:https://blog.youkuaiyun.com/a373595475/article/details/79580734
PIL 图像处理
imageio 图像处理
3.奇异值分解(含源码)
3.1过程
上面是本次的案例图片
import numpy as np
from PIL import Image
import imageio
#获取图像并转换为三维数组
img=Image.open('妹子.jpg')
a=np.asarray(img)
下图是a矩阵的shape
可见是一个512 x 512 x 3的三维矩阵,第三个维度代表了每个像素点的RGB值,我们不妨将其考虑为R,G,B三个512 x 512的二维矩阵,分别进行奇异值分解,再对其进行整合,得到一个新的三维矩阵。
#定义重构函数
def rebuildimg(u,sigma,v,p,q):
m=len(u)
n=len(v)
a<