⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 这是我刚刚完成的关于JPEG2000的C语言实现的部分程序。小波变换是采用97变换
💻 C
字号:
/******************************************************************************
功能描述:
   Implements 9/7 小波变换的编码解码,EBCOT的编码和解码及MQ	的编码解码实现
******************************************************************************/
/*****************************************************************************/
// 程序: 主函数
// 版本:  V0.0

// 作者: 胡运平
// 最后修改时间 : 12, 5, 2005
/****************************************************************************/
#include <stdio.h>
#include<math.h>
#include"fdwt.h"
#include"sampledata.h"
#include"block_encode.h"
#include"mq_code.h"

#define debug
#define debuglietransform
#define fdwt

int block_bufferin[BLOCKLENGTH][BLOCKWIDTH];
int block_bufferout[BLOCKLENGTH][BLOCKWIDTH];	
void main()
{
	FILE *in,*out,*inter;
	unsigned char unsigdata;
	int i,j;		
	int k;
	if ((in = fopen("lena512x512in.raw","rb")) == NULL)
	{
		printf("cannot open inputfile\n");
		return;
	}
		if((out = fopen("97wave_out.raw","wb+")) == NULL)
	{
		printf("cannot open outfile\n");
		return;
	}
	if((inter = fopen("interleave.raw","wb+")) == NULL)
	{
		printf("cannot open outfile\n");
		return;
	}
for(i = 0;i<LENGTH;i++)
		for(j = 0;j<WIDTH;j++)
		{

			fread(&unsigdata, 1,1,in);
			buffer[i+4][j+4] = (float) unsigdata;
//			fwrite(&unsigdata, 1,1,out);
//			buffer[i+4][j+4] = (float)data[i][j];
		}
//	fclose(out);
#ifdef debug
//		for(i = 0;i<LENGTH;i++)
//			for(j = 0;j<WIDTH;j++)
//			{
//				fwrite(&buffer[i][j], 1,1,out);
//			}
//		fclose(out);
#endif
	
	//DC变换
	for(i = 0;i<LENGTH;i++)//行
	{	
		for(j = 0;j<WIDTH;j++)//列
		{
			buffer[i+4][j+4] = (buffer[i+4][j+4]-128);
		}		
	}
#ifdef debug
//		for(i = 0;i<LENGTH;i++)
//			for(j = 0;j<WIDTH;j++)
//			{
//				fwrite(&buffer[i][j], 1,1,out);
//			}
//		fclose(out);
#endif
	dwt(buffer,interleave,bufferout);
/*****************************************************************************
以下是量化部分。暂时量化步长取1。
******************************************************************************/
/******************************************************************************
功能描述:
         Implements block_encode 
         对EBCOT的编码。三个通道。四种编码形式
功能描述:编码过程中,每个系数总处于三种状态之一:无效态,有效态,上下文有效态
******************************************************************************/
encode_allsubband(block_bufferin,interleave);
/******************************************************************************
以上完成EBCOT的编码,输出送入MQ算术编码器中
******************************************************************************/
mq_code();

/*****************************************************************************
功能描述:
		MQ解码函数
		对输出的上下文数据解码出来。输入是以文件形式输入上下文状态变量
输入: 输入是文件形式的上下文数据
输出: 输出是原始的小波数据
******************************************************************************/
//mq_decode();

decode_allsubband();	
/******************************************************************************
以上完成EBCOT的编码,输出送入MQ算术编码器中
******************************************************************************/
	ldwt(buffer,interleave,bufferout);
	for(i = 0;i<LENGTH;i++)
		for(j = 0;j<WIDTH;j++)
		{
			buffer[i+4][j+4] = buffer[i+4][j+4]+128;			
		}
#ifdef debug
//		for(i = 0;i<LENGTH;i++)
//			for(j = 0;j<WIDTH;j++)
//			{
//				fwrite(&buffer[i][j], 1,1,out);
//			}
//		fclose(out);
#endif	

	for(i = 0;i<LENGTH;i++)
		for(j = 0;j<WIDTH;j++)
		{   
			unsigdata = floor(buffer[i+4][j+4]+0.5);
			fwrite(&unsigdata,1,1,out);
		}
	fclose(inter);
	fclose(in);
	fclose(out);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -