V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Richard14
V2EX  ›  问与答

Numpy 对一串向量进行量化有什么简便写法吗

  •  
  •   Richard14 · 2022-05-19 14:11:14 +08:00 · 652 次点击
    这是一个创建于 949 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,生成图片指纹过程中为了压缩信息量需要对像素值进行量化,比如一个像素的原始 rgb 取值范围是 0-255 ,希望将其压缩到 0-16 的取值范围里,即处理过程中 0-16 统一标记为 0 ,16-32 统一标记为 1 ,32-48 统一标记为 2 以此类推,类似这种转换有什么内建的写法吗?还是说要自己写 16 次 if 判断。。

    另外还有一种情况是,量化可能不按照线性量化,根据像素的分布概率也有可能按对数坐标量化,感觉更麻烦了。。

    4 条回复    2022-05-19 16:44:52 +08:00
    liprais
        1
    liprais  
       2022-05-19 14:17:13 +08:00
    sklearn 里面有
    volvo007
        2
    volvo007  
       2022-05-19 15:48:44 +08:00
    如 LS 所说 sklearn 里面有, 找缩放的部分
    这个要手写也简单, 主要分为两部分
    1. rgb 转为灰度图, 这个有公式
    2. 转完之后是一个 0 - 255 的小数, // 16 即可
    ipwx
        3
    ipwx  
       2022-05-19 15:53:04 +08:00   ❤️ 1
    1)

    import numpy as np
    im = np.array([0,1,15,16])
    np.asarray(im / 16, dtype=int) # array([0, 0, 0, 1])

    2)
    随便运算,最后取整。
    tinytoadd
        4
    tinytoadd  
       2022-05-19 16:44:52 +08:00
    ```
    import numpy as np

    def compress(val):
    return val//16

    vcomp = np.vectorize(compress)

    pic = (np.random.rand(100,100,1) * 255).astype('uint8')
    print(pic)

    pic[...,0]=vcomp(pic[...,0])
    print(pic)

    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2569 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:37 · PVG 23:37 · LAX 07:37 · JFK 10:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.