File size: 690 Bytes
b2d86b7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np

def rebuild_img(u, sigma, v, percent): #p表示奇异值的百分比
    m = len(u)
    n = len(v)
    a = np.zeros((m, n))
 
    #根据指定的清晰度提取奇异值
    #(清晰度越高,压缩比越低,提取的奇异值的个数也就越多,图片也就越不会失真)
    count = (int)(sum(sigma))
    curSum = 0
    k = 0
    while curSum <= count * percent:
        uk = u[:, k].reshape(m, 1)
        vk = v[k].reshape(1, n)
        a += sigma[k] * np.dot(uk, vk)
        curSum += sigma[k]
        k += 1
 
    a[a < 0] = 0
    a[a > 255] = 255
    #按照最近距离取整数,并设置参数类型为uint8
    return np.rint(a).astype("uint8")