矢量量化调试



首先解决方案分成以下三个工程:

trvqsp_img:获得图像矢量量化的码书

vqimg_enc:根据码书对图像进行矢量量化

vqimg_dec:根据码书文件和压缩后的文件重构原始图像

一、调试过程

首先,由于解决方案是VS2012版本的,但是我电脑里只有VS2010,强行打开后发现出现以下问题:

1、显示以下错误:项目文件包含ToolsVersion="12.0"。此工具集可能未知或缺失(您可以通过安装相应版本的MSBuild来解决该问题),或者该生成因策略原因已被强制更改为...

解决方法:右键点击项目,选择属性,再点击配置属性中的常规,常规中有个平台工作集,把V120改成V100,点击应用即可。

2、显示unistd.h头文件找不到,是因为安装时就没有这个文件,所以就新建一个unistd.h文件,内容为

#ifndef _UNISTD_H 

#define _UNISTD_H

#include <io.h>

#include <process.h>

#endif /* _UNISTD_H */

把这个文件添加到各个项目,并把#include<>改成#include””

改完以上两点后,可以运行

二、整体流程

整个流程主要分为两三大部分:一个是训练矢量量化器,获得图像压缩码书;一个是根据码书对文件进行压缩;另一个是根据码书对压缩文件进行解压缩,恢复原始文件。

1trvqsp_img

流程图:

程序中运行过程:

1)打开图像文件与码书文件

2)读取相应参数

3)把图像存到缓冲区trimg

4codebook_size变为之前2倍。对codebook赋值,奇数行不变,偶数行加上一个eps扰动。

5measure>门限值且迭代次数小于100次时,迭代codebook行,如果有匹配训练集行,该行赋值为匹配训练集行的均值;如果没有,则该行赋值为上次码书匹配最多行并加扰动;对训练集每一行找到码书中平方差最小的行,累加起来。

6)重复步骤(5)直到不满足条件

7)重复(4-6)直到codebook_size不再<final_codebook_size

8)输出码书

2vqimg_enc

流程图:

程序中运行过程:

1)打开文件,读取参数

2)把打开的文件存入inimg缓冲区

3)从码书文件读取压缩参数

4)读取Codebook相关参数,并开一个缓冲区codebook存放码书

5)对读入文件分块,对每一块找到对应码书,并计算每个块存在的误差distortion(利用vqencode函数)

6)把码书编号作为内容存放到输出缓冲区,完成输出文件(利用stuffit函数)

7)把所有误差累加起来计算总的误差total_distortion并输出。

3vqimg_dec

流程图:

程序中运行过程:

1)打开文件,读取参数

2)把打开的文件存入cbfile缓冲区

3)开一个缓冲区outimg存放输出文件

4)读取Codebook相关参数,并开一个缓冲区codebook存放码书

5)读入文件,找到每一块的内容,也就是码书的编号。将编号对应的codebook中的内容写到outimg缓冲区。作为输出文件。

6)完成输出文件

 


版权声明:本文为qq_27918645原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。