📄 2.h
字号:
#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 + -