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

2022-05-19 14:11:14 +08:00
 Richard14

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

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

567 次点击
所在节点    问与答
4 条回复
liprais
2022-05-19 14:17:13 +08:00
sklearn 里面有
volvo007
2022-05-19 15:48:44 +08:00
如 LS 所说 sklearn 里面有, 找缩放的部分
这个要手写也简单, 主要分为两部分
1. rgb 转为灰度图, 这个有公式
2. 转完之后是一个 0 - 255 的小数, // 16 即可
ipwx
2022-05-19 15:53:04 +08:00
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
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)

```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/853926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX