圖片SVD-python code
阿新 • • 發佈:2018-11-30
#svd from PIL import Image import numpy as np def rebuild_img(u, sigma, v, p): #p表示奇異值的百分比 m = len(u) n = len(v) A=np.zeros((m,n)) for i in range(int(len(sigma)*p)): #print(i) A[i,i]=sigma[i] #print(A) a=np.dot(np.dot(u,A),v) a[a < 0] = 0 a[a > 255] = 255 #按照最近距離取整數,並設定引數型別為uint8 return np.rint(a).astype("uint8") if __name__ == '__main__': img = Image.open('C:/Users/van/Pictures/Saved Pictures/1.jpg', 'r') a = np.array(img) u, sigma, v = np.linalg.svd(a[:, :, 0]) print(np.array(sigma).shape) print(np.array(u).shape) print(np.array(v).shape) for p in np.arange(0.01, 0.1, 0.01): u, sigma, v = np.linalg.svd(a[:, :, 0]) R = rebuild_img(u, sigma, v, p) u, sigma, v = np.linalg.svd(a[:, :, 1]) G = rebuild_img(u, sigma, v, p) u, sigma, v = np.linalg.svd(a[:, :, 2]) B = rebuild_img(u, sigma, v, p) I = np.stack((R, G, B), 2) #儲存圖片在img資料夾下 Image.fromarray(I).save("C:/Users/van/Pictures/Saved Pictures/svd_" + str(p * 100) + ".jpg")
reference:https://blog.csdn.net/xuelabizp/article/details/52318708