图像奇异值分解SVD遇到的奇怪问题

一开始做图像奇异值分解实验,用的

u, sigma, v = np.linalg.svd()

出来的全是乱码图像

怎么调整都不行,简直要抓狂了 ` 0 ` !!! 

后来在别人电脑上跑了一下,竟然有效果!

找问题!!调整numpy的版本,

pip install numpy==1.16.5

果然解决了!!!

应该是numpy版本问题,或者文件损坏了,么得办法!

把numpy升级到最新版的命令如下,但可能会如系统中的tensorflow版本不兼容:

pip install -U numpy

pip install --upgrade numpy

 


from PIL import Image
import numpy as np

def rebuild_img(u, sigma, v, p): #p表示奇异值的百分比
    print (p)
    m = len(u)
    n = len(v)
    a = np.zeros((m, n))
    
    count = (int)(sum(sigma))
    curSum = 0
    k = 0
    while curSum <= count * p:
        uk = u[:, k].reshape(m, 1)
        vk = v[k].reshape(1, n)
        a += sigma[k] * np.dot(uk, vk)
        curSum += sigma[k]
        k += 1
    print ('k:',k)
    a[a < 0] = 0
    a[a > 255] = 255
    #按照最近距离取整数,并设置参数类型为uint8
    return np.rint(a).astype("uint8")
    
if __name__ == '__main__':
    img = Image.open('lena.jpg', 'r')
    a = np.array(img)
    print("a.shape: ",a.shape)
    
    for p in np.arange(0.1, 1, 0.1):
        u, sigma, v = np.linalg.svd(a[:, :, 0])
        print("R:sigma.shape :",sigma.shape)
        R = rebuild_img(u, sigma, v, p)
        
        u, sigma, v = np.linalg.svd(a[:, :, 1])
        print("G:sigma.shape :",sigma.shape)
        G = rebuild_img(u, sigma, v, p)
        
        u, sigma, v = np.linalg.svd(a[:, :, 2])
        print("B:sigma.shape :",sigma.shape)
        B = rebuild_img(u, sigma, v, p)
        
        I = np.stack((R, G, B), 2)
        #保存图片在img文件夹下
        print(I.shape)              
                 
        Image.fromarray(I).save("lena_" + str(p * 100) + ".jpg")
        
  

 

lena.jpg

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值