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

📄 数字水印技术doc.cpp

📁 基于变换域的信息隐藏技术
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -