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

📄 modified_ebcot1.c

📁 这是我刚刚完成的关于JPEG2000的C语言实现的部分程序。小波变换是采用97变换
💻 C
📖 第 1 页 / 共 2 页
字号:
					n = 6;
				}
			} 
			else
			{
				n = 7;
			}
		} 
		else 
		{
			n = 8;
		}
		break;
	case 3:
		hv = h + v;
		if (!d) 
		{
			if (!hv) 
			{
				n = 0;
			} 
			else if (hv == 1) 
			{
				n = 1;
			} 
			else 
			{
				n = 2;
			}
		} 
		else if (d == 1) 
		{
			if (!hv) 
			{
				n = 3;
			} 
			else if (hv == 1) 
			{
				n = 4;
			} 
			else 
			{
				n = 5;
			}
		} 
		else if (d == 2) 
		{
			if (!hv) 
			{
				n = 6;
			} 
			else 
			{
				n = 7;
			}
		} 
		else 
		{
			n = 8;
		}
		break;
	}
	return  n;//1+n
}

void init_environment(unsigned int f[BLOCKLENGTH][BLOCKWIDTH],unsigned char 
	c[BLOCKLENGTH][BLOCKWIDTH],unsigned char state_data_x[BLOCKLENGTH][BLOCKWIDTH])
{
	struct entironment_data
	{
		unsigned  a12:1;
		unsigned  a11:1;
		unsigned  a10:1;
		unsigned  a9:1;
		unsigned  a8:1;
		unsigned  a7:1;
		unsigned  a6:1;
		unsigned  a5:1;
		unsigned  a4:1;
		unsigned  a3:1;
		unsigned  a2:1;
		unsigned  a1:1;
	}state[BLOCKLENGTH][BLOCKWIDTH];
	int i,j;
/******************************************************************************
//环境状态变量              d0  v0  d1    a1  a5  a2             a9
							h0	x	h1	  a7  x   a8       a11   x  a12	
							d2	v1  d3	  a3  a6  a4			a10
******************************************************************************/
	state[0][0].a12 = state_data_x[0][1] & 1;
	state[0][0].a11 = 0;
	state[0][0].a10 = state_data_x[1][0] & 1;
	state[0][0].a9 = 0;
	state[0][0].a8 = c[0][1] & 1;
	state[0][0].a7 = 0;
	state[0][0].a6 = c[1][0] & 1;
	state[0][0].a5 = 0;
	state[0][0].a4 = c[1][1] & 1;
	state[0][0].a3 = 0;
	state[0][0].a2 = 0;
	state[0][0].a1 = 0;

	state[0][BLOCKWIDTH-1].a12 = 0;
	state[0][BLOCKWIDTH-1].a11 = state_data_x[0][BLOCKWIDTH-1-1] & 1;
	state[0][BLOCKWIDTH-1].a10 = state_data_x[1][BLOCKWIDTH-1] & 1;
	state[0][BLOCKWIDTH-1].a9 = 0;
	state[0][BLOCKWIDTH-1].a8 = 0;
	state[0][BLOCKWIDTH-1].a7 = c[0][BLOCKWIDTH-1-1] & 1;
	state[0][BLOCKWIDTH-1].a6 = c[1][BLOCKWIDTH-1] & 1;
	state[0][BLOCKWIDTH-1].a5 = 0;
	state[0][BLOCKWIDTH-1].a4 = 0;
	state[0][BLOCKWIDTH-1].a3 = c[1][BLOCKWIDTH-1-1] & 1;
	state[0][BLOCKWIDTH-1].a2 = 0;
	state[0][BLOCKWIDTH-1].a1 = 0;


	state[BLOCKLENGTH-1][0].a12 = state_data_x[BLOCKLENGTH-1][1] & 1;
	state[BLOCKLENGTH-1][0].a11 = 0;
	state[BLOCKLENGTH-1][0].a10 = 0;
	state[BLOCKLENGTH-1][0].a9 = state_data_x[BLOCKLENGTH-1-1][0] & 1;
	state[BLOCKLENGTH-1][0].a8 = c[BLOCKLENGTH-1][1] & 1;
	state[BLOCKLENGTH-1][0].a7 = 0;
	state[BLOCKLENGTH-1][0].a6 = 0;
	state[BLOCKLENGTH-1][0].a5 = c[BLOCKLENGTH-1-1][0] & 1;
	state[BLOCKLENGTH-1][0].a4 = 0;
	state[BLOCKLENGTH-1][0].a3 = 0;
	state[BLOCKLENGTH-1][0].a2 = c[BLOCKLENGTH-1-1][1] & 1;
	state[BLOCKLENGTH-1][0].a1 = 0;

	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a12 = 0;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a11 = state_data_x[BLOCKLENGTH-1][BLOCKWIDTH-1-1] & 1;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a10 = 0;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a9 = state_data_x[BLOCKLENGTH-1-1][BLOCKWIDTH-1] & 1;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a8 = 0;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a7 = c[BLOCKLENGTH-1][BLOCKWIDTH-1-1] & 1;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a6 = 0;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a5 = c[BLOCKLENGTH-1-1][BLOCKWIDTH-1] & 1;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a4 = 0;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a3 = 0;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a2 = 0;
	state[BLOCKLENGTH-1][BLOCKWIDTH-1].a1 = c[BLOCKLENGTH-1-1][BLOCKWIDTH-1-1] & 1;
	
for(j=1;j<BLOCKWIDTH-1;j++)
	{
		state[0][j].a12 = state_data_x[0][j+1] & 1;
		state[0][j].a11 = state_data_x[0][j-1] & 1;
		state[0][j].a10 = state_data_x[1][j] & 1;
		state[0][j].a9 = 0;
		state[0][j].a8 = c[0][j+1] & 1;
		state[0][j].a7 = c[0][j-1] & 1;
		state[0][j].a6 = c[1][j] & 1;
		state[0][j].a5 = 0;
		state[0][j].a4 = c[1][j+1] & 1;
		state[0][j].a3 = c[1][j-1] & 1;
		state[0][j].a2 = 0;
		state[0][j].a1 = 0;
	}
for(j=1;j<BLOCKWIDTH-1;j++)
	{
		state[BLOCKLENGTH-1][j].a12 = state_data_x[BLOCKLENGTH-1][j+1] & 1;
		state[BLOCKLENGTH-1][j].a11 = state_data_x[BLOCKLENGTH-1][j-1] & 1;
		state[BLOCKLENGTH-1][j].a10 = 0;
		state[BLOCKLENGTH-1][j].a9 = state_data_x[BLOCKLENGTH-1-1][j] & 1;
		state[BLOCKLENGTH-1][j].a8 = c[BLOCKLENGTH-1][j+1] & 1;
		state[BLOCKLENGTH-1][j].a7 = c[BLOCKLENGTH-1][j-1] & 1;
		state[BLOCKLENGTH-1][j].a6 = 0;
		state[BLOCKLENGTH-1][j].a5 = c[BLOCKLENGTH-1-1][j] & 1;
		state[BLOCKLENGTH-1][j].a4 = 0;
		state[BLOCKLENGTH-1][j].a3 = 0;
		state[BLOCKLENGTH-1][j].a2 = c[BLOCKLENGTH-1-1][j+1] & 1;
		state[BLOCKLENGTH-1][j].a1 = c[BLOCKLENGTH-1-1][j-1] & 1;
	}
for(i=1;i<BLOCKLENGTH-1;i++)
	{
		state[i][0].a12 = state_data_x[i][1] & 1;
		state[i][0].a11 = 0;
		state[i][0].a10 = state_data_x[i+1][0] & 1;
		state[i][0].a9 = state_data_x[i-1][0] & 1;
		state[i][0].a8 = c[i][1] & 1;
		state[i][0].a7 = 0;
		state[i][0].a6 = c[i+1][0] & 1;
		state[i][0].a5 = c[i-1][0] & 1;
		state[i][0].a4 = c[i+1][1] & 1;
		state[i][0].a3 = 0;
		state[i][0].a2 = c[i-1][1] & 1;
		state[i][0].a1 = 0;
	}
for(i=1;i<BLOCKLENGTH-1;i++)
	{
		state[i][BLOCKWIDTH-1].a12 = 0;
		state[i][BLOCKWIDTH-1].a11 = state_data_x[i][BLOCKWIDTH-1-1] & 1;
		state[i][BLOCKWIDTH-1].a10 = state_data_x[i+1][BLOCKWIDTH-1] & 1;
		state[i][BLOCKWIDTH-1].a9 = state_data_x[i-1][BLOCKWIDTH-1] & 1;
		state[i][BLOCKWIDTH-1].a8 = 0;
		state[i][BLOCKWIDTH-1].a7 = c[i][BLOCKWIDTH-1-1] & 1;
		state[i][BLOCKWIDTH-1].a6 = c[i+1][BLOCKWIDTH-1] & 1;
		state[i][BLOCKWIDTH-1].a5 = c[i-1][BLOCKWIDTH-1] & 1;
		state[i][BLOCKWIDTH-1].a4 = 0;
		state[i][BLOCKWIDTH-1].a3 = c[i+1][BLOCKWIDTH-1-1] & 1;
		state[i][BLOCKWIDTH-1].a2 = 0;
		state[i][BLOCKWIDTH-1].a1 = c[i-1][BLOCKWIDTH-1-1] & 1;
	}
	for(i=1;i<BLOCKLENGTH-1;i++)
	{
		for(j=1;j<BLOCKWIDTH-1;j++)
		{
			state[i][j].a12 = state_data_x[i][j+1] & 1;
			state[i][j].a11 = state_data_x[i][j-1] & 1;
			state[i][j].a10 = state_data_x[i+1][j] & 1;
			state[i][j].a9 = state_data_x[i-1][j] & 1;
			state[i][j].a8 = c[i][j+1] & 1;
			state[i][j].a7 = c[i][j-1] & 1;
			state[i][j].a6 = c[i+1][j] & 1;
			state[i][j].a5 = c[i-1][j] & 1;
			state[i][j].a4 = c[i+1][j+1] & 1;
			state[i][j].a3 = c[i+1][j-1] & 1;
			state[i][j].a2 = c[i-1][j+1] & 1;
			state[i][j].a1 = c[i-1][j-1] & 1;
		}
	}
	for(i=0;i<BLOCKLENGTH;i++)
	{
		for(j=0;j<BLOCKWIDTH;j++)
		{
			f[i][j] |= state[i][j].a12<<11;
			f[i][j] |= state[i][j].a11<<10;
			f[i][j] |= state[i][j].a10<<9;
			f[i][j] |= state[i][j].a9<<8;
			f[i][j] |= state[i][j].a8<<7;
			f[i][j] |= state[i][j].a7<<6;
			f[i][j] |= state[i][j].a6<<5;
			f[i][j] |= state[i][j].a5<<4;
			f[i][j] |= state[i][j].a4<<3;
			f[i][j] |= state[i][j].a3<<2;
			f[i][j] |= state[i][j].a2<<1;
			f[i][j] |= state[i][j].a1<<0;
		}
	}

}
/******************************************************************************
环境状态变量
输入是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_sign(unsigned int f, unsigned char sign)
{
	int hc;
	int vc;
	int n;
	int v0,v1,h0,h1;
	unsigned char sign_v0,sign_v1,sign_h0,sign_h1;
	/* Avoid compiler warning. */
	n = 0;
	h0 = ((f & 0x40) != 0); //7
	h1	=((f & 0x80) != 0);//8 
	v0 = ((f & 0x10) != 0); //5
	v1 = ((f & 0x20) != 0);//6 

	sign_h0 = ((f & 0x400) != 0);//11
	sign_h1	=((f & 0x800) != 0); //12 
	sign_v0 = ((f & 0x100) != 0);//9
	sign_v1 = ((f & 0x200) != 0);//10  

	if(sign_h0 == 1)//符号位是负
	{
		h0 = -h0;
	}
	if(sign_h1 == 1)//符号位是负
	{
		h1 = -h1;
	}
	if(sign_v0 == 1)//符号位是负
	{
		v0 = -v0;
	}
	if(sign_v1 == 1)//符号位是负
	{
		v1 = -v1;
	}
assert(h0>=-1 && h0<=1 && h1>=-1 && h1<=1 && v0>=-1 && v0<=1 && v1>=-1 && v1<=1);
//垂直
	if((v0==0 && v1==0) || (v0==1 && v1==-1) || (v0==-1 && v1==1))
	{
		vc = 0;
	}
	if((v0==1 && v1==1) || (v0==0 && v1==1) || (v0==1 && v1==0))
	{
		vc = 1;
	}
	if((v0==-1 && v1==-1) || (v0==0 && v1==-1) || (v0==-1 && v1==0))
	{
		vc = -1;
	}
// 水平
	if((h0==0 && h1==0) || (h0==1 && h1==-1) || (h0==-1 && h1==1))
	{
		hc = 0;
	}
	if((h0==1 && h1==1) || (h0==0 && h1==1) || (h0==1 && h1==0))
	{
		hc = 1;
	}
	if((h0==-1 && h1==-1) || (h0==0 && h1==-1) || (h0==-1 && h1==0))
	{
		hc = -1;
	}
//完成极性编码的水平垂直领域指标
	if (hc == 1) 
	{
		if(vc == 1)
			n = 13;
		if(vc == 0)
			n = 12;
		if(vc == -1)
			n= 11;
	}

	if (hc == 0) 
	{
		if(vc == 1)
			n = 10;
		if(vc == 0)
			n = 9;
		if(vc == -1)
			n= 10;
	}

	if (hc == -1) 
	{
		if(vc == 1)
			n = 11;
		if(vc == 0)
			n = 12;
		if(vc == -1)
			n= 13;
	}
	assert(n < 14);
	return n;
}

/******************************************************************************
幅值细化扫描环境状态字
函数返回14---16之间的变量
//环境状态变量              d0  v0  d1    a1  a5  a2
							h0	x	h1	  a7  x   a8	
							d2	v1  d3	  a3  a6  a4
******************************************************************************/
unsigned char init_magnitude(unsigned int f,unsigned char sign)
{
	char h;
	char d;
	char v;
	char n;
	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);
	//
	hv = h + v + d;
	if(sign)
		n=16;
	else
	{
		if(hv == 0)
			n = 14;
		if(hv >= 1)
			n = 15;
	}
	return  n;//1+n
}

⌨️ 快捷键说明

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