📄 testview.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 + -