【信源编码作业四】基于LBG的矢量量化算法

2023-10-10 04:59

本文主要是介绍【信源编码作业四】基于LBG的矢量量化算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 矢量量化VQ Vector Quantization是70年代后期发展起来的一种数据压缩技术是一种高效的有损数据压缩技术它具有压缩比大、解码简单和失真较小等优点。其基本思想是将若干个标量数据组构成一个矢量,然后在矢量空间给以整体量化,从而压缩了数据而不损失多少信息。矢量量化是香浓信息论在信源编码理论方面的发展,它的理论基础是香浓的率失真理论,率失真理论是一个存在性定理,并非是一个构造性定理,它未给出如何构造,矢量量化器的方法,矢量量化总是优于标量量化,这是因为矢量量化能有效地应用矢量中各,分量之间的4种相互关联性质来消除数据中的冗余度。自从1980年提出矢量量化器Vector

Quantizater码书设计的LBG算法以来矢量量化Vector Quantization技术[Gray1984]已经成功地应用到图像压缩和语音编码中[1]

  二、LBG算法中最佳量化器的设计

  LBG算法中的最佳矢量量化器设计的关键是最佳划分和最佳码书的设计[2]

  一是给定码书条件下,寻找信源空间的最佳划分,使平均失真最小,由码书和NNR得最

佳划分。

  二是在给定划分条件下,寻找最佳码书,使平均失真最小

  给定了划分后为了使码书的平均失真最小,码字必须为相应划分的形心,质心——

式中表示选取的Y是使平均失真为最小的Y,对于一般的失真测度和信源分布,很难找

到形心的计算方法。对于训练序列分布和常用的均方失真测度,形心可由下式给出,式中表示集合中元素的个数,即集中有X个。

  三、矢量量化器的设计算法

  经典的码书设计算法是LBG算法[2]它是Y.LindeA.BuzoR.M.Gray1980年推出

的,其思想是对于一个训练序列,先找出其中心,再用分裂法产生一个初始码书A^0,最后

把训练序列按码书A^0中的元素分组,找出每组的中心,得到新的码书,转而把新码书作为初始码书再进行上述过程,直到满意为止。设计矢量量化器的主要任务是设计码书,在给定码书大小N的情况下由最佳划分和最佳码书两个必要条件得到矢量量化器的设计算法LBG算法既可用于已知信源分布特性情况又可用于未知信源分布特性情况

LBG算法流程描述如下

  此算法基于最佳矢量量化器设计的最佳划分和最佳码书这两个必要条件,是劳埃德算法

在矢量空间的推广,其特点为物理概念清晰、算法理论严密及算法实现容易。但是它有3

个主要缺点:

  1在每次迭代的最佳划分阶段从码书中搜索训练矢量的最近码字需要大量的存储空

间和繁琐的计算。

  2初始码书的选择影响码书训练的收敛速度和最终码书的性能。

  3码书的自适应能力不强。

二、程序调试 
系统:win7 
软件:vs2010
打开程序包项目,进行重新编译及重定项目目标后,运行程序,报错:无法找到unistd.h,







经查询解决方法为: 
新建unistd.h文件,文件内容为:

#ifndef _UNISTD_H
#define _UNISTD_H 
#include <io.h> 
#include <process.h> 
#endif /* _UNISTD_H */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

并将unistd.h文件置于如下路径文件夹中


一、 trvqsp_img:获得图像矢量量化码书。

这个程序可以用来训练矢量量化器使用LBG算法获得图像压缩码书,初始化使用Linde,  Buzo, and Gray提出的分割方法用作。这个项目可以  很长一段时间来运行特别是所需的大小  码书很大。因此这是一个好主意来运行  项目背景。

图像的尺寸可以由用户指定或者由程序直接获得。但是image_size支持少量的图像标准,如果想要支持更多格式的文件需通过编辑文件image_size.c来实现。或者可以在运行时指定图像的尺寸使用选项- x – y)

 

1. 调用参数格式:

trvqsp_img ts_img codefile [-b cb_size] [ -t block_height] [-w block_width] [-x row_size][-y col_size] [-h]

ts_img:训练图像,也即待量化压缩的图像,假定为8位灰度级使用光栅扫描顺序存储。

Codefile:以二进制格式存放码书的文件,有一个包含12个字节的文件记录:向量的维度,以及码的大小。

-b cb_size:码书的大小

-t block_height:块的高度(以像素为单位)

-w block_width:块的宽度(以像素为单位)

实际上由block_width 、block_height决定着码书向量的大小,也即每个输出块的大小。因此向量的维数是block_height *block_width

-x row_size:输入图像的宽

-y col_size:输入图像的高

-h 帮助

 

2. 码书构造流程


 

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

这个程序可以使用矢量量化来压缩图像。需使用trvqsp_img获得的码书文件,码书的大小以及码块的大小包含在指定的码书文件中。这个程序使用的是定长编码,所以可以使用变长编码来优化程序。如果没有指定一个输出文件则从命令框中输出。

 

1. 调用格式:

vqimg_enc [-i imagein] [-o cmpfile] [-c codebook] [-x row_size] [-y col_size] [-h]

-i imagein:输入的待编码的图像文件名

-o cmpfile:输出的量化压缩后的文件名

-c cmpfile:码书文件

-x row_size:输入图像的宽

-y col_size:输入图像的高

-h 帮助

 

2. 量化流程:




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

重建压缩图像使用vqimg_enc。解码需要提供码书文件,而码书文件则通过压缩文件的文件头提供其名称,不需要人为输入。图像是8位灰度级图像,使用光栅扫描顺序存储

 

1. 调用格式:

vqimg_dec [-i cmpfile] [-o imageout] [-h]

-i cmpfile:压缩文件名

-o imageout:重建图像文件名

-h 帮助


 

2. 重构流程


 



 





 


 


 

这篇关于【信源编码作业四】基于LBG的矢量量化算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/178142

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯: