📄 watermethod.h
字号:
// Watermethod.h: interface for the CWatermethod class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_WATERMETHOD_H__C2489399_5F0D_4D19_948F_7C876CC74856__INCLUDED_)
#define AFX_WATERMETHOD_H__C2489399_5F0D_4D19_948F_7C876CC74856__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define PI 3.1415926535897932
#define MAXBLOCKHEIGHT 8
#define MAXBLOCKWIDTH 8
#define MAXINPUTVECTORS 64*64
#define MAXVECTORDIMENSION 64
#define MAXENCODEVECTORS 64*64
#define MAXIMAGESIZE 512*512
#define ENCODEMETHODNUMBER 11
#define MAXWATERMARKSIZE 2048
#define BLOCKSIZE 64
#define WMIMAGEWIDTH 128
#define WMIMAGEHEIGHT 128
#define WMIMAGESIZE 128*128
#define WMIMAGEBLOCKNUM 4096
#define WMBLOCKWIDTH 2
#define WMBLOCKHEIGHT 2
#define WMBLOCKSIZE 4
#define WMBLOCKROWNUM 64
#define WMBLOCKCOLNUM 64
class CWatermethod
{
public:
CWatermethod();
virtual ~CWatermethod();
//The four codebook design methods
//Bit decomposition and byte composition
void DCT(unsigned char *OriginalImageBlock[MAXBLOCKHEIGHT],double *DCTBlock[MAXBLOCKHEIGHT],int blockheight,int blockwidth);
void IDCT(double *DCTBlock[MAXBLOCKHEIGHT],unsigned char *ReconstructedImageBlock[MAXBLOCKHEIGHT],int blockheight,int blockwidth);
void DCT1(char *OriginalImageBlock[MAXBLOCKHEIGHT],double *DCTBlock[MAXBLOCKHEIGHT],int blockheight,int blockwidth);
void IDCT1(double *DCTBlock[MAXBLOCKHEIGHT],char *ReconstructedImageBlock[MAXBLOCKHEIGHT],int blockheight,int blockwidth);
int AddBased(long int blocks,unsigned short blockheight,unsigned short blockwidth,unsigned short hb,unsigned short wb,unsigned char *SourceVector[MAXINPUTVECTORS],unsigned char *WmSourceVector[MAXINPUTVECTORS],unsigned char *TerminalVector[MAXINPUTVECTORS],int *imageblockvarseqkey,int *wmblockmarknumseqkey);
int AddBasedExtract(long int blocks,unsigned short blockheight,unsigned short blockwidth,unsigned short hb,unsigned short wb,unsigned char *SourceVector[MAXINPUTVECTORS],unsigned char *pp01[MAXINPUTVECTORS],unsigned char *TerminalVector[MAXINPUTVECTORS],int *imageblockvarseqkey,int *wmblockmarknumseqkey);
int Subsamplingmethod(long int blocks,unsigned short blockheight,unsigned short blockwidth,unsigned short hb,unsigned short wb,unsigned char *SourceVector1[MAXINPUTVECTORS/4],unsigned char *SourceVector2[MAXINPUTVECTORS/4],unsigned char *SourceVector3[MAXINPUTVECTORS/4],unsigned char *SourceVector4[MAXINPUTVECTORS/4],unsigned char *WmSourceVector1[MAXINPUTVECTORS/4],unsigned char *WmSourceVector2[MAXINPUTVECTORS/4],unsigned char *TerminalVector1[MAXINPUTVECTORS/4],unsigned char *TerminalVector2[MAXINPUTVECTORS/4],unsigned char *TerminalVector3[MAXINPUTVECTORS/4],unsigned char *TerminalVector4[MAXINPUTVECTORS/4],int method);
int ExtractSubsamplingmethod(long int blocks,unsigned short blockwidth,unsigned short blockheight,unsigned short wb,unsigned short hb,unsigned short wmblockheight,unsigned short wmblockwidth,unsigned char *SourceVector1[MAXINPUTVECTORS/4],unsigned char *SourceVector2[MAXINPUTVECTORS/4],unsigned char *SourceVector3[MAXINPUTVECTORS/4],unsigned char *SourceVector4[MAXINPUTVECTORS/4],unsigned char *pp1[MAXINPUTVECTORS/4],unsigned char *pp2[MAXINPUTVECTORS/4],int method);
void BitDecomposition(unsigned char *bytes,unsigned char *bits,long int numberofbytes);
void ByteComposition(unsigned char *bits,unsigned char *bytes,long int numberofbytes);
//Watermark permutation and reverse permutation
void Permuted(unsigned char *original,unsigned char *permuted,long int *key,long int number,int method);
void ReversePermuted(unsigned char *permuted,unsigned char *reverse,long int *key,long int number);
void whiten(unsigned char *input1,unsigned char *input2,char *output1,char *output2,char *totalmean);
void reversewhiten(char *input1,char *input2,unsigned char *output1,unsigned char *output2,char *totalmean);
};
#endif // !defined(AFX_WATERMETHOD_H__C2489399_5F0D_4D19_948F_7C876CC74856__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -