数据压缩实验[3]:量化器调试

均匀标量量化

示例程序调试与运行

均匀标量量化编码器uqimg_enc

以量化索引比特数确定量化等级数,输入值范围[0,255],此时运行参数为:

-i [输入img图像文件路径] -o [输出量化索引文件路径] -b [量化比特数]

例如:

-i ../images/sena.img -o ../images/quantized_img/sena_6bit.quan -b 6

其余情况见程序中usage()函数。

均匀标量量化解码器uqimg_dec

运行参数为:

-i [输入量化索引文件路径] -o [输出img图像文件路径]

例如:

-i ../images/quantized_img/sena_4bit.quan -o ../images/reconstructed_img/sena_4bit_re.img

运行结果

以sena图像为例,不同量化等级下输出结果为:
请添加图片描述

不同量化等级量化比特数与PSNR性能结果如下:

BitsOriginal sizeQuantized sizeCompress RatioPSNR
164kB8.00kB12.5%18.62
264kB16.0kB25.0%21.51
464kB32.0kB50.0%35.00
664kB48.0kB75.0%46.46

矢量量化

示例程序调试与运行

LBG算法程序trvqsp_img

运行参数为:

[输入img图像文件路径] [输出码书文件路径] -b [码书中码矢数量] -w [合并为矢量的block宽度] -t [合并为矢量的block高度]

例如,对于sena图像,将2x2像素块合并为矢量,采用LBG算法将其构成的4维空间划分为64个区域(对应64个码矢)

../images/sena.img ../images/codebooks/sena22_64.cb -b 64 -w 2 -t 2

其余参数见程序Usage()函数。

编码器vqimg_enc

使用得到的码书进行编码,参数为:

-i [输入img图像文件路径] -o [输出量化索引文件路径] -c [码书文件路径]

例如:

-i ../images/sena.img -o ../images/quantized_img/sena22_16.vquan -c ../images/codebooks/sena22_16.cb

解码器vqimg_dec

参数为:

-i [输入量化索引文件路径] -o [输出重建图像文件路径]

例如:

-i ../images/quantized_img/sena22_16.vquan -o ../images/reconstructed_img/sena22_16_re.img

运行结果

以sena图像为例,2x2分块下不同码矢划分级数输出结果为:
请添加图片描述
请添加图片描述

不同量化等级量化比特数与PSNR性能结果如下:

levelsOriginal sizeQuantized sizeCompress RatioPSNR
1664kB8.00kB + 76B12.6%32.48
3264kB10.0kB + 140B15.8%34.83
6464kB12.0kB + 268B19.1%36.48
12864kB14.0kB + 524B22.7%38.18
25664kB16.0kB + 1036B26.6%39.84

可见对于图像文件,矢量量化可在一定程度上利用像素间的相关性,性能大幅领先于均匀标量量化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
矢量量化(Vector quantizer)是一种用于数据压缩数据量化的技术。在python中,可以使用scikit-learn库中的聚类算法来实现矢量量化。 首先,我们需要导入scikit-learn库和需要的数据。假设我们有一个包含n个d维数据点的数据集X。 ```python from sklearn.cluster import KMeans # 导入数据 X = ... # 创建矢量量化对象 quantizer = KMeans(n_clusters=k) # 应用矢量量化进行聚类 quantizer.fit(X) # 获取聚类中心 centroids = quantizer.cluster_centers_ # 使用聚类中心来量化数据 quantized_data = quantizer.predict(X) ``` 在上面的代码中,我们首先创建了一个KMeans对象作为矢量量化,其中n_clusters参数指定了聚类的个数。然后,我们使用fit()方法来对数据进行聚类,得到聚类中心。最后,我们使用predict()方法来将数据量化到对应的聚类中心。 量化后的数据quantized_data是一组聚类标签,表示每个数据点属于哪个聚类中心。聚类中心centroids是一组d维向量,表示每个聚类的中心点。 在实际应用中,矢量量化可以用于数据压缩、特征提取和数据聚类等任务。通过将数据点映射到聚类中心,可以减少数据的维度,并且保留了原始数据的一些特征。这可以用于降低数据存储和传输的成本,同时还可以在一定程度上提高算法的效率和准确性。 总之,使用python中的聚类算法,我们可以很方便地实现矢量量化,并应用于各种数据分析和机学习任务中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值