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

📄 2.h

📁 东南大学版本
💻 H
📖 第 1 页 / 共 2 页
字号:
#include "iostream.h"
#include "math.h"
#define M 6
#define N 256
#define BOR 8 
#define CEN 4
#define CENR 4
#define PN 1040
#define NOSE 0
#define NOSE1 400
double s[N];
double cs[N];
int gray[256];
double a[M][N];
double b[M-1][N/2];
int CNOSE=0;
double h[4];
double hh[4][4];

double hb[9];
double hbhb[9][9];
double hbhr[9][9];
double hrhb[9][9];
double hrhr[9][9];
double hr[9];
//初始化滤波器
void initH()
{
	hb[4]=0.6029490182363603;
	hb[4+1]=0.266864118442875;
	hb[4-1]=0.266864118442875;
	hb[4-2]=-0.07822326652899028;
	hb[4+2]=-0.07822326652899028;
	hb[4-3]=-0.01684118442874977;
	hb[4+3]=-0.01684118442874977;
	hb[4-4]=0.02674875741081008;
	hb[4+4]=0.02674875741081008;
	hr[4]=0.5575435262285*2.0;
	hr[4+1]=0.295635881557125;
	hr[4-1]=0.295635881557125;
	hr[4-2]=-0.028771763114250032;
	hr[4+2]=-0.028771763114250032;
	hr[4-3]=-0.045635881557125016;
	hr[4+3]=-0.045635881557125016;
	hr[4-4]=0;
	hr[4+4]=0;
	for(int i=-4;i<=4;i++)
		for(int j=-4;j<=4;j++)
		{
			hbhb[CEN+i][CEN+j]=hb[CEN+i]*hb[CEN+j];
			hbhr[CEN+i][CENR+j]=hb[CEN+i]*hr[CENR+j];
			hrhb[CENR+i][CEN+j]=hr[CENR+i]*hb[CEN+j];
			hrhr[CENR+i][CENR+j]=hr[CENR+i]*hr[CENR+j];
		}

}
void initD4(int HD)
{
	if(HD==1)
	{
	   h[0]=1;
	   h[1]=1;
	   h[2]=0;
	   h[3]=0;
	}
	else if(HD==2)
	{
	   h[0]=(1+sqrt(3))/4;
	   h[1]=(3+sqrt(3))/4;
	   h[2]=1-h[0];
	   h[3]=1-h[1];
	}
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
		{
			hh[i][j]=h[i]*h[j];
		}
}
//图像参数

double rah[5][PN][PN];
double rdh1[5][PN][PN];
double rdh2[5][PN][PN];
double rdh3[5][PN][PN];

double gah[5][PN][PN];
double gdh1[5][PN][PN];
double gdh2[5][PN][PN];
double gdh3[5][PN][PN];

double bah[5][PN][PN];
double bdh1[5][PN][PN];
double bdh2[5][PN][PN];
double bdh3[5][PN][PN];


/////////////////编码;

struct wn
{
	double w;
	int c;
};
int* rc;
int* gc;
int* bc;
int* encoder(double dh1x[][PN][PN],double dh2x[][PN][PN],double dh3x[][PN][PN],int H,int W,int MS,int T)
{
	int k=0;
	int s=1;
	//int c[10000];
    wn dh1[5][100][100];
	wn dh2[1][100][100];
	//wn dh3[5][100][100];
	/*
	for(s=0;s<5;s++)
		for(int i=0;i<H;i++)
			for(int j=0;j<W;j++)
			{
				dh1[s][BOR+i][BOR+j].w=dh1x[s][BOR+i][BOR+j];
				dh2[s][BOR+i][BOR+j].w=dh2x[s][BOR+i][BOR+j];
				dh3[s][BOR+i][BOR+j].w=dh3x[s][BOR+i][BOR+j];

				dh1[s][BOR+i][BOR+j].c=5;
				dh2[s][BOR+i][BOR+j].c=5;
				dh3[s][BOR+i][BOR+j].c=5;
			}

	for(s=MS;s>=1;s--)
	{
		for(int i=0;i<(H>>s);i++)
			for(int j=0;j<(W>>s);j++)
			{
				if(dh1[s][BOR+i][BOR+j].w>T)
				{
					c[k]=1;
					dh1[s][BOR+i][BOR+j].c=1;
					k++;
				}
				else if(dh1[s][BOR+i][BOR+j].w<-T)
				{
					c[k]=4;
					dh1[s][BOR+i][BOR+j].c=4;
					k++;
				}
				else 
				{
					if(dh1[s][BOR+i][BOR+j].c!=2)
					{
						for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									if(dh1[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].w>T)
									{
										c[k]=3;
									}
								}
						}
						if(c[k]!=3)
						{
							for(int l=s-1;l>=1;l--)
							{
								for(int g=0;g<(1<<(s-l));g++)
									for(int h=0;h<(1<<(s-l));h++)
									{
										dh1[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].c=2;
									}
							}
							c[k]=2;
						}
						k++;
					}
				}
			}
////////////////////////////////////1
		for(i=0;i<(H>>s);i++)
			for(int j=0;j<(W>>s);j++)
			{
				if(dh2[s][BOR+i][BOR+j].w>T)
				{
					c[k]=1;
					dh2[s][BOR+i][BOR+j].c=1;
					k++;
				}
				else if(dh2[s][BOR+i][BOR+j].w<-T)
				{
					c[k]=4;
					dh2[s][BOR+i][BOR+j].c=4;
					k++;
				}
				else 
				{
					if(dh2[s][BOR+i][BOR+j].c!=2)
					{
						for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									if(dh2[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].w>T)
									{
										c[k]=3;
									}
								}
						}
						if(c[k]!=3)
						{
							for(int l=s-1;l>=1;l--)
							{
								for(int g=0;g<(1<<(s-l));g++)
									for(int h=0;h<(1<<(s-l));h++)
									{
										dh2[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].c=2;
									}
							}
							c[k]=2;
						}
						k++;
					}
				}
			}
//////////////////////////////////////////2
		for(i=0;i<(H>>s);i++)
			for(int j=0;j<(W>>s);j++)
			{
				if(dh3[s][BOR+i][BOR+j].w>T)
				{
					c[k]=1;
					dh2[s][BOR+i][BOR+j].c=1;
					k++;
				}
				else if(dh3[s][BOR+i][BOR+j].w<-T)
				{
					c[k]=4;
					dh3[s][BOR+i][BOR+j].c=4;
					k++;
				}
				else 
				{
					if(dh3[s][BOR+i][BOR+j].c!=2)
					{
						for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									if(dh3[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].w>T)
									{
										c[k]=3;
									}
								}
						}
						if(c[k]!=3)
						{
							for(int l=s-1;l>=1;l--)
							{
								for(int g=0;g<(1<<(s-l));g++)
									for(int h=0;h<(1<<(s-l));h++)
									{
										dh3[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].c=2;
									}
							}
							c[k]=2;
						}
						k++;
					}
				}
			}
	}
	*/
	return 0;
}
//////////////////////////////////解码;
void decoder(double dh1x[][PN][PN],double dh2x[][PN][PN],double dh3x[][PN][PN],int* c,int H,int W,int MS,int T)
{
	int k=0;
	int s=1;
    wn dh1[5][PN][PN];
	wn dh2[5][PN][PN];
	wn dh3[5][PN][PN];


	for(s=MS;s>=1;s--)
	{
		for(int i=0;i<(H>>s);i++)
			for(int j=0;j<(W>>s);j++)
			{
				if(dh1[s][BOR+i][BOR+j].c!=2)
				{
					if(c[k]==1)
					{
						dh1[s][BOR+i][BOR+j].c=1;
						dh1[s][BOR+i][BOR+j].w=T;
						k++;
					}
					else if(c[k]==4)
					{
						dh1[s][BOR+i][BOR+j].c=4;
						dh1[s][BOR+i][BOR+j].w=-T;
						k++;
					}
					else if(c[k]==3)
					{
						dh1[s][BOR+i][BOR+j].c=3;
						dh1[s][BOR+i][BOR+j].w=0;
						k++;
					}
					else if(c[k]==2)
					{
						dh1[s][BOR+i][BOR+j].w=0;
						dh1[s][BOR+i][BOR+j].c=2;
						for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									dh1[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].w=0;
									dh1[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].c=2;
								}
						}
					}
				}
			}
////////////////////////////////////1
		for( i=0;i<(H>>s);i++)
			for(int j=0;j<(W>>s);j++)
			{
				if(dh2[s][BOR+i][BOR+j].c!=2)
				{
					if(c[k]==1)
					{
						dh2[s][BOR+i][BOR+j].c=1;
						dh2[s][BOR+i][BOR+j].w=T;
						k++;
					}
					else if(c[k]==4)
					{
						dh2[s][BOR+i][BOR+j].c=4;
						dh2[s][BOR+i][BOR+j].w=-T;
						k++;
					}
					else if(c[k]==3)
					{
						dh2[s][BOR+i][BOR+j].c=3;
						dh2[s][BOR+i][BOR+j].w=0;
						k++;
					}
					else if(c[k]==2)
					{
						dh2[s][BOR+i][BOR+j].w=0;
						dh2[s][BOR+i][BOR+j].c=2;
						for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									dh2[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].w=0;
									dh2[s][BOR+(i<<(s-l))+g][BOR+(j<<(s-l))+h].c=2;
								}
						}
					}
				}
			}
//////////////////////////////////////////2
		for(i=0;i<(H>>s);i++)
			for(int j=0;j<(W>>s);j++)
			{
				if(dh3[s][BOR+i][BOR+j].c!=2)
				{
					if(c[k]==1)
					{
						dh3[s][BOR+i][BOR+j].c=1;
						dh3[s][BOR+i][BOR+j].w=T;
						k++;
					}
					else if(c[k]==4)
					{
						dh3[s][BOR+i][BOR+j].c=4;
						dh3[s][BOR+i][BOR+j].w=-T;
						k++;
					}
					else if(c[k]==3)
					{
						dh3[s][BOR+i][BOR+j].c=3;
						dh3[s][BOR+i][BOR+j].w=0;
						k++;
					}
					else if(c[k]==2)
					{

⌨️ 快捷键说明

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