资源简介

本程序用游程编码的思想实现了基于图像数据的压缩方法的实现,并有源代码和文档。

资源截图

代码片段和文件信息

#include“iostream.h“
#include
#include“stdlib.h“
#include“vector“
#include“algorithm“
#include“math.h“
using namespace std;
struct data
{//用于存储码字及其编码结果
int mz;
vector  code;
};
struct rle
{//用于存储每个码字及其个数
int length;
int mz;
};
int get_gd(int n)
{//用于求出编码的长度
int i=0;
int j=n-1;
while(j>0)
{
j=(j-j%2)/2;
i++;
}
return i;
}
void Creadmz(int hdvector& vdint hs)
{//用于构建码字
int w=0;
int ws=get_gd(hd);
for(int i=0;i {
data d;
d.mz=i+hs;
w=i;
while(w>0)
{
if(w % 2  == 1)
d.code.push_back(‘1‘);
else d.code.push_back(‘0‘);
w=(w-w%2)/2.0;
}
for(int m = d.code.size();m  d.code.push_back(‘0‘);
vd.push_back(d);
}
}
void print( vectorvd)
{//用于输出编码结果表明
for(int i=0;i {
cout< for(int j=vd[i].code.size()-1;j>=0;j--)
cout< cout< }
}
void print1( vector  re)
{//输出码及其个数的组合
for(int i=0;i {
cout<<“<“<“<<“ “;
}
}
template  
void print2(vector  cdint n)
{//输出编解码结果
int num=0;
for(int i=0;i {
cout< num++;
if(num%n==0) cout< }
cout<}

/*bool read(vector &vrint hdint & corint &rows)
{//读入要编码的灰度矩阵
int rowacr;
rle re;
cout<<“请输入矩阵的行列数:“< cin>>row;
cin>>acr;
cor=acr;
rows=row;
cout<<“请输入灰度值矩阵:“< for(int i=0;i {
int n;
n=re.mz=0;
if(n==re.mz)
{
cin>>n;
if(n>=hd){vr.clear();  return false;}
}
for(int j=1;j {
re.mz=n;
re.length=0;
while(n==re.mz&&j {
re.length++;
j++;
cin>>n;
if(n>=hd){vr.clear();  return false;}
}
if(n!=re.mz)
{
vr.push_back(re);
if(j==acr)
{
re.mz=n;
re.length=1;
vr.push_back(re);
}
}
else if(j==acr)
{
if(n==re.mz)
{
re.length++;
vr.push_back(re);
}
else {
re.mz=n;
re.length=1;
vr.push_back(re);
}
}
else vr.push_back(re);
}
}return true;
}*/
bool read1(vector & vcint num)
{//用于读取要解码的序列
cout<<“请输入你要解码的序列(以‘#‘号结束):“< char ch;
cin>>ch;
while(ch!=‘#‘)
{
vc.push_back(ch);
cin>>ch;
if(ch!=‘0‘&&ch!=‘1‘&&ch!=‘#‘) {
cout<<“你输入的码序列不正确请较正后rr再输入。“;
vc.clear();
return false;
}
}
if(vc.size()%num!=0)
{
cout<<“你输入的码序列不正确请较正后再输入。“;
vc.clear();
return false;
}
return true;

}
int find(vector  vdint x)
{//用于查找要编码的灰度值是否在灰度级范围内如果在反回相应码在编码序列中的位置
int low=0;
int high=vd.size()-1;
int mid=0;
while(low<=high)
{
mid = (low + high)/2;
if(vd[mid].mz==x) return mid;
else if(x else low = mid +1;
}
cout<<“the element ‘“< return -1;
}
void Encode(vector  vrvector  vdvector vhvector &cd)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     254061  2008-12-15 20:30  RunLength_finsh\Debug\RunLength.exe

     文件     363084  2008-12-15 20:30  RunLength_finsh\Debug\RunLength.ilk

     文件     105612  2008-12-15 20:30  RunLength_finsh\Debug\RunLength.obj

     文件    1881860  2008-12-15 20:29  RunLength_finsh\Debug\RunLength.pch

     文件     648192  2008-12-15 20:30  RunLength_finsh\Debug\RunLength.pdb

     文件      74752  2008-12-15 20:30  RunLength_finsh\Debug\vc60.idb

     文件     110592  2008-12-15 20:30  RunLength_finsh\Debug\vc60.pdb

     文件       5203  2008-12-15 20:30  RunLength_finsh\RunLength.cpp

     文件       3437  2008-12-15 20:29  RunLength_finsh\RunLength.dsp

     文件        543  2008-12-15 20:30  RunLength_finsh\RunLength.dsw

     文件      50176  2008-12-15 20:30  RunLength_finsh\RunLength.ncb

     文件      48640  2008-12-15 20:30  RunLength_finsh\RunLength.opt

     文件       1453  2008-12-15 20:30  RunLength_finsh\RunLength.plg

     文件      92160  2008-12-15 20:27  RunLength_finsh\游程编码.doc

     目录          0  2008-12-15 20:30  RunLength_finsh\Debug

     目录          0  2008-12-17 19:35  RunLength_finsh

----------- ---------  ---------- -----  ----

              3639765                    16


评论

共有 条评论