|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 yinda_peng 于 2024-8-9 11:11 编辑
- import numpy as np
- from numpy import linalg as LA
- from PIL import Image
- import pylab as plt
- plt.rc('font',size=13)
- plt.rc('font',family='SimHei')
- a = Image.open("C:/Users/Lenovo/Pictures/Camera Roll/魁拔.jpg") #打开图像
- if a.mode != 'L':
- a = a.convert("L") #转化为灰度图像
- b = np.array(a).astype(float)
- [p,d,q] = LA.svd(b)
- m,n=b.shape #如果不转换为灰度,这里可能会因为too many values报错
- R = LA.matrix_rank(b)
- plt.figure(0)
- plt.plot(np.arange(1,len(d)+1),d,'k.')
- plt.title('图像矩阵的奇异值')
- CR = []
- for K in range(1,int(R/4),50): #如果较多,自行调整步长大小
- plt.figure(K)
- plt.subplot(121)
- plt.title('原图')
- plt.imshow(b,cmap='gray')
- I = p[:,:K+1]@(np.diag(d[:K+1]))@(q[:K+1,:])
- plt.subplot(122)
- plt.title("图像矩阵的秩="+str(K))
- plt.imshow(I,cmap='gray')
- src=m*n
- compress=K*(m+n+1)
- radio=(1-compress/src)*100 #计算压缩比率
- CR.append(radio)
- print("Rank=%d;K=%d个;radio=%5.2f"%(R,K,radio))
- plt.figure()
- plt.plot(range(1,int(R/4),50),CR,'ob-') #如果上面的步长调整,这里记得跟着改变
- plt.title("奇异值个数与压缩比率的关系")
- plt.xlabel("奇异值的个数")
- plt.ylabel("压缩比率")
- plt.show()
复制代码
|
评分
-
查看全部评分
|