环境:jupyter(tensorflow)
import numpy as np
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
def svd(A):
# 特征值,特征向量
val,U = np.linalg.eigh(A.dot(A.T))
# 特征值由大到小排序
val_idx = np.argsort(val)[::-1]
val = val[val_idx]
Sigma = np.sqrt(val) #(649,)
# 特征向量由大到小排序
U = U[:,val_idx]
# A = U * Sigma * VT ---> VT = inv_(U * Sigma) * A = inv(Sigma) * UT * A
VT = np.linalg.inv(np.diag(Sigma)).dot(U.T).dot(A)
return U, Sigma, VT
def draw(img1,img2,img3):
fig,ax = plt.subplots(1,3,figsize = (25,30))
ax[0].imshow(img1)
ax[0].set(title = 'src')
ax[1].imshow(img2)
ax[1].set(title = 'nums of sigma = 60')
ax[2].imshow(img3)
ax[2].set(title = 'nums of sigma = 120')
plt.show()
if __name__ == '__main__':
img = mpimg.imread("./mi.png") #(521, 396, 3)
A = img.reshape(521, 396 * 3)
U,Sigma,VT = svd(A)
print(U.shape,Sigma.shape,VT.shape)
nums = 6

博客介绍在jupyter(tensorflow)环境下,使用Python结合SVD(奇异值分解)处理人物图片。图片mi.png从网上下载,尺寸为(521,396,3),还给出了相关参考链接。
最低0.47元/天 解锁文章
755

被折叠的 条评论
为什么被折叠?



