?? 數字水印技術doc.cpp
字號:
free(x);
free(C);
free(L);
}
void CDCTDoc::OnZdct()
{
// TODO: Add your command handler code here
int k1,k2,i,j,w,h,m,N;
int*Z;
int value[8][8];
unsigned int*L;
float temp[8][8];
float scale,max,min;
float First[100][100];
N=8;
m=3;
Z=(int*)malloc(N*sizeof(int));
L=(unsigned int*)malloc(N*sizeof(unsigned int));
bit_reversal(L,m,N);
max=0;
min=1000;
BiaoZh();
w=Nw/N;
h=Nh/N;
for(i=0;i<w;i++)
{
for(j=0;j<h;j++)
{
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
Z[k2]=(int)(Datas[k1+i*N][k2+j*N]);
ZDCT(Z,L,m,N);
for(k2=0;k2<N;k2++)
value[k1][k2]=Z[k2];
}
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
Z[k2]=value[k2][k1];
ZDCT(Z,L,m,N);
for(k2=0;k2<N;k2++)
value[k2][k1]=Z[k2];
}
for(k1=0;k1<N;k1++)
for(k2=0;k2<N;k2++)
Dnum[k1+i*N][k2+j*N]=value[k1][k2];
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
{
temp[k1][k2]=(float)(log10(1+abs(value[k1][k2])));
if(temp[k1][k2]>max)
max=temp[k1][k2];
if(temp[k1][k2]<min)
min=temp[k1][k2];
}
}
scale=(float)(255.0/(max-min));
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
{
SetXY(k1+i*N,k2+j*N,(BYTE)((temp[k1][k2]-min)*scale));
}
}
}
}
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
{
if(i%8==0&&j%8==0)
{
Datas[i/8][j/8]=(float)Dnum[i][j];
}
}
Yuce((float)0.703,(float)0.436,(float)-0.2,(float)0.061,RNw/8,RNh/8);
for(i=0;i<RNw/8;i++)
for(j=0;j<RNh/8;j++)
First[i][j]=DataR[i][j];
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
{
if(i%8==0&&j%8==0)
Datas[i][j]=First[i/8][j/8];
else
Datas[i][j]=(float)Dnum[i][j];
}
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
{
if((int)Datas[i][j]>Max)
Max=(int)Datas[i][j];
if((int)Datas[i][j]<Min)
{
Min=(int)Datas[i][j];
}
}
aa=1;
UpdateAllViews(NULL);
SetModifiedFlag();
free(Z);
free(L);
}
void CDCTDoc::OnZidct()
{
// TODO: Add your command handler code here
int k1,k2,i,j,w,h,m,N;
int*Z;
int value[8][8];
unsigned int*L;
N=8;
m=3;
Z=(int*)malloc(N*sizeof(int));
L=(unsigned int*)malloc(N*sizeof(unsigned int));
bit_reversal(L,m,N);
w=Nw/N;
h=Nh/N;
for(i=0;i<w;i++)
{
for(j=0;j<h;j++)
{
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
Z[k2]=Dnum[k2+i*N][k1+j*N];
ZIDCT(Z,L,m,N);
for(k2=0;k2<N;k2++)
value[k2][k1]=Z[k2];
}
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
Z[k2]=value[k1][k2];
ZIDCT(Z,L,m,N);
for(k2=0;k2<N;k2++)
value[k1][k2]=Z[k2];
}
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
{
SetXY(k1+i*N,k2+j*N,(BYTE)(value[k1][k2]));
HDnum[i*N+k1][j*N+k2]=value[k1][k2];
}
}
}
}
Max=255;
aa=1;
UpdateAllViews(NULL);
SetModifiedFlag();
free(Z);
free(L);
}
void CDCTDoc::OnShang()
{
// TODO: Add your command handler code here
int i,j,k;
long num[3000];
float p[3000],H;
H=0;
RNw=m_size.cx;
RNh=m_size.cy;
if(Max==255)
{
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
Datas[i][j]=GetXY(i,j);
}
for(i=0;i<=Max-Min;i++)
num[i]=0;
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
{
k=(int)(Datas[i][j])-Min;
num[k]++;
}
float g=(float)(RNw*RNh);
for(i=0;i<=(Max-Min);i++)
p[i]=(float)(num[i]/g);
for(i=0;i<=(Max-Min);i++)
if(num[i]==0)
H=H;
else
H=-(float)(p[i]*log10(p[i])/log10(2))+H;
CMyDlg1 d;
d.m_shang=H;
d.DoModal();
}
void CDCTDoc::Yuce(float a1,float a2,float a3,float a4,int w,int h)
{
int i,j;
float temp;
for(i=1;i<h;i++)
{
DataR[0][i]=Datas[0][i]-a1*Datas[0][i-1];
DataR[w-1][i]=Datas[w-1][i]-a1*Datas[w-1][i-1];
}
for(i=1;i<w;i++)
{
DataR[i][0]=Datas[i][0]-a1*Datas[i-1][0];
DataR[i][h-1]=Datas[i][h-1]-a1*Datas[i-1][h-1];
}
DataR[0][0]=Datas[0][0]/10;
for(i=1;i<(w-1);i++)
for(j=1;j<(h-1);j++)
{
temp=Datas[i][j-1]*a1+a2*Datas[i-1][j]+a3*Datas[i-1][j-1]+a4*Datas[i-1][j+1];
DataR[i][j]=Datas[i][j]-temp;
}
}
void CDCTDoc::OnYuce()
{
// TODO: Add your command handler code here
int i,j;
float a1,a2,a3,a4;
data.DoModal();
a1=data.m_a1;
a2=data.m_a2;
a3=data.m_a3;
a4=data.m_a4;
BiaoZh();
Yuce(a1,a2,a3,a4,RNw,RNh);
Max=0;
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
SetXY(i,j,(BYTE)(abs((int)DataR[i][j])));
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
Datas[i][j]=(float)fabs(DataR[i][j]);
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
{
if((int)DataR[i][j]>Max)
Max=(int)DataR[i][j];
if((int)DataR[i][j]<Min)
Min=(int)DataR[i][j];
Datas[i][j]=DataR[i][j];
}
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnHuifu()
{
// TODO: Add your command handler code here
float a1,a2,a3,a4;
int i,j;
a1=data.m_a1;
a2=data.m_a2;
a3=data.m_a3;
a4=data.m_a4;
Datas[0][0]=10*DataR[0][0];
for(i=1;i<RNh;i++)
{
Datas[0][i]=a1*Datas[0][i-1]+DataR[0][i];
Datas[RNw-1][i]=a1*Datas[RNw-1][i-1]+DataR[RNw-1][i];
}
for(i=1;i<RNw;i++)
{
Datas[i][0]=a1*Datas[i-1][0]+DataR[i][0];
Datas[i][RNw-1]=a1*Datas[i-1][RNw-1]+DataR[i][RNw-1];
}
for(i=1;i<(RNw-1);i++)
for(j=1;j<(RNh-1);j++)
Datas[i][j]=DataR[i][j]+Datas[i][j-1]*a1+a2*Datas[i-1][j]+a3*Datas[i-1][j-1]+a4*Datas[i-1][j+1];
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
SetXY(i,j,(BYTE)(Datas[i][j]));
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnVData()
{
// TODO: Add your command handler code here
aa=1;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
ShowData[i][j]=Dnum[m_x+i][m_y+j];
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnHData()
{
// TODO: Add your command handler code here
aa=1;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
ShowData[i][j]=HDnum[m_x+i][m_y+j];
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnDataDCT()
{
// TODO: Add your command handler code here
aa=2;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
ShowFData[i][j]=Datas[m_x+i][m_y+j];
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnIDCtHData()
{
// TODO: Add your command handler code here
aa=2;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
ShowFData[i][j]=Datas[m_x+i][m_y+j];
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnZstore()
{
// TODO: Add your command handler code here
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
ShowData[i][j]=(int)Datas[m_x+i][m_y+j];
aa=1;
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnHZDCt()
{
// TODO: Add your command handler code here
float*C;
float*x;
unsigned int*L;
int N,m,k1,k2,i,j;
N=8;
m=(int)((log10(N))/(log10(2)));
C=(float*)malloc((N-1)*sizeof(float));
x=(float*)malloc(N*sizeof(float));
L=(unsigned int*)malloc(N*sizeof(unsigned int));
bit_reversal(L,m,N);
WTSINV(C,m,N);
for(i=0;i<Nw/N;i++)
{
for(j=0;j<Nh/N;j++)
{
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
{
x[k2]=(float)Datas[k2+i*N][k1+j*N];
}
IFCT(x,L,C,m,N);
for(k2=0;k2<N;k2++)
{
Datas[k2+i*N][k1+j*N]=x[k2];
}
}
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
{
x[k2]=Datas[k1+i*N][k2+j*N];
}
IFCT(x,L,C,m,N);
for(k2=0;k2<N;k2++)
{
Datas[k1+i*N][k2+j*N]=x[k2];
}
}
}
}
for(k1=0;k1<RNw;k1++)
{
for(k2=0;k2<RNh;k2++)
{
SetXY(k1,k2,(BYTE)(Datas[k1][k2]));
}
}
Max=255;
UpdateAllViews(NULL);
SetModifiedFlag();
free(x);
free(C);
free(L);
}
void CDCTDoc::OnHdatadct()
{
// TODO: Add your command handler code here
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
ShowData[i][j]=(int)Datas[m_x+i][m_y+j];
aa=1;
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnWucha()
{
// TODO: Add your command handler code here
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
ShowData[i][j]=StartData[i][j]-(int)Datas[m_x+i][m_y+j];
aa=1;
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDCTDoc::OnJianjin()
{
// TODO: Add your command handler code here
int k1,k2,i,j,w,h,m,N,num;
int*Z;
int value[8][8];
unsigned int*L;
float temp[8][8];
float scale,max,min;
CDlg zx;
zx.DoModal();
num=zx.m_num;
N=8;
m=3;
Z=(int*)malloc(N*sizeof(int));
L=(unsigned int*)malloc(N*sizeof(unsigned int));
bit_reversal(L,m,N);
max=0;
min=1000;
BiaoZh();
w=Nw/N;
h=Nh/N;
for(i=0;i<w;i++)
{
for(j=0;j<h;j++)
{
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
Z[k2]=(int)GetXY(k1+i*N,k2+j*N);
ZDCT(Z,L,m,N);
for(k2=0;k2<N;k2++)
value[k1][k2]=Z[k2];
}
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
Z[k2]=value[k2][k1];
ZDCT(Z,L,m,N);
for(k2=0;k2<N;k2++)
value[k2][k1]=Z[k2];
}
for(k1=0;k1<N;k1++)
for(k2=0;k2<N;k2++)
{
input[k1][k2]=value[k1][k2];
}
Matrix();
for(k1=(64-num);k1<64;k1++)
output[k1]=0;
RMatrix();
for(k1=0;k1<N;k1++)
for(k2=0;k2<N;k2++)
value[k1][k2]=input[k1][k2];
for(k1=0;k1<N;k1++)
for(k2=0;k2<N;k2++)
{
Dnum[k1+i*N][k2+j*N]=value[k1][k2];
Datas[k1+i*N][k2+j*N]=(float)value[k1][k2];
}
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
{
temp[k1][k2]=(float)(log10(1+abs(value[k1][k2])));
if(temp[k1][k2]>max)
max=temp[k1][k2];
if(temp[k1][k2]<min)
min=temp[k1][k2];
}
}
scale=(float)(255.0/(max-min));
for(k1=0;k1<N;k1++)
{
for(k2=0;k2<N;k2++)
{
SetXY(k1+i*N,k2+j*N,(BYTE)((temp[k1][k2]-min)*scale));
}
}
}
}
for(i=0;i<RNw;i++)
for(j=0;j<RNh;j++)
{
if((int)Datas[i][j]>Max)
Max=(int)Datas[i][j];
if((int)Datas[i][j]<Min)
Min=(int)Datas[i][j];
}
aa=1;
UpdateAllViews(NULL);
SetModifiedFlag();
free(Z);
free(L);
}
void CDCTDoc::Matrix()
{
output[0]=input[0][0];
output[1]=input[1][0];
output[2]=input[0][1];
output[3]=input[1][1];
output[4]=input[2][0];
output[5]=input[3][0];
output[6]=input[2][1];
output[7]=input[3][1];
output[8]=input[0][2];
output[9]=input[1][2];
output[10]=input[0][3];
output[11]=input[1][3];
output[12]=input[2][2];
output[13]=input[3][2];
output[14]=input[2][3];
output[15]=input[3][3];
output[16]=input[4][0];
output[17]=input[5][0];
output[18]=input[4][1];
output[19]=input[5][1];
output[20]=input[6][0];
output[21]=input[7][0];
output[22]=input[6][1];
output[23]=input[7][1];
output[24]=input[4][2];
output[25]=input[5][2];
output[26]=input[4][3];
output[27]=input[5][3];
output[28]=input[6][2];
output[29]=input[7][2];
output[30]=input[6][3];
output[31]=input[7][3];
output[32]=input[0][4];
output[33]=input[1][4];
output[34]=input[0][5];
output[35]=input[1][5];
output[36]=input[2][4];
output[37]=input[3][4];
output[38]=input[2][5];
output[39]=input[3][5];
output[40]=input[0][6];
output[41]=input[1][6];
output[42]=input[0][7];
output[43]=input[1][7];
output[44]=input[2][6];
output[45]=input[3][6];
output[46]=input[2][7];
output[47]=input[3][7];
output[48]=input[4][4];
output[49]=input[5][4];
output[50]=input[4][5];
output[51]=input[5][5];
output[52]=input[6][4];
output[53]=input[7][4];
output[54]=input[6][5];
output[55]=input[7][5];
output[56]=input[4][6];
output[57]=input[5][6];
output[58]=input[4][7];
output[59]=input[5][7];
output[60]=input[6][6];
output[61]=input[7][6];
output[62]=input[6][7];
output[63]=input[7][7];
}
void CDCTDoc::RMatrix()
{
input[0][0]=output[0];
input[1][0]=output[1];
input[0][1]=output[2];
input[1][1]=output[3];
input[2][0]=output[4];
input[3][0]=output[5];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -