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

📄 wavelet.h

📁 傅立叶变换和小波变换是图像压缩的重要工具。该代大戏是利用小波变换进行图像压缩。
💻 H
字号:
#ifndef WAVELET_H
#define WAVELET_H

#include "wave.h"
#include "buffers.h"
#include <crblib/arithc.h>

typedef struct Wavelet Wavelet;

typedef struct SubBand SubBand;

struct SubBand
{
	int width,height,stride,level;
	void * band;
	subBandType type;
	Wavelet * wavelet;
	float quantizer;
	void *lastBand1,*lastBand2;
};

typedef struct
{
	float * fplane; //maybe malloced
	uint  * iplane; //input
	SubBand LL;
	SubBand * bands[3];
} SubBandTree;

struct Wavelet
{
	// parameters that must be sent:
	float quantizer;
	int width,height;

	// derived values:
	int dpcmLoss;
	int levels;
	float untransformedMSE[4];

	ubyte *compPtr,*compAlloc;
	int compLen;
	arithInfo * ari;

	SubBandTree trees[3];
	
	RowBuffer * CodeBuffer[3];
	RowBuffer * TransBufL,*TransBufH;

	bool speculative;
	int uses;
};

#define unpacksigns( v )	(( (v) & 1 ) ? ( - (int)((v)>>1) ) : (int)((v)>>1) )
#define packsigns( v )		(( (v) < 0 ) ? ( ((-(v))<<1) | 1 ) : ((v)<<1) )

#define CODEBUFFER_ROWS		(3)

Wavelet * Wavelet_Create(void * planes[3],int width,int height);
void Wavelet_Destroy(Wavelet *w);

void Wavelet_Transform(Wavelet *w);
void Wavelet_Quantize(Wavelet *w,float q);
void Wavelet_UnTransformAndQuantize(Wavelet *w);

uint Wavelet_CompLen(Wavelet *w);
void Wavelet_WritePacketsToBuf(Wavelet *w,ubyte *buf);

void Wavelet_CodeToPackets(Wavelet *w);

void Wavelet_DecodeFromBuf(Wavelet *w,ubyte *buf,float q);

float SubBand_TotalUntransformScale(SubBand *sb,int levels);
void  SubBand_Quantize(SubBand *sb,bool forward);
void  SubBand_MakeLastBands(SubBand *sb);

void Wavelet_SetupQuantizers(Wavelet *w,float baseQ);

#endif // WAVELET_H

⌨️ 快捷键说明

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