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

📄 testview.h

📁 方向自适应的小波变换程序(5/3) 本人自己编写
💻 H
字号:
// testView.h : interface of the CTestView class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_TESTVIEW_H__E4DC0919_26FA_47EF_AF49_72C0AA2C4665__INCLUDED_)
#define AFX_TESTVIEW_H__E4DC0919_26FA_47EF_AF49_72C0AA2C4665__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


class CTestView : public CScrollView
{
protected: // create from serialization only
	CTestView();
	DECLARE_DYNCREATE(CTestView)

// Attributes
public:
	CTestDoc* GetDocument();

// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CTestView)
	public:
	virtual void OnDraw(CDC* pDC);  // overridden to draw this view
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	protected:
	virtual void OnInitialUpdate(); // called first time after construct

	//}}AFX_VIRTUAL

// Implementation
public:
	//用来对参考帧进行二维位移差滤波的模板
	int FilterTemplate(int **Reference,   //参考帧
		               int **Filter,      //滤波器模板
					   int Height,        //模板的高度
					   int Width,         //模板的宽度
					   int Center_x,      //模板中心的横坐标
					   int Center_y,      //模板中心的纵坐标
					   int Des_x,         //当前被滤波系数的横坐标
					   int Des_y,         //当前被滤波系数的纵坐标
					   int Frame_height,  //参考帧的高度
                       int Frame_width,   //参考帧的宽度
					   int Deno);         //模板系数都是分数,为了增加计算的精度
	                                      //对各个系数进行了通分,滤波时仅乘以分子,
	                                      //经过整型滤波后需要统一除以的分母
		
	//用来对参考帧进行位移差滤波
	void ShiftDifferenceFiltering(int **Origin,
		                          int ***FilterResult, 
								  int Ori_iWidth, 
								  int Ori_iHeight, 
								  int Transform_level);

	void ShiftDifferenceFiltering_DiagonalDirection(int **Origin, 
		                                            int **FilterResult, 
													int iWidth, 
													int iHeight);

	void ShiftDifferenceFiltering_yDirection(int **Origin, 
		                                     int **FilterResult, 
											 int iWidth, 
											 int iHeight);

	void ShiftDifferenceFiltering_xDirection(int **Origin, 
		                                     int **FilterResult, 
											 int iWidth, 
											 int iHeight);
	
	
	//空间域全搜索
	void FullSearch(int **Origin,
		            int **Reference,
					int WindowSize_x,
					int WindowSize_y,
					int BlockSize,
					int Min_x,
					int Min_y,
					int Max_x,
					int Max_y,
					int **Vector_x,
					int **Vector_y);

	//小波域内对低频子带的运动向量进行求精(张亚勤算法的第四种)
	void Refine_Init_MV(int **Origin,       //目标帧
						int **Reference,    //参考帧
						int WindowSize_x,   //搜索窗口的水平大小
						int WindowSize_y,   //搜索窗口的竖直大小
					    int BlockSize,      //宏块的大小
						int Block_x,        //宏块左上角的水平坐标
						int Block_y,        //宏块左上角的竖直坐标
						int Min_x,          //搜索区域水平方向的最小坐标
						int Min_y,          //搜索区域竖直方向的最小坐标
						int Max_x,          //搜索区域水平方向的最大坐标
						int Max_y,          //搜索区域竖直方向的最大坐标
						int Init_MVx,       //初始的水平向量
						int Init_MVy,       //初始的竖直向量
						int *Refine_MVx,    //求精后的水平向量
						int *Refine_MVy);    //求精后的竖直向量
	
	//在小波域采用两种匹配标准进行全搜索
	void FullSearch2(int **Origin,
		             int **Reference,
					 int WindowSize_x,
					 int WindowSize_y,
					 int BlockSize,
					 int Min_x,
					 int Min_y,
					 int Max_x,
					 int Max_y,
					 int **Vector_x,
					 int **Vector_y);

	//利用位移差滤波结果对各个频带进行全搜索匹配,计算运动向量
	void FullSearch_ShiftDiffFilter(int **Origin,        //目标帧
		                            int **Reference,     //参考帧
									int ***FilterResult, //位移差滤波结果
									int WindowSize_x,    //搜索窗口水平宽度
									int WindowSize_y,    //搜索窗口竖直高度
									int BlockSize,       //宏块大小
									int Min_x,           //进行运动估计的区域的水平起始坐标
									int Min_y,           //进行运动估计的区域的竖直起始坐标
									int Max_x,           //进行运动估计的区域的水平终止坐标
									int Max_y,           //进行运动估计的区域的竖直终止坐标
									int **Vector_x,      //保存各个宏块运动向量的水平分量
									int **Vector_y);     //保存各个宏块运动向量的竖直分量

	//低频子带平移运动估计的全搜索方法
	void FullSearch_LowBandShift(int **Origin,
		                         int *****LL, 
								 int *****HL, 
								 int *****LH, 
								 int *****HH,
								 int level,
								 int WindowSize_x, 
								 int WindowSize_y, 
								 int BlockSize,
								 int Min_x, 
								 int Min_y, 
								 int Max_x, 
								 int Max_y);

	//对各层LL子带采用低频子带平移方法进行运动估计的全搜索方法
	void FullSearch_LowBandShift_SimpleBand(int **Origin, 
		                                    int *****Band, 
											int level, 
											int WindowSize_x, 
											int WindowSize_y, 
											int BlockSize, 
											int Min_x, 
											int Min_y, 
											int Max_x, 
											int Max_y,
											int **Vector_x,
					                        int **Vector_y);

	//小波域低频自带平移方法运动估计中,对最低频子带的运动向量进行求精
	void Refine_LBS_Init_MV(int **Origin, 
		                    int *****Band, 
							int level, 
							int WindowSize_x, 
							int WindowSize_y, 
							int BlockSize, 
							int Block_x, 
							int Block_y, 
							int Min_x, 
							int Min_y, 
							int Max_x, 
							int Max_y, 
							int Init_MVx, 
							int Init_MVy, 
							int *Refine_MVx, 
							int *Refine_MVy);
	
	//无符号小波变换
	void inverse_wavelet_row(LPSTR  dst,
		                     const LPSTR  src,
							 const int len);

	void inverse_wavelet_transform(LPSTR  dst,
		                           const int width,
								   const int height,
								   const int levels);

	void wavelet_row(LPSTR  dst,
		             const LPSTR  src,
					 const int len);

	void wavelet_transform(LPSTR  dst,
		                   const int width,
						   const int height,
						   const int levels);

	//整型小波变换
	void inverse_wavelet_row(int* dst,
		                     int* src,
							 const int len);

	void inverse_wavelet_transform(int **dst,
		                           const int width,
								   const int height,
								   const int levels);

	void wavelet_row(int *dst,
		             int *src,
					 const int len);

	void wavelet_transform(int **dst, 
		                   const int width,
						   const int height,
						   const int levels);

	//小波变换,不同的是,变换时采用额外的空间缓存,然后覆盖原来的存储空间
	void inverse_wavelet_transform_overlap(int** dst, const int width, const int height, const int levels);
	void wavelet_transform_overlap(int **dst,const int width,const int height,const int levels);

	virtual ~CTestView();

public:
	void inverse_quincunx_Prediction(int levels);
	void inverse_quincunx_Update(int levels);
	void inverse_quincunx_Prediction1(int levels);
	void inverse_quincunx_Update1(int levels);
	void quincunx_Update1();
	void quincunx_Prediction1();
	void quincunx_Update();
	void Bound_location(int *x,int *y,int i,int j,int a,int b);
	void quincunx_Prediction();
	void Sinc_coefficitns();
	void inverse_Horizontal_Prediction(int levels);
	void inverse_Vertical_Prediction(int levels);
	void inverse_Vertical_Update(int levels);
	void inverse_Horizontal_Update(int levels);
	int N;
	int M;
	int levels;
	void Horizontal_Update();
	void Vertical_Update();
	void Vertical_Direction_Prediction();
	void Vertical_Sinc_interpolation();
	void Horizontal_Direction_Prediction();
	void ADLwavelet_transform_overlap(int **dst, const int width, const int height, const int levels);
	void Horizontal_Sinc_interpolation();
	int MyWidth;
	int MyHeight;

	int GetNearestLeftShiftNumber(int n,int block_size);
	int Sign(int x);
	

	BOOL Down_Shift_Band(int **Band, int iHeight, int iWidth);
	BOOL Right_Shift_Band(int **Band, int iHeight, int iWidth);
	

#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
	//{{AFX_MSG(CTestView)
	afx_msg void OnSpatialMotionEstimation();
	afx_msg void OnFreqMotionEstimation();
	afx_msg void OnFreqMotionEstimationBandToBandLowestFourBandPlusRefine();
	afx_msg void OnFreqMotionEstimationBandToBand2();
	afx_msg void OnFreqMotionEstimationShiftDifference();
	afx_msg void OnIntWaveletForward();
	afx_msg void OnIntWaveletBackward();
	afx_msg void OnFreqMotionEstimationLowBandShift();
	afx_msg void OnFreqMotionEstimationBandToBandLowestLLOnly();
	afx_msg void OnFreqMotionEstimationBandToBandLowestFourBandOnly();
	afx_msg void OnFreqMotionEstimationBandToBandLowestLLPlusRefine();
	afx_msg void OnFreqMotionEstimationFinerLLHierarchicalBased();
	afx_msg void OnIntAdlWaveletForward();
	afx_msg void OnIntAdlWaveletBackward();
	afx_msg void OnINTQuincunxWAVELETFORWARD();
	afx_msg void OnINTQuincunxWAVELETBACKWARD();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

#ifndef _DEBUG  // debug version in testView.cpp
inline CTestDoc* CTestView::GetDocument()
   { return (CTestDoc*)m_pDocument; }
#endif

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_TESTVIEW_H__E4DC0919_26FA_47EF_AF49_72C0AA2C4665__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -