/*
* Copyright (c) 2015,中国航天电子技术研究院 无人机系统工程研究所
* All rights reserved.
*
* 文件名称:waveReconstruct.h
* 摘 要:小波重构接口
*
* 当前版本:1.0
* 作 者:王家星
* 完成日期:2015年08月27日
*/

#pragma once

// OpenCV
#include <opencv2\opencv.hpp>  
using namespace cv;


// 功能:函数 waveRec2() 对输入的分解系数矩阵coef进行 level 层重构, 得到重构矩阵rec
// 输入:    
//	        coef 分解系数,其结构如下:coef = {cA_N;cV_N;cH_N;cD_N;cV_N-1;cH_N-1;cD_N-1;……;cV_1;cH_1;cD_1}
//          scf: 存储各级分解系数矩阵的大小以及原始(图像)矩阵的大小
//          wname:  小波名称
//          level:小波重构层数
// 输出:  
//          rec: 重构矩阵
// 返回值:
//          运算有效返回true,否则返回false
bool waveRec2(cv::Mat& rec, const std::deque<cv::Mat> &coef, const std::deque<cv::Vec2i> &scf, const string wname = "sym5", const unsigned int level = 10);


// 功能:函数 getWaveRecFilter() 基于小波名称wname计算小波重构滤波器
// 输入:    
//          wname:   小波名称 
//                  支持小波:
//							1. haar
//							2. symN  [1, 10]
//							3. dbN   [1, 10]
//							4. coifN [1, 5]
// 输出:  
//          Lo_R: 低通滤波器
//	        Hi_R: 高通滤波器
// 返回值:
//         运算有效返回true,否则返回false
bool getWaveRecFilter(cv::Mat &Lo_R, cv::Mat &Hi_R, const string wname);


// 功能:函数 idwt() 对输入的小波分解系数进行逆离散小波变换,重构出信号序列dst
// 输入:   
//          cA: 平均部分的小波分解系数;
//          cD: 细节部分的小波分解系数
//          LF:  重构用的低通滤波器 
//          HF: 重构用的高通滤波器
// 输出:  
//          dst: 重构序列
// 返回值:
//         运算有效返回true,否则返回false
bool idwt(cv::Mat &dst, const cv::Mat &cA, const cv::Mat &cD, const cv::Mat &LF, const cv::Mat &HF);


// 功能:函数 idwt2() 对输入的子矩阵序列进行逆小波变换, 得到重构矩阵outcA
// 输入:    
//	        rcA,rcV,rcH,rcD : 同级低频、高频系数矩阵
//                Lo_R,Hi_R :图像重构用到的低通、高通滤波器系数矩阵
//                     size : 本级小波分解系数矩阵的大小
// 输出:  
//          outcA: 重构矩阵
// 返回值:
//          运算有效返回true,否则返回false
bool idwt2(cv::Mat &outcA, 
	       const cv::Mat &rcA, const cv::Mat &rcV, const cv::Mat &rcH, const cv::Mat &rcD, 
	       const cv::Mat &Lo_R, const cv::Mat &Hi_R, 
	       cv::Vec2i size);