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

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

?? modified_ebcot1.c

?? 這是我剛剛完成的關于JPEG2000的C語言實現的部分程序。小波變換是采用97變換
?? C
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************
功能描述:
   Implements block_encode 
以下部分是對EBCOT的編碼。三個通道。四種編碼形式
功能描述:編碼過程中,每個系數總處于三種狀態之一:無效態,有效態,上下文有效態
******************************************************************************/
/*****************************************************************************/
// 程序: ebcot 編碼
// 版本:  V0.0
// 作者: 胡運平
// 最后修改時間 : 30, 6, 2005
/****************************************************************************/
#include <stdio.h>
#include<math.h>
#include<assert.h>
#include"fdwt.h"
#include"block_encode.h"

/******************************************************************************
//函數功能:
//輸入:1 3  7 15 31 63 127 255
//輸出  1 2  3  4  5  6  7  8
*******************************************************************************/
int log2i(int val)
{
	int i;
	for(i=0;val>0;val>>=1,i++);
	return i;
}
/******************************************************************************
//輸入為block code 的小波量化系數,輸出為文件形式的(CX,D)
*******************************************************************************/
void block_encode(int block_bufferin[BLOCKLENGTH][BLOCKWIDTH])
{
	int i,j,k,m;
	int max;
	unsigned char c[BLOCKLENGTH][BLOCKWIDTH];//顯著性狀態。
	unsigned int f[BLOCKLENGTH][BLOCKWIDTH] = {0};
//	unsigned char kign;
	FILE *context;
	if ((context = fopen("context.raw","ab+")) == NULL)
	{
		printf("cannot open file\n");
		return;
	}
/*******************************************************************************
// x;//符號變量
// q;//顯著性狀態變量
// e;//延遲顯著性狀態變量 表示系數是否是第一次被量值改進,也叫細化信息位
// v;//樣本比特值
// pi;//編碼狀態變量 表示位平面上的比特值是否已經被編碼,也叫訪問信息位
初始化所有狀態變量為0
********************************************************************************/
  for(i=0;i<BLOCKLENGTH;i++)
	for(j=0;j<BLOCKWIDTH;j++)
	{
		state_data_x[i][j] = 0;
		state_data_q[i][j] = 0;
		state_data_e[i][j] = 0;
		state_data_v[i][j] = 0;
		state_data_pi[i][j] = 0;
	}
/******************************************************************************
//小波系數的預處理,完成三個功能:碼塊生成過程,數據格式轉換過程,碼塊最大值查
找過程
//求單個碼塊的最大值和把符號位提取出來給符號變量X;符號變換,補碼形式變成源碼形式
*******************************************************************************/
	max = abs(block_bufferin[0][0]);
	for(i=0;i<BLOCKLENGTH;i++)
		for(j=0;j<BLOCKWIDTH;j++)
		{		
			state_data_x[i][j] = (block_bufferin[i][j]>>16 & 1);
			block_bufferin[i][j] = abs(block_bufferin[i][j]);
			if(block_bufferin[i][j]>max)
			max = block_bufferin[i][j];
		}
//環境狀態字初始化,16位,每一個總共表示有1個系數的所有狀態變量。
	for(i=0;i<BLOCKLENGTH;i++)
		for(j=0;j<BLOCKWIDTH;j++)
		{
			c[i][j] = 0;	
		}
/******************************************************************************
//預處理完畢可以進行下面的核心編碼操作,以四個系數作為一個stripe編碼,
//最高位平面開始編碼,最高位平面只進行cleanup通道編碼	
//依次經過三個編碼通道。
//環境狀態字給初值,12位,顯示重要性狀態值。狀態變量如下所示:
// x;//符號變量
// q;//顯著性狀態變量
// e;//延遲顯著性狀態變量 表示系數是否是第一次被量值改進,也叫細化信息位
// v;//樣本比特值
// pi;//編碼狀態變量 表示位平面上的比特值是否已經被編碼,也叫訪問信息位
********************************************************************************/
for(k=log2i(max)-1;k>-1;k--)
{//位平面層數,從最高位平面到最低位平面0編碼
	for(i=0;i<BLOCKLENGTH;i++)
	{
		for(j=0;j<BLOCKWIDTH;j++)
		{
			c[i][j] = state_data_q[i][j];
			state_data_v[i][j] = ((block_bufferin[i][j]>>k) & 1);
			state_data_pi[i][j] = 0;
		//	printf("%d ",c[i][j]);
		//	printf("%d ",state_data[i][j].v);
		//	printf("%d ",state_data_x[i][j]);
		//	printf("%d ",block_bufferin[i][j]);
		}
	}
init_environment(f,c,state_data_x);
for(j=0;j<BLOCKWIDTH;j++)
{
	for(i=0;i<BLOCKLENGTH/4;i++)
	{
		if((init_significant(f[4*i][j],0)==0) && (init_significant(f[4*i+1][j],0)==0) &&
			(init_significant(f[4*i+2][j],0)==0) && (init_significant(f[4*i+3][j],0)==0))
		{
			if(!(state_data_v[4*i][j] | state_data_v[4*i+1][j] | 
				state_data_v[4*i+2][j] | state_data_v[4*i+3][j]))
			{
				fprintf(context,"%d %d ",17,0);
				state_data_pi[4*i][j] = state_data_pi[4*i+1][j] =
					state_data_pi[4*i+2][j] = state_data_pi[4*i+3][j] = 1;
				break;
			}
			for(m = 0;m<4;m++)
			{
				if(state_data_v[4*i+m][j])
				{
					fprintf(context,"%d %d ",17,1);
					if(m == 0)
						{
							fprintf(context,"%d %d ",18,0);
							fprintf(context,"%d %d ",18,0);
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
						fprintf(context,"%d %d ",9,state_data_x[4*i+m][j]);						
						state_data_q[4*i+m][j] = 1;//重要性標志置1
						state_data_pi[4*i+m][j] = 1;//標志此位被訪問過。
						//第二位開始編碼
						fprintf(context,"%d %d ",0,state_data_v[4*i+m+1][j]);
						state_data_pi[4*i+m+1][j] = 1;//標志此位被訪問過。
						if(state_data_v[4*i+m+1][j])
						{
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
							fprintf(context,"%d %d ",9,state_data_x[4*i+m+1][j]);
							state_data_q[4*i+m+1][j] = 1;//重要性標志置1
						}
						//第三位開始編碼
						fprintf(context,"%d %d ",0,state_data_v[4*i+m+2][j]);
						state_data_pi[4*i+m+2][j] = 1;//標志此位被訪問過。
						if(state_data_v[4*i+m+2][j])
						{
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
							fprintf(context,"%d %d ",9,state_data_x[4*i+m+2][j]);
							state_data_q[4*i+m+2][j] = 1;//重要性標志置1
						}
						//第四位開始編碼
						fprintf(context,"%d %d ",0,state_data_v[4*i+m+3][j]);
						state_data_pi[4*i+m+3][j] = 1;//標志此位被訪問過。
						if(state_data_v[4*i+m+3][j])
						{
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
							fprintf(context,"%d %d ",9,state_data_x[4*i+m+3][j]);
							state_data_q[4*i+m+3][j] = 1;//重要性標志置1
						}	
						break;
						}
					 if(m == 1)
						{
							fprintf(context,"%d %d ",18,0);
							fprintf(context,"%d %d ",18,1);
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
						fprintf(context,"%d %d ",9,state_data_x[4*i+m][j]);						
						state_data_q[4*i+m][j] = 1;//重要性標志置1
						state_data_pi[4*i+m-1][j] = 1;//標志此位被訪問過。
						state_data_pi[4*i+m][j] = 1;//標志此位被訪問過。
						//第三位開始編碼
						fprintf(context,"%d %d ",0,state_data_v[4*i+m+1][j]);
						state_data_pi[4*i+m+1][j] = 1;//標志此位被訪問過。
						if(state_data_v[4*i+m+1][j])
						{
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
							fprintf(context,"%d %d ",9,state_data_x[4*i+m+1][j]);
							state_data_q[4*i+m+1][j] = 1;//重要性標志置1
						}
						//第四位開始編碼
						fprintf(context,"%d %d ",0,state_data_v[4*i+m+2][j]);
						state_data_pi[4*i+m+2][j] = 1;//標志此位被訪問過。
						if(state_data_v[4*i+m+2][j])
						{
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
							fprintf(context,"%d %d ",9,state_data_x[4*i+m+2][j]);
							state_data_q[4*i+m+2][j] = 1;//重要性標志置1

						}
						break;
						}
					 if(m == 2)
						{						
							fprintf(context,"%d %d ",18,1);
							fprintf(context,"%d %d ",18,0);
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
						fprintf(context,"%d %d ",9,state_data_x[4*i+m][j]);						
						state_data_q[4*i+m][j] = 1;//重要性標志置1
						state_data_pi[4*i+m-2][j] = 1;//標志此位被訪問過。
						state_data_pi[4*i+m-1][j] = 1;//標志此位被訪問過。
						state_data_pi[4*i+m][j] = 1;//標志此位被訪問過。						
						fprintf(context,"%d %d ",0,state_data_v[4*i+m+1][j]);
						state_data_pi[4*i+m+1][j] = 1;//標志此位被訪問過。
						if(state_data_v[4*i+m+1][j])
						{
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
							fprintf(context,"%d %d ",9,state_data_x[4*i+m+1][j]);
							state_data_q[4*i+m+1][j] = 1;//重要性標志置1
						}
						break;
						}
					if(m == 3)
						{
							fprintf(context,"%d %d ",18,1);
							fprintf(context,"%d %d ",18,1);
						//此時將符號位元編碼,有5種可能的情況(9-13)sign coding
						// Encode sign bit
						fprintf(context,"%d %d ",9,state_data_x[4*i+m][j]);						
						state_data_q[4*i+m][j] = 1;//重要性標志置1
						state_data_pi[4*i+m-3][j] = 1;//標志此位被訪問過。
						state_data_pi[4*i+m-2][j] = 1;//標志此位被訪問過。
						state_data_pi[4*i+m-1][j] = 1;//標志此位被訪問過。
						state_data_pi[4*i+m][j] = 1;//標志此位被訪問過。
						break;
						}						
					}
				}
				
			}
			else 
			{
				for(m=0;m<4;m++)	
				{
					if(!state_data_q[4*i+m][j] && init_significant(f[4*i+m][j],0)>0)
					{//位平面的重要性掃描通道
						fprintf(context,"%d %d ",init_significant(f[4*i+m][j],0),state_data_v[4*i+m][j]);
						if(state_data_v[4*i+m][j])
						{
							state_data_q[4*i+m][j]  = 1;
							//unsigned char init_sign(unsigned int f, unsigned char v,int i,int j)
							fprintf(context,"%d %d ",init_sign(f[4*i+m][j],state_data_x[4*i+m][j]),state_data_x[4*i+m][j]);				
						}
						state_data_pi[4*i+m][j] = 1;
					}
					else 
					{//位平面的幅度細化掃描通道
						
						fprintf(context,"%d %d ",init_magnitude(f[4*i+m][j],state_data_e[4*i+m][j]),state_data_v[4*i+m][j]);
						state_data_e[4*i+m][j] = 1;
		
					}
				}
			}
		
	}
}
//到次為止完成三個通道的編碼。
}
	fclose(context);
}


void encode_allsubband(int block_bufferin[BLOCKLENGTH][BLOCKWIDTH],
						float interleave[LENGTH+8][WIDTH+8])
{
	int i,j,m=0,n=0;
	int image_size = LENGTH*WIDTH;
	int block_size = BLOCKLENGTH*BLOCKWIDTH;
	int blocksample[4][4] = 
	{
		{1,6,-5,0},
		{4,1,7,-4},
		{0,5,-2,-5},
		{-3,4,-3,1}
	};
//	long int c[16][8];
	//for(k=8;)
//	for(m=0;m<2;m++)
//		for(n=0;n<2;n++)
		{
			printf("\nThe block_code sample is:");
			for(i=0;i<BLOCKLENGTH;i++)
    			for(j=0;j<BLOCKWIDTH;j++)
				{
					//block_bufferin[i][j] = (floor)(interleave[i+4+m][j+4+n]+0.5);					
					block_bufferin[i][j] = blocksample[i][j];
					if((!j%4))
					printf("\n");
					printf("%d ",block_bufferin[i][j]);
				}

				block_encode(block_bufferin);
		}

}
/******************************************************************************
以上完成EBCOT的編碼,輸出送入MQ算術編碼器中
******************************************************************************/

/******************************************************************************
環境狀態變量
輸入是orient代表LL LH HL HH四個子帶中的一個子帶的數據,c代表的是重要性狀態標志位
函數返回0---9之間的變量
//環境狀態變量              d0  v0  d1    a1  a5  a2
							h0	x	h1	  a7  x   a8	
							d2	v1  d3	  a3  a6  a4
******************************************************************************/
unsigned char init_significant(unsigned int f,int orient)
{
	char h;
	char v;
	char d;
	char n;
	char t;
	char hv;

	// Avoid compiler warning. 
	n = 0;

	h = ((f & 0x40) != 0) + ((f & 0x80) != 0);//7 8 
	v = ((f & 0x10) != 0) + ((f & 0x20) != 0);//5   6 
	d = ((f & 0x01) != 0) + ((f & 0x02) != 0) + ((f & 0x04) != 0) + ((f & 0x08) != 0);
	//
	switch (orient) 
	{
	case 1:
		t = h;
		h = v;
		v = t;
	case 0:
	case 2:
		if (!h) 
		{
			if (!v) 
			{
				if (!d)
				{
					n = 0;
				} 
				else if (d == 1) 
				{
					n = 1;
				} 
				else 
				{
					n = 2;
				}
			} 
			else if (v == 1)
			{
				n = 3;
			}
			else
			{
				n = 4;
			}
		} 
		else if (h == 1)
		{
			if (!v) 
			{
				if (!d) 
				{
					n = 5;
				}
				else 
				{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃视频一区二区三区在线观看| 一区av在线播放| 欧美日韩二区三区| 制服.丝袜.亚洲.中文.综合| 欧美群妇大交群中文字幕| 欧美夫妻性生活| 91精品国产一区二区| 欧美一区2区视频在线观看| 日韩欧美一区二区三区在线| 日韩精品一区二| 久久亚洲精精品中文字幕早川悠里| 日韩精品一区二区三区在线| 久久婷婷久久一区二区三区| 久久久99精品免费观看| 国产精品久久久久影院老司 | 欧美国产精品劲爆| 久久久91精品国产一区二区精品| 国产婷婷色一区二区三区四区 | 国产精品久线观看视频| 亚洲色图第一区| 亚洲v日本v欧美v久久精品| 麻豆成人久久精品二区三区红| 激情av综合网| 色综合久久中文字幕| 7777精品久久久大香线蕉| 欧美成人一级视频| 一区在线观看视频| 青椒成人免费视频| 成人激情免费视频| 欧美精品vⅰdeose4hd| 久久久久久久久久久久久女国产乱 | 国内不卡的二区三区中文字幕 | 国产目拍亚洲精品99久久精品| 中文字幕一区免费在线观看| 奇米亚洲午夜久久精品| 波多野结衣中文字幕一区二区三区| 欧美综合欧美视频| 久久久久久夜精品精品免费| 亚洲妇女屁股眼交7| 韩国v欧美v亚洲v日本v| 在线观看免费视频综合| 久久精品在线免费观看| 亚洲bt欧美bt精品777| 国产jizzjizz一区二区| 在线电影院国产精品| 亚洲欧洲国产专区| 国产一区二区在线看| 欧美日韩一卡二卡三卡| 亚洲欧洲99久久| 国产盗摄精品一区二区三区在线| 欧美精品在线一区二区| 一区二区三区四区高清精品免费观看| 国产精品中文字幕日韩精品| 91麻豆精品国产91久久久久久久久 | 777精品伊人久久久久大香线蕉| 中文字幕中文字幕一区| 精品一区二区三区免费视频| 欧美精选一区二区| 午夜久久电影网| 一本久久综合亚洲鲁鲁五月天| 日本一区二区三区国色天香| 精品亚洲成av人在线观看| 91精品国产色综合久久ai换脸 | voyeur盗摄精品| 久久久久国产精品麻豆ai换脸 | 国产亚洲一区二区三区| 精品一区二区三区免费播放| 日韩午夜精品视频| 蜜臀av性久久久久av蜜臀妖精 | 激情亚洲综合在线| 欧美一卡二卡在线| 久久精品国产久精国产爱| 欧美一区二区在线视频| 日本vs亚洲vs韩国一区三区| 69p69国产精品| 免费看欧美女人艹b| 91精品国产综合久久婷婷香蕉| 亚洲超碰97人人做人人爱| 欧美日韩在线电影| 图片区小说区区亚洲影院| 欧美性猛交xxxx黑人交| 亚洲成av人**亚洲成av**| 欧美老女人在线| 日本女人一区二区三区| 欧美一级二级三级蜜桃| 国产尤物一区二区在线 | 91麻豆国产香蕉久久精品| 亚洲免费观看高清完整版在线 | 老司机午夜精品| 久久精品视频一区| 91丨九色porny丨蝌蚪| 亚洲一区二区综合| 日韩欧美国产综合在线一区二区三区| 蜜臀av一区二区| 欧美国产激情一区二区三区蜜月| 99久久精品免费看| 亚洲成人一区二区在线观看| 日韩亚洲国产中文字幕欧美| 国产成a人无v码亚洲福利| 综合激情成人伊人| 91 com成人网| 国产一区二区福利视频| 一区二区三区视频在线观看 | 久久aⅴ国产欧美74aaa| 国产精品乱人伦中文| 欧美日本韩国一区| 国产91精品露脸国语对白| 一区二区三区波多野结衣在线观看| 91精品国产综合久久久久| 懂色中文一区二区在线播放| 亚洲一线二线三线视频| 久久奇米777| 欧美视频一区二区在线观看| 国产一区二区成人久久免费影院 | 欧美丰满一区二区免费视频| 国产另类ts人妖一区二区| 亚洲精选视频免费看| 欧美xfplay| 欧美日韩三级在线| 不卡的av电影| 国产一区二区三区免费| 性欧美疯狂xxxxbbbb| 亚洲欧美另类小说| 国产视频一区二区在线观看| 91精品国产色综合久久不卡蜜臀 | 久久精品日韩一区二区三区| 欧美日韩另类一区| 色中色一区二区| 成人免费视频app| 极品少妇一区二区| 蜜桃91丨九色丨蝌蚪91桃色| 一区二区三区四区亚洲| 一区在线中文字幕| 日本一区二区在线不卡| 久久综合99re88久久爱| 欧美一区二区三区色| 精品视频色一区| 欧美午夜一区二区| 色综合视频一区二区三区高清| 岛国精品在线观看| 国产精品系列在线播放| 国产一区二区在线免费观看| 免费xxxx性欧美18vr| 日韩成人一区二区| 青青国产91久久久久久| 午夜视频一区二区三区| 午夜影院久久久| 性做久久久久久| 五月天亚洲婷婷| 首页欧美精品中文字幕| 日韩精品三区四区| 日韩不卡在线观看日韩不卡视频| 一区二区三区.www| 性久久久久久久| 日韩成人精品在线观看| 麻豆91在线播放免费| 久久99国产精品久久| 久久99最新地址| 国产91精品久久久久久久网曝门| 国产+成+人+亚洲欧洲自线| 国产成人免费视频网站| 暴力调教一区二区三区| 一本到高清视频免费精品| 91福利视频久久久久| 欧美日韩精品一区二区天天拍小说| 欧美综合在线视频| 日韩视频免费直播| 国产人成一区二区三区影院| 国产精品久久毛片a| 亚洲色图欧美激情| 日韩 欧美一区二区三区| 久久国产精品露脸对白| www.欧美色图| 欧美日韩国产首页| 久久夜色精品一区| 亚洲美女精品一区| 日韩av一区二| 国产成人亚洲综合a∨婷婷图片| 成人免费视频网站在线观看| 欧洲一区二区三区在线| 精品黑人一区二区三区久久| 国产三级一区二区| 亚洲一区二区三区三| 久久av老司机精品网站导航| 成人蜜臀av电影| 欧美精品乱码久久久久久按摩| 精品国产乱码久久久久久蜜臀| **网站欧美大片在线观看| 日韩精品一区第一页| 波多野结衣欧美| 91精品福利在线一区二区三区 | 亚洲男女一区二区三区| 麻豆91小视频| 色综合久久中文综合久久97| 日韩午夜小视频| 亚洲自拍另类综合| 国产乱码精品一区二区三区五月婷| 色综合久久久久综合| 久久精品夜色噜噜亚洲a∨| 日日夜夜免费精品视频|