亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unezw.c

?? VC小波應用 視頻編碼播放 EZW2 WAVLETS TRANSFORMER
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
/* EZW2 - Embedded Zerotree Wavelet Coder
 * 
 * Author : Mow-Song, Ng
 * Data   : 20-07-2002
 *
 * Last update : 31-08-2002
 *
 * A large portion/idea of the codes come from:
 * C. Valens - Embedded Zerotree Wavelet Encoder Tutorial.
 * G. Davis - Baseline Wavelet Transform Coder Construction Kit
 *
 * The authors copyrights to the codes are acknowledged.
 * The EZW coder is patented by Jerome Shapiro. As far as I know, these are
 * the patent numbers 
 * 5315670 (Issued May 24, 1994), 5321776 (Issued June 14, 1994) and 
 * 5412741 (Issued May 2, 1995).
 *
 *
 * Well, I wrote the coder with some one else codes, add some lines, remove 
 * some lines, sometimes just verbatim. Any way, if you feel that I am worth
 * the acknowledgement, please do so, or perhaps drop me an e-mail.
 *
 * Please refer to my website for more info.
 *
 * My contact:
 * msng@mmu.edu.my
 * http://www.pesona.mmu.edu.my/~msng
 *
 */
/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	

#include "ezw.h"

/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
void EZW2Decode(WTRANSFORM *transform, ArithDecoder *decoder, int DecodeBytes,
					 int Threshold, int HisCount, int ScanOrder);

void DecodeDominantPassMortonScan(DLNode *DomList, SLNode *SubList,
											 int *SubListSize, WTRANSFORM *transform, 
											 MAP *map, int threshold, 
											 ArithDecoder *decoder,
											 BasicCoder **DominantPassCoder, 
											 int DecodeBytes);
void DecodeNode(SLNode *SubList, int *SubListSize, WTRANSFORM *transform, 
					 DLNode *node, int threshold);

void DecodeSubordinatePass(SLNode *SubList, int SubListSize, int threshold,
									WTRANSFORM *transform, ArithDecoder *decoder,
									BasicCoder *SubordinateListCoder, int DecodeBytes);

void UNEZW2Error(char *fmt, ...);
void UNEZW2Warning(char *fmt, ...);

/* termination flag */
Boolean EndDecoding;


/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
void main(int argc, char **argv)
{
	FIMAGE *DecodeImage;
	IMAGE  *DecodeImage2, *OriginalImage;
   WAVELET *wavelet;
	WTRANSFORM *transform;
	char EncodeImageFileName[_MAX_PATH];
	char DecodeImageFileName[_MAX_PATH];
	char OriginalImageFileName[_MAX_PATH];
	Boolean DecodeFileNameSpecify = FALSE;
	int NScale;
	ArithDecoder *decoder;
	BIT_FILE *EncodeStream;
	float AbsMaxCoeff;
	float ImageMean;
	int Threshold;
	int ImageXSize, ImageYSize;
	int MaxHistogramCount;
	int i;
	int Temp;
	char *ProgramName, *InputImageName, *OriginalImageName;
	Boolean ComparePSNR = FALSE;	
	float PSNR;
 	int DecodeBytes=0, EncodedImageFileSize;
   struct stat statistics; 
	int WaveletIndex;
	FILTERSET *Filter[16];
	int ScanOrder;

   EndDecoding  = FALSE;

   fprintf(stdout, "Embedded Zerotree Wavelet Coder - EZW2 (Decoder)\n");
	
	InitializeFilterSets();
	/* Initialize the filters used */
	Filter[0] = Antonini;
	Filter[1] = Adelson;
	Filter[2] = Odegard;
	Filter[3] = Villa1810;
	Filter[4] = Brislawn;
	Filter[5] = Brislawn2;
	Filter[6] = Haar;
	Filter[7] = Daub4;
	Filter[8] = Daub6;
	Filter[9] = Daub8;
	Filter[10] = Villa1;
	Filter[11] = Villa2;
	Filter[12] = Villa3;
	Filter[13] = Villa4;
	Filter[14] = Villa5;
	Filter[15] = Villa6;

	ProgramName = argv[0];

	if(argc < 2){
	   fprintf(stderr, "Usage: %s [encode image]\n", ProgramName);
		fprintf(stderr, "\t -d <decode filename>\n");
		fprintf(stderr, "\t -o <original image>\n");
		fprintf(stderr, "\t -b <decode bytes>\n");
		return;
	}
	
	InputImageName = argv[1];
	argc-=2; argv+=2;
   
	while(argc>0){
		if (!strcmp("-o", *argv)){
			argv++; argc--;
			OriginalImageName = *argv;
			argv++; argc--;
			sprintf(OriginalImageFileName, "%s.pgm", OriginalImageName);
			ComparePSNR = TRUE;
		}
		else if (!strcmp("-d", *argv)){
			argv++; argc--;
			sprintf(DecodeImageFileName, "%s.unezw.pgm", *argv);
			DecodeFileNameSpecify = TRUE;
			argv++; argc--; 
		}
		else if (!strcmp("-b", *argv)){
			argv++; argc--;
			DecodeBytes = atoi(*argv);
			if (DecodeBytes < 0){
				DecodeBytes = 0;
			}
			argv++; argc--;

		}
		else{
			fprintf(stderr, "Usage: %s [encode image]\n", ProgramName);
			fprintf(stderr, "\t -d <decode filename>\n");
			fprintf(stderr, "\t -o <original image>\n");
			fprintf(stderr, "\t -b <decode bytes>\n");
			return;
		}
	}

	sprintf(EncodeImageFileName, "%s.ezw", InputImageName);
	
	if(stat(EncodeImageFileName,&statistics) == -1){
		EncodedImageFileSize = 0;
	}
	else{
		EncodedImageFileSize = (int)statistics.st_size;
	}
	
	if (DecodeBytes == 0 || DecodeBytes>EncodedImageFileSize){
		DecodeBytes = EncodedImageFileSize;
	}

	if (!DecodeFileNameSpecify){
		if (DecodeBytes==EncodedImageFileSize){
			sprintf(DecodeImageFileName, "%s.unezw.pgm", InputImageName);	
		}
		else{
			sprintf(DecodeImageFileName, "%s_%d.unezw.pgm", InputImageName, DecodeBytes);
		}
	}

	/* open encode stream */
	EncodeStream = OpenInputBitFile(EncodeImageFileName);
	if (EncodeStream==NULL){
		UNEZW2Error("Fail to read encoded image.\n");
	}
	
	decoder = ArithDecoderAlloc(EncodeStream);
	ArithDecoderStart(decoder);
	
	/* read header */
	ImageXSize	 = BasicCoderReadNBits(decoder, ImageXSizeBits);
	ImageYSize	 = BasicCoderReadNBits(decoder, ImageYSizeBits);
	ScanOrder	 = BasicCoderReadNBits(decoder, ScanOrderBits);
	NScale		 = BasicCoderReadNBits(decoder, ScaleBits);
	WaveletIndex = BasicCoderReadNBits(decoder, WaveletIndexBits);
	Temp			 = BasicCoderReadNBits(decoder, ImageMeanBits);	
	ImageMean	 = *((float *)(&Temp));
	Threshold	 = 1<<(BasicCoderReadNBits(decoder, ThresholdBits));					
	MaxHistogramCount = BasicCoderReadNBits(decoder, MaxHistoCountBits);									
	
	/* initialize wavelet filter */
	wavelet = WaveletAlloc(Filter[WaveletIndex]);
	
	transform = WaveletTransformAllocBlank(wavelet, ImageXSize, ImageYSize, NScale, -1);
	
	if(ComparePSNR){
		fprintf(stdout, "Original Image: %s\nEncoded Image : %s\nDecoded Image : %s\n",
			OriginalImageFileName, EncodeImageFileName, DecodeImageFileName);
	}
	else{
		fprintf(stdout, "Encoded Image : %s\nDecoded Image : %s\n",
		EncodeImageFileName, DecodeImageFileName);
	}
	
	fprintf(stdout, "Width: %d   Height: %d   ", transform->hsize, transform->vsize);
	fprintf(stdout, "Mean: %.3f\n", ImageMean);
	fprintf(stdout, "Initial threshold: %d   Levels: %d   Wavelet: %s   Scan: %d\n",
		Threshold, NScale, FilterName[WaveletIndex], ScanOrder);
	fprintf(stdout, "Decode bytes: %d\n", DecodeBytes);

	/* decode */
	EZW2Decode(transform, decoder, DecodeBytes, Threshold, MaxHistogramCount, ScanOrder);
	
	DecodeImage = FImageAlloc(transform->hsize, transform->vsize);
	WaveletTransformInvert(transform, DecodeImage);
	
	/* put back mean */
	for (i=0; i<DecodeImage->xsize*DecodeImage->ysize; i++){
		DecodeImage->pixelLinear[i] += ImageMean;
	}
	
	WriteFloatToPGM(DecodeImage, DecodeImageFileName);
   
	/* change to char type 21/09/2002 */
	if (ComparePSNR){
		if ((OriginalImage = ReadPGM(OriginalImageFileName))==NULL){
			UNEZW2Error("Fail to open original image.\n");
		}

		if ((DecodeImage2 = ReadPGM(DecodeImageFileName))==NULL){
			UNEZW2Error("Fail to open decode image.\n");
		}

		PSNR = (float)ImageComparePSNR(OriginalImage, DecodeImage2);

		fprintf(stdout, "\nPSNR = %.4f dB\n", PSNR);
		ImageFree(OriginalImage);
		ImageFree(DecodeImage2);
	}

	ArithDecoderDealloc(decoder);
	FImageFree(DecodeImage);
	WaveletDealloc(wavelet);
	WaveletTransformDealloc(transform);
	RemoveFilterSets();
	CloseInputBitFile(EncodeStream);
	PrintLeaks();
	return;
}

/*----------------------------------------------------------------------------*/	
/*----------------------------------------------------------------------------*/	
void EZW2Decode(WTRANSFORM *transform, ArithDecoder *decoder, int DecodeBytes,
					 int threshold, int HistoCount, int ScanOrder)
{
	BasicCoder *DominantPassCoder[4];
	BasicCoder *SubordinateListCoder;
	int i, nPass=0;
	MAP *map;
	int BitCount;
	DLNode *DomList;
	SLNode *SubList;
	int SubListSize;

	/* dominant list */
	if ((DomList = (DLNode *)malloc(sizeof(DLNode)
						*transform->vsize*transform->hsize))==NULL){
		UNEZW2Error("Fail to allocate dominant list.\n");
	}
		
	/* subordinate list */
	if ((SubList = (SLNode *)malloc(sizeof(SLNode)
						*transform->vsize*transform->hsize))==NULL){
		UNEZW2Error("Fail to allocate subordinate list.\n");
	}
	SubListSize = 0;
	
	/* 4 context of dominant list coding */
	for (i=0; i< 4; i++){
		if ((DominantPassCoder[i] = BasicCoderAlloc(4, HistoCount)) == NULL){
			UNEZW2Error("Fail to allocate dominanat pass coder.\n");
		}
	}
	
	/* 1 context of subordinate list coding */
	if ((SubordinateListCoder = BasicCoderAlloc(2, HistoCount)) == NULL){
		UNEZW2Error("Fail to allocate subordinate list coder.\n");
	}
	
	/* map to keep track of coded significant coefficients */
	if ((map=MapAlloc(transform->hsize, transform->vsize, 
			transform->nsteps))==NULL){
		UNEZW2Error("Fail to allocate map.\n");
	}
	
	/* bits input so far */
	BitCount = ArithDecoderNBitsInput(decoder);

	while ((threshold!=0) && (EndDecoding!=TRUE) ){
		printf("Pass #%2d - ", ++nPass);

		if (ScanOrder==0){
			DecodeDominantPassMortonScan(DomList, SubList, &SubListSize, transform, 
						map, threshold, decoder, DominantPassCoder, DecodeBytes);
		}
		else{
			/* no implementation */
		}
		
		DecodeSubordinatePass(SubList, SubListSize, threshold>>1, transform, 
						decoder, SubordinateListCoder, DecodeBytes);

		BitCount = ArithDecoderNBitsInput(decoder);
		
		printf("Subordinate list size: %6d  (%5d)  Total bytes: %d\n", 
			SubListSize, threshold, BitCount/8);
		
		if (EndDecoding!=TRUE){
			threshold >>= 1;
			
			for (i=0; i<4; i++){
				BasicCoderReset(DominantPassCoder[i]);
			}
			BasicCoderReset(SubordinateListCoder);
			//SortSubordinateList(list);		
		}
	}
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲www| av一二三不卡影片| 成人免费视频免费观看| 国产成人在线看| 91福利区一区二区三区| 欧美一区二区视频观看视频| 国产日韩欧美精品电影三级在线| 亚洲手机成人高清视频| 亚洲已满18点击进入久久| 久久99日本精品| 色综合久久久久久久久| 在线播放视频一区| 1024亚洲合集| 精品一区二区三区免费视频| 97精品国产97久久久久久久久久久久 | 欧美精品一区二区三区高清aⅴ| 中文字幕乱码一区二区免费| 亚洲福利视频一区| 91视视频在线观看入口直接观看www | 久久99精品国产.久久久久久| 97精品电影院| 国产女人18水真多18精品一级做| 午夜伊人狠狠久久| 99久久婷婷国产| 国产亚洲婷婷免费| 美女mm1313爽爽久久久蜜臀| 欧美吻胸吃奶大尺度电影| 国产精品国产三级国产专播品爱网| 爽爽淫人综合网网站| 在线欧美日韩国产| 一区精品在线播放| jvid福利写真一区二区三区| 久久午夜色播影院免费高清| 日本欧美在线观看| 91精品国产综合久久国产大片| 亚洲一卡二卡三卡四卡| 在线免费观看日韩欧美| 一区二区三区精品在线观看| 91国在线观看| 亚洲国产精品一区二区尤物区| 色菇凉天天综合网| 亚洲美女免费视频| 在线观看日韩毛片| 亚洲成av人片观看| 91精品国产欧美一区二区18| 日韩电影在线观看网站| 日韩免费一区二区三区在线播放| 免费成人在线观看| 26uuu亚洲| 色综合久久中文字幕| 亚洲综合色噜噜狠狠| 欧美精选一区二区| 紧缚奴在线一区二区三区| 国产亚洲人成网站| 91美女在线看| 久久www免费人成看片高清| 亚洲国产精华液网站w| 色丁香久综合在线久综合在线观看| 水野朝阳av一区二区三区| 欧美va在线播放| 成人免费毛片片v| 日韩二区在线观看| 国产精品美女久久久久久久久| 欧美色国产精品| 国产高清在线精品| 亚洲国产成人av网| 国产精品久久777777| 精品欧美乱码久久久久久1区2区| 成人毛片老司机大片| 蜜臀久久久99精品久久久久久| 一区精品在线播放| 国产性天天综合网| 日韩欧美激情在线| 欧美精品九九99久久| 91麻豆精品一区二区三区| 国产毛片一区二区| 日本vs亚洲vs韩国一区三区 | 毛片av一区二区| 亚洲妇熟xx妇色黄| 国产精品全国免费观看高清 | 亚洲精品久久久蜜桃| 国产精品伦一区| 久久综合五月天婷婷伊人| 欧美一区二区三区在线| 欧美在线色视频| 色婷婷综合久久久中文一区二区| 岛国精品在线播放| 岛国av在线一区| 顶级嫩模精品视频在线看| 国产在线不卡一区| 激情成人综合网| 久久精品国内一区二区三区| 日产精品久久久久久久性色 | 激情深爱一区二区| 国产成人精品综合在线观看| 国产一区二区成人久久免费影院| 黑人巨大精品欧美黑白配亚洲| 日韩电影一区二区三区| 奇米精品一区二区三区在线观看| 丝袜美腿一区二区三区| 精品亚洲欧美一区| 成人av在线观| 欧美综合色免费| 91精品国产91热久久久做人人| 日韩一区二区麻豆国产| 久久久久国产成人精品亚洲午夜| 国产欧美精品一区二区色综合朱莉| 国产日韩精品久久久| 亚洲精品日日夜夜| 久久精品国产第一区二区三区| 国产精品伊人色| 色网站国产精品| 精品剧情v国产在线观看在线| 欧美国产精品一区二区| 亚洲一区二区三区在线看| 久久99精品视频| 91丨porny丨户外露出| 欧美一区二区三区在线观看视频| 国产婷婷精品av在线| 亚洲第一福利视频在线| 狠狠色伊人亚洲综合成人| 色哟哟精品一区| 国产网红主播福利一区二区| 亚洲国产cao| 欧美变态凌虐bdsm| 亚洲成av人片| 久久久精品黄色| 亚洲va欧美va人人爽| 91在线一区二区| 国产无一区二区| 久久91精品国产91久久小草| 国产精品国产精品国产专区不片| 婷婷中文字幕综合| 在线免费观看日本欧美| 国产精品久久久久影院色老大| 老司机免费视频一区二区| 色婷婷精品大在线视频| 国产精品毛片大码女人| 国产精品一区三区| 精品免费日韩av| 奇米影视一区二区三区| 3d动漫精品啪啪一区二区竹菊| 亚洲免费观看在线视频| 不卡大黄网站免费看| 欧美国产视频在线| 成人av电影在线网| 国产精品乱码人人做人人爱| 国产不卡免费视频| 国产女同性恋一区二区| 成人国产精品免费| 亚洲乱码中文字幕综合| 91久久精品国产91性色tv| 亚洲男帅同性gay1069| 一本色道亚洲精品aⅴ| 亚洲蜜桃精久久久久久久| 欧美在线观看18| 男人的天堂亚洲一区| 欧美电影免费观看高清完整版在线观看| 亚洲bt欧美bt精品| 日韩三级中文字幕| 丁香天五香天堂综合| 亚洲色图20p| 日韩欧美在线影院| 粉嫩av一区二区三区| 国产精品国产三级国产aⅴ原创| 色综合久久久久综合99| 日韩电影在线免费观看| 国产亚洲欧洲一区高清在线观看| jiyouzz国产精品久久| 亚洲午夜激情网站| 久久午夜免费电影| 欧美日韩亚洲不卡| 狠狠色丁香婷综合久久| 亚洲精品自拍动漫在线| 欧美一区二区久久久| av一区二区三区黑人| 毛片不卡一区二区| 亚洲综合免费观看高清完整版在线 | 99精品久久99久久久久| 日韩成人免费看| 自拍偷拍欧美精品| 2023国产一二三区日本精品2022| 色婷婷久久久综合中文字幕| 国产不卡视频在线播放| 丝袜美腿高跟呻吟高潮一区| 国产精品国产精品国产专区不蜜| 精品sm捆绑视频| 欧美精品三级在线观看| 99re热视频精品| 国产精品亚洲а∨天堂免在线| 日韩国产欧美三级| 亚洲一区精品在线| 亚洲精品欧美专区| 国产精品狼人久久影院观看方式| 精品国产人成亚洲区| 日韩一级大片在线观看| 在线不卡一区二区| 3d成人动漫网站| 欧美日本在线视频| 7878成人国产在线观看|