📄 wvlttrans.h
字号:
// WvltTrans.h: interface for the CWvltTrans class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_WVLTTRANS_H__ADB84B9A_B6D4_4770_B795_CCC4F2554D50__INCLUDED_)
#define AFX_WVLTTRANS_H__ADB84B9A_B6D4_4770_B795_CCC4F2554D50__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "stdafx.h"
#include <stdlib.h>
#include <fstream>
#include "math.h"
#include <map>
#include <bitset>
using namespace std;
#define PIC_NUM 301//目录下最大文件数
class CWvltTrans
{
public:
CWvltTrans();
virtual ~CWvltTrans();
public:
CString picTitle[PIC_NUM]; //图像名数组,不包括扩展名
public://图像存取和文件读写部分
void GrayToBinary(BYTE* pData);
void BYTEToBIT(BYTE* pData,bitset<8*sizeof(unsigned char)>* BinData);//将图像数据转化为二进制
void BITToBYTE(BYTE* pData,int* BinData);//将提取出的二值序列转化成BYTE型
float abs(float a);
bool WriteFile(CString , float**,int Height, int Width);
bool WriteFile(CString filepath, BYTE* Data,int size);
bool WriteFileFloat(CString filepath, float* Data,int len);
bool WriteFileInt(CString filepath, int* Data,int len);
bool ReadFile(CString , float**,int Height, int Width);//读取保存的选定系数
void sort(float &a,float &b,float &c,float *sortresult);//对三个数由大到小排序并返回中间值
bool FileSaveAs(CString Path,BITMAPFILEHEADER bmfh,BITMAPINFOHEADER bmih,BYTE* RGBData,unsigned long size);//将数据保存为BMP图像
void YUVToRGB(float** YData, float** UData, float** VData,unsigned char* RGBData, int Height, int Width,int Align);
bool SaveDistillMark(CString Path,LPBITMAPFILEHEADER lpbfh,LPBITMAPINFOHEADER lpbih,BYTE* RGBData,unsigned long size) ;
void RGBToYUV(unsigned char* lpData,float** YData,float** UData, float** VData);
BOOL ReadBitmap(LPCTSTR lpszPathName, unsigned char *& buffer);
int statics(CString strDirect);//计算strDirect中图像数量,并把文件名放入filename数组
public://小波变换部分
//图像小波变换的逆变换
void DWTi_Once(float** spData, float** spTransData0, float** spTransData1, int nHeight, int nHeight_H, int nWidth, int nWidth_H, int layer, float fRadius);
void DWT_Inverse(int nHeight, int nWidth, int nLayer,float **CoeffForIDWT,float **CoeffAfterIDWT);//n层小波逆变换
//一层以上小波变换
void DWT_nLayers(float** spOriginData, float** spTransData0, float** spTransData1, int nHeight, int nHeight_H, int nWidth, int nWidth_H, int layer, float fRadius);
//一层小波变换
void DWT_Once(float** spOriginData, float** spTransData0, float** spTransData1, int nHeight, int nHeight_H, int nWidth, int nWidth_H, int layer, float fRadius);
//竖直方向的小波变换
void Vert_Transform(float** spOriginData, float** spTransData1, int nHeight_H, int nWidth, float fRadius);
//水平方向的小波变换
void Hori_Transform(float** spOriginData, float** spTransData0, int nHeight, int nWidth_H, float fRadius);
public://水印加载与检测部分
void CoeffPartition();//将转换后的系数分割为各子带系数(小波变换层数不同分割的子带个数也不同)
void allocBuffers();//分配存放各子带系数及水印有关数据的缓冲区
void freeBuffers();
BOOL ReadBMPMarkBinary(CString BMPFilename);//读二值水印图像数据到缓冲区
BOOL ReadBMPMark(CString BMPFilename);//读取灰度水印图像到缓冲区
//基于Logistic映射的水印生成,生成二值水印序列
void LogisticWaterMark();
void changeMarkValue();//将水印值域从{0,1}改为{-1,1}
//求子带系数的最大值,子带大小与原始图像相同
float MaxvalOfBlock(float** Block);
void ChooseCoeffByLocalThreshold();//根据各子带阈值选择加载水印的系数
void ChooseCoeffByWholeThreshold();//根据全局阈值选择待嵌入水印的系数
void ChooseCoeffByQantity();//抖动方式选择待嵌入水印的系数
void ChooseCoeffBySort();//通过对原始图像三层小波变换后的系数进行排序,找出MarkLength个系数进行嵌入
//加载二值序列水印(非自适应乘性嵌入方式)
void LoadWaterMark();
void LoadWaterMarkOne(CString CurrentFile);
//加载二值序列水印(基于量化嵌入方式)
void LoadWaterMarkByQuantity();
void loadWaterMarkToLib(CString bmpPath);//为指定目录下的所有bmp图像加载水印
//检测二值水印,盲检测(不需原始载体)
bool CheckWaterMark(CString CheckPath);
bool CheckWaterMarkToLib(CString CheckPath);//对指定目录中的所有图像进行检测
bool DistillWaterMark(CString CheckPath);//提取单个图像的水印
bool DistillWaterMarkToLib(CString CheckPath);//提取指定目录下所有图像的水印
public://系统评估部分
float psnr(float** p1, float** p2, int height,int width);
float psnrForOne(CString Sourcefile,CString Thansfile);
//bool WriteResultToFile(CString TextFilePath,CString FileNameForDistill);//将PSNR与NC写到TextFilePath指定的文件中
bool WriteResultToFile(CString TextFilePath,float fpsnr,float fnc,CString FileName);//将PSNR与NC写到TextFilePath指定的文件中
float nc(BYTE* p1, BYTE* p2);
float sim(int* originMark, int* distilledMark);
};
#endif // !defined(AFX_WVLTTRANS_H__ADB84B9A_B6D4_4770_B795_CCC4F2554D50__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -