You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1229 lines
32 KiB
C++

2 years ago
#include "stdafx.h"
#include "waveReconstruct.h"
// <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD> idwt() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ֽ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢС<C9A2><D0A1><EFBFBD><EFBFBD><E4BBBB><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>dst
bool idwt(cv::Mat &dst, const cv::Mat &cA, const cv::Mat &cD, const cv::Mat &LF, const cv::Mat &HF)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>жϣ<D0B6>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (cA.empty() == true || (cA.type() != CV_64FC1))
{
return false;
}
if (cD.empty() == true || (cD.type() != CV_64FC1))
{
return false;
}
if (cA.size != cD.size || cA.type() != cD.type() || cA.rows != 1)
{
return false;
}
// <20>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ж<EFBFBD>
if (LF.empty() == true || LF.type() != CV_64FC1
|| HF.empty() == true || HF.type() != CV_64FC1
|| LF.size != HF.size || LF.rows != 1)
{
return false;
}
// (1)<29><>Ƶ
// (1.1) <20>ϲ<EFBFBD><CFB2><EFBFBD> + <20><>ֵ
cv::Mat upl = cv::Mat(1, 2 * cA.cols + 1, cA.type());
upl = cv::Scalar(0.0, 0.0, 0.0);
for (int i = 0; i < cA.cols; i++)
{
upl.at<double>(0, 2 * i + 1) = cA.at<double>(0, i);
}
// (1.2) <20><><EFBFBD><EFBFBD>
cv::Mat cvl = cv::Mat(1, upl.cols + LF.cols - 1, cA.type());
cvl = cv::Scalar(0.0, 0.0, 0.0);
// <20><><EFBFBD>ۣ<EFBFBD><DBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źž<C5BA><C5BE><EFBFBD><EFBFBD><EFBFBD>ʽ
for (int i = 0; i < cvl.cols; i++)
{
for (int j = 0; j < LF.cols; j++)
{
if ((i - j) >= 0 && (i - j) < upl.cols)
{
cvl.at<double>(0, i) += LF.at<double>(0,j) * upl.at<double>(0, i - j);
}
}
}
// (2) <20><>Ƶ
// (2.1) <20>ϲ<EFBFBD><CFB2><EFBFBD>+<2B><>ֵ
cv::Mat uph = cv::Mat(1, 2 * cD.cols + 1, cA.type());
uph = cv::Scalar(0.0, 0.0, 0.0);
for (int i = 0; i < cD.cols; i++)
{
uph.at<double>(0, 2 * i + 1) = cD.at<double>(0, i);
}
// (2.2) <20><><EFBFBD><EFBFBD>
cv::Mat cvh = cv::Mat(1, uph.cols + HF.cols - 1, cD.type());
cvh = cv::Scalar(0.0, 0.0, 0.0);
for (int i = 0; i < cvh.cols; i++)
{
for (int j = 0; j < HF.cols; j++)
{
if ((i - j) >= 0 && (i - j) < uph.cols)
{
cvh.at<double>(0, i) += HF.at<double>(0,j) * uph.at<double>(0, i - j);
}
}
}
// <20><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
dst = cvl + cvh;
return true;
}
// <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD> idwt2() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><E4BBBB> <20>õ<EFBFBD><C3B5>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>outcA
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)
{
// <20><>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (rcA.empty() == true
|| (rcA.type() != CV_64FC1))
{
return false;
}
if (rcV.empty() == true
|| (rcV.type() != CV_64FC1))
{
return false;
}
if (rcH.empty() == true
|| (rcH.type() != CV_64FC1))
{
return false;
}
if (rcD.empty() == true
|| (rcD.type() != CV_64FC1))
{
return false;
}
// <20><>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (rcA.type() != rcV.type() || rcA.type() != rcH.type() || rcA.type() != rcD.type()
|| rcV.type() != rcH.type() || rcV.type() != rcD.type()
|| rcH.type() != rcD.type())
{
return false;
}
// <20><>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (rcA.size() != rcV.size() || rcA.size() != rcH.size() || rcA.size() != rcD.size()
|| rcV.size() != rcH.size() || rcV.size() != rcD.size()
|| rcH.size() != rcD.size())
{
return false;
}
// <20>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><CDA1>ߴ<EFBFBD><DFB4>ж<EFBFBD>
if (Lo_R.empty() == true || Lo_R.type() != CV_64FC1)
{
return false;
}
if (Hi_R.empty() == true || Hi_R.type() != CV_64FC1)
{
return false;
}
if (Lo_R.size() != Hi_R.size())
{
return false;
}
// <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ֽ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
if (size[0] <= 0 || size[1] <= 0)
{
return false;
}
// <20><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>Ƚ<EFBFBD><C8BD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>кϳ<D0BA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cv::Mat tmp_mat = cv::Mat(2 * rcA.rows, 2 * rcA.cols, rcA.type());
tmp_mat = cv::Scalar(0.0, 0.0, 0.0);
rcA.copyTo(tmp_mat(cv::Range(0, rcA.rows), cv::Range(0, rcA.cols)));
rcV.copyTo(tmp_mat(cv::Range(0, rcA.rows), cv::Range(rcA.cols, 2 * rcA.cols)));
rcH.copyTo(tmp_mat(cv::Range(rcA.rows, 2 * rcA.rows), cv::Range(0, rcA.cols)));
rcD.copyTo(tmp_mat(cv::Range(rcA.rows, 2 * rcA.rows), cv::Range(rcA.cols, 2 * rcA.cols)));
// <20><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD>, <20><EFBFBD><E4BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD>Ϊ<EFBFBD><CEAA>size[0]
cv::Mat tmp_mat_cR = cv::Mat(size[0], 2 * rcA.cols, rcA.type());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < tmp_mat.cols; i++)
{
cv::Mat ca1 = tmp_mat(cv::Range(0, rcA.rows), cv::Range(i, i + 1)); // <20><>i<EFBFBD><69><EFBFBD>ϰ벿<CFB0><EBB2BF>
cv::Mat cd1 = tmp_mat(cv::Range(rcA.rows, rcA.rows * 2), cv::Range(i, i + 1)); // <20><>i<EFBFBD><69><EFBFBD>°벿<C2B0><EBB2BF>
// תΪ<D7AA><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cv::transpose(ca1, ca1);
cv::transpose(cd1, cd1);
// һάС<CEAC><D0A1><EFBFBD><EFBFBD><EFBFBD>
cv::Mat tmp1;
bool ret = idwt(tmp1, // <20><><EFBFBD><EFBFBD>
ca1, cd1, Lo_R, Hi_R);// <20><><EFBFBD><EFBFBD>
if (ret == false)
{
return false;
}
else
{
cv::transpose(tmp1, tmp1); // ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ȡ<>м䲿<D0BC><E4B2BF>
int begin = (tmp1.rows - size[0]) / 2;
int end = begin + size[0];
// <20>ж<EFBFBD>begin end Խ<><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (begin >= 0 && end <= tmp1.rows)
{
tmp1 = tmp1(cv::Range(begin, end), cv::Range(0, 1));
tmp1.copyTo(tmp_mat_cR(cv::Range(0, size[0]), cv::Range(i, i + 1)));
}
else
{
return false;
}
}
}
// <20><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD>Ϊ<EFBFBD><CEAA>size[1]
cv::Mat tmp_mat_cR_rR = cv::Mat(size[0], size[1], rcA.type());
for (int i = 0; i < size[0]; i++)
{
cv::Mat ca2 = tmp_mat_cR(cv::Range(i, i + 1), cv::Range(0, rcA.cols));
cv::Mat cd2 = tmp_mat_cR(cv::Range(i, i + 1), cv::Range(rcA.cols, rcA.cols * 2));
// һάС<CEAC><D0A1><EFBFBD><EFBFBD><EFBFBD>
cv::Mat tmp2;
bool ret = idwt(tmp2, // <20><><EFBFBD><EFBFBD>
ca2, cd2, Lo_R, Hi_R); // <20><><EFBFBD><EFBFBD>
if (ret == false)
{
return false;
}
else
{
int begin = (tmp2.cols - size[1]) / 2;
int end = begin + size[1];
if (begin >= 0 && end <= tmp2.cols)
{
// ȡ<>м䲿<D0BC><E4B2BF>
tmp2 = tmp2(cv::Range(0, 1), cv::Range(begin, end));
tmp2.copyTo(tmp_mat_cR_rR(cv::Range(i, i + 1), cv::Range(0, size[1])));
}
else
{
return false;
}
}
}
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
tmp_mat_cR_rR.copyTo(outcA);
return true;
}
// <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD> getWaveRecFilter() <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wname<6D><65><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ع<EFBFBD><D8B9>˲<EFBFBD><CBB2><EFBFBD>
bool getWaveRecFilter(cv::Mat &Lo_R, cv::Mat &Hi_R, const string wname)
{
if (wname == "")
{
return false;
}
// haarС<72><D0A1>
if (wname == "haar")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 2, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.7071;
Lo_R.at<double>(0, 1) = 0.7071;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 2, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.7071;
Hi_R.at<double>(0, 1) = -0.7071;
}
else if (wname == "sym1")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 2, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.7071;
Lo_R.at<double>(0, 1) = 0.7071;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 2, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.7071;
Hi_R.at<double>(0, 1) = -0.7071;
}
else if (wname == "sym2")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 4, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.4830 ;
Lo_R.at<double>(0, 1) = 0.8365 ;
Lo_R.at<double>(0, 2) = 0.2241 ;
Lo_R.at<double>(0, 3) = -0.1294;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 4, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.1294;
Hi_R.at<double>(0, 1) = -0.2241;
Hi_R.at<double>(0, 2) = 0.8365 ;
Hi_R.at<double>(0, 3) = -0.4830;
}
else if (wname == "sym3")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 6, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.3327 ;
Lo_R.at<double>(0, 1) = 0.8069 ;
Lo_R.at<double>(0, 2) = 0.4599 ;
Lo_R.at<double>(0, 3) = -0.1350;
Lo_R.at<double>(0, 4) = -0.0854;
Lo_R.at<double>(0, 5) = 0.0352;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 6, CV_64FC1) ;
Hi_R.at<double>(0, 0) = 0.0352 ;
Hi_R.at<double>(0, 1) = 0.0854 ;
Hi_R.at<double>(0, 2) = -0.1350;
Hi_R.at<double>(0, 3) = -0.4599;
Hi_R.at<double>(0, 4) = 0.8069 ;
Hi_R.at<double>(0, 5) = -0.3327;
}
else if (wname == "sym4")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 8, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0322 ;
Lo_R.at<double>(0, 1) = -0.0126;
Lo_R.at<double>(0, 2) = -0.0992;
Lo_R.at<double>(0, 3) = 0.2979 ;
Lo_R.at<double>(0, 4) = 0.8037 ;
Lo_R.at<double>(0, 5) = 0.4976 ;
Lo_R.at<double>(0, 6) = -0.0296;
Lo_R.at<double>(0, 7) = -0.0758;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 8, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0758;
Hi_R.at<double>(0, 1) = 0.0296 ;
Hi_R.at<double>(0, 2) = 0.4976 ;
Hi_R.at<double>(0, 3) = -0.8037;
Hi_R.at<double>(0, 4) = 0.2979 ;
Hi_R.at<double>(0, 5) = 0.0992 ;
Hi_R.at<double>(0, 6) = -0.0126;
Hi_R.at<double>(0, 7) = -0.0322;
}
else if (wname == "sym5")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 10, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0195 ;
Lo_R.at<double>(0, 1) = -0.0211;
Lo_R.at<double>(0, 2) = -0.1753;
Lo_R.at<double>(0, 3) = 0.0166 ;
Lo_R.at<double>(0, 4) = 0.6340 ;
Lo_R.at<double>(0, 5) = 0.7234 ;
Lo_R.at<double>(0, 6) = 0.1994 ;
Lo_R.at<double>(0, 7) = -0.0391;
Lo_R.at<double>(0, 8) = 0.0295 ;
Lo_R.at<double>(0, 9) = 0.0273;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 10, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.0273 ;
Hi_R.at<double>(0, 1) = -0.0295;
Hi_R.at<double>(0, 2) = -0.0391;
Hi_R.at<double>(0, 3) = -0.1994;
Hi_R.at<double>(0, 4) = 0.7234 ;
Hi_R.at<double>(0, 5) = -0.6340;
Hi_R.at<double>(0, 6) = 0.0166 ;
Hi_R.at<double>(0, 7) = 0.1753 ;
Hi_R.at<double>(0, 8) = -0.0211;
Hi_R.at<double>(0, 9) = -0.0195;
}
else if (wname == "sym6")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 12, CV_64FC1);
Lo_R.at<double>(0, 0) = -0.0078;
Lo_R.at<double>(0, 1) = 0.0018 ;
Lo_R.at<double>(0, 2) = 0.0447 ;
Lo_R.at<double>(0, 3) = -0.0211;
Lo_R.at<double>(0, 4) = -0.0726;
Lo_R.at<double>(0, 5) = 0.3379 ;
Lo_R.at<double>(0, 6) = 0.7876 ;
Lo_R.at<double>(0, 7) = 0.4911 ;
Lo_R.at<double>(0, 8) = -0.0483;
Lo_R.at<double>(0, 9) = -0.1180;
Lo_R.at<double>(0, 10) = 0.0035;
Lo_R.at<double>(0, 11) = 0.0154;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 12, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.0154;
Hi_R.at<double>(0, 1) = -0.0035;
Hi_R.at<double>(0, 2) = -0.1180;
Hi_R.at<double>(0, 3) = 0.0483 ;
Hi_R.at<double>(0, 4) = 0.4911 ;
Hi_R.at<double>(0, 5) = -0.7876;
Hi_R.at<double>(0, 6) = 0.3379 ;
Hi_R.at<double>(0, 7) = 0.0726 ;
Hi_R.at<double>(0, 8) = -0.0211;
Hi_R.at<double>(0, 9) = -0.0447;
Hi_R.at<double>(0, 10) = 0.0018;
Hi_R.at<double>(0, 11) = 0.0078;
}
else if (wname == "sym7")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 14, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0103 ;
Lo_R.at<double>(0, 1) = 0.0040 ;
Lo_R.at<double>(0, 2) = -0.1078;
Lo_R.at<double>(0, 3) = -0.1400;
Lo_R.at<double>(0, 4) = 0.2886 ;
Lo_R.at<double>(0, 5) = 0.7678 ;
Lo_R.at<double>(0, 6) = 0.5361 ;
Lo_R.at<double>(0, 7) = 0.0174 ;
Lo_R.at<double>(0, 8) = -0.0496;
Lo_R.at<double>(0, 9) = 0.0679;
Lo_R.at<double>(0, 10) = 0.0305 ;
Lo_R.at<double>(0, 11) = -0.0126;
Lo_R.at<double>(0, 12) = -0.0010;
Lo_R.at<double>(0, 13) = 0.0027;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 14, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.0027 ;
Hi_R.at<double>(0, 1) = 0.0010 ;
Hi_R.at<double>(0, 2) = -0.0126;
Hi_R.at<double>(0, 3) = -0.0305;
Hi_R.at<double>(0, 4) = 0.0679 ;
Hi_R.at<double>(0, 5) = 0.0496 ;
Hi_R.at<double>(0, 6) = 0.0174 ;
Hi_R.at<double>(0, 7) = -0.5361;
Hi_R.at<double>(0, 8) = 0.7678 ;
Hi_R.at<double>(0, 9) = -0.2886;
Hi_R.at<double>(0, 10) = -0.1400;
Hi_R.at<double>(0, 11) = 0.1078 ;
Hi_R.at<double>(0, 12) = 0.0040 ;
Hi_R.at<double>(0, 13) = -0.0103;
}
else if (wname == "sym8")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 16, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0019;
Lo_R.at<double>(0, 1) = -0.0003;
Lo_R.at<double>(0, 2) = -0.0150;
Lo_R.at<double>(0, 3) = 0.0038 ;
Lo_R.at<double>(0, 4) = 0.0491 ;
Lo_R.at<double>(0, 5) = -0.0272;
Lo_R.at<double>(0, 6) = -0.0519;
Lo_R.at<double>(0, 7) = 0.3644 ;
Lo_R.at<double>(0, 8) = 0.7772 ;
Lo_R.at<double>(0, 9) = 0.4814;
Lo_R.at<double>(0, 10) = -0.0613;
Lo_R.at<double>(0, 11) = -0.1433;
Lo_R.at<double>(0, 12) = 0.0076 ;
Lo_R.at<double>(0, 13) = 0.0317 ;
Lo_R.at<double>(0, 14) = -0.0005;
Lo_R.at<double>(0, 15) = -0.0034;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 16, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0034;
Hi_R.at<double>(0, 1) = 0.0005 ;
Hi_R.at<double>(0, 2) = 0.0317 ;
Hi_R.at<double>(0, 3) = -0.0076;
Hi_R.at<double>(0, 4) = -0.1433;
Hi_R.at<double>(0, 5) = 0.0613 ;
Hi_R.at<double>(0, 6) = 0.4814 ;
Hi_R.at<double>(0, 7) = -0.7772;
Hi_R.at<double>(0, 8) = 0.3644 ;
Hi_R.at<double>(0, 9) = 0.0519;
Hi_R.at<double>(0, 10) = -0.0272;
Hi_R.at<double>(0, 11) = -0.0491;
Hi_R.at<double>(0, 12) = 0.0038 ;
Hi_R.at<double>(0, 13) = 0.0150 ;
Hi_R.at<double>(0, 14) = -0.0003;
Hi_R.at<double>(0, 15) = -0.0019;
}
else if (wname == "sym9")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 18, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0011 ;
Lo_R.at<double>(0, 1) = -0.0005;
Lo_R.at<double>(0, 2) = -0.0103;
Lo_R.at<double>(0, 3) = 0.0089 ;
Lo_R.at<double>(0, 4) = 0.0621 ;
Lo_R.at<double>(0, 5) = -0.0182;
Lo_R.at<double>(0, 6) = -0.1916;
Lo_R.at<double>(0, 7) = 0.0353 ;
Lo_R.at<double>(0, 8) = 0.6173 ;
Lo_R.at<double>(0, 9) = 0.7179;
Lo_R.at<double>(0, 10) = 0.2388 ;
Lo_R.at<double>(0, 11) = -0.0546;
Lo_R.at<double>(0, 12) = 0.0006 ;
Lo_R.at<double>(0, 13) = 0.0302 ;
Lo_R.at<double>(0, 14) = -0.0115;
Lo_R.at<double>(0, 15) = -0.0133;
Lo_R.at<double>(0, 16) = 0.0006 ;
Lo_R.at<double>(0, 17) = 0.0014;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 18, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.0014 ;
Hi_R.at<double>(0, 1) = -0.0006;
Hi_R.at<double>(0, 2) = -0.0133;
Hi_R.at<double>(0, 3) = 0.0115 ;
Hi_R.at<double>(0, 4) = 0.0302 ;
Hi_R.at<double>(0, 5) = -0.0006;
Hi_R.at<double>(0, 6) = -0.0546;
Hi_R.at<double>(0, 7) = -0.2388;
Hi_R.at<double>(0, 8) = 0.7179 ;
Hi_R.at<double>(0, 9) = -0.6173;
Hi_R.at<double>(0, 10) = 0.0353 ;
Hi_R.at<double>(0, 11) = 0.1916 ;
Hi_R.at<double>(0, 12) = -0.0182;
Hi_R.at<double>(0, 13) = -0.0621;
Hi_R.at<double>(0, 14) = 0.0089 ;
Hi_R.at<double>(0, 15) = 0.0103 ;
Hi_R.at<double>(0, 16) = -0.0005;
Hi_R.at<double>(0, 17) = -0.0011;
}
else if (wname == "sym10")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 20, CV_64FC1);
Lo_R.at<double>(0, 0) = -0.0005;
Lo_R.at<double>(0, 1) = 0.0001 ;
Lo_R.at<double>(0, 2) = 0.0046 ;
Lo_R.at<double>(0, 3) = -0.0008;
Lo_R.at<double>(0, 4) = -0.0204;
Lo_R.at<double>(0, 5) = 0.0058 ;
Lo_R.at<double>(0, 6) = 0.0500 ;
Lo_R.at<double>(0, 7) = -0.0320;
Lo_R.at<double>(0, 8) = -0.0355;
Lo_R.at<double>(0, 9) = 0.3838;
Lo_R.at<double>(0, 10) = 0.7695 ;
Lo_R.at<double>(0, 11) = 0.4717 ;
Lo_R.at<double>(0, 12) = -0.0709;
Lo_R.at<double>(0, 13) = -0.1595;
Lo_R.at<double>(0, 14) = 0.0116 ;
Lo_R.at<double>(0, 15) = 0.0459 ;
Lo_R.at<double>(0, 16) = -0.0015;
Lo_R.at<double>(0, 17) = -0.0086;
Lo_R.at<double>(0, 18) = 0.0001 ;
Lo_R.at<double>(0, 19) = 0.0008;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 20, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.0008 ;
Hi_R.at<double>(0, 1) = -0.0001;
Hi_R.at<double>(0, 2) = -0.0086;
Hi_R.at<double>(0, 3) = 0.0015 ;
Hi_R.at<double>(0, 4) = 0.0459 ;
Hi_R.at<double>(0, 5) = -0.0116;
Hi_R.at<double>(0, 6) = -0.1595;
Hi_R.at<double>(0, 7) = 0.0709 ;
Hi_R.at<double>(0, 8) = 0.4717 ;
Hi_R.at<double>(0, 9) = -0.7695;
Hi_R.at<double>(0, 10) = 0.3838 ;
Hi_R.at<double>(0, 11) = 0.0355 ;
Hi_R.at<double>(0, 12) = -0.0320;
Hi_R.at<double>(0, 13) = -0.0500;
Hi_R.at<double>(0, 14) = 0.0058 ;
Hi_R.at<double>(0, 15) = 0.0204 ;
Hi_R.at<double>(0, 16) = -0.0008;
Hi_R.at<double>(0, 17) = -0.0046;
Hi_R.at<double>(0, 18) = 0.0001 ;
Hi_R.at<double>(0, 19) = 0.0005;
}
else if (wname == "db1")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 2, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.7071;
Lo_R.at<double>(0, 1) = 0.7071;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 2, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.7071;
Hi_R.at<double>(0, 1) = -0.7071;
}
else if (wname == "db2")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 4, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.4830 ;
Lo_R.at<double>(0, 1) = 0.8365 ;
Lo_R.at<double>(0, 2) = 0.2241 ;
Lo_R.at<double>(0, 3) = -0.1294;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 4, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.1294;
Hi_R.at<double>(0, 1) = -0.2241;
Hi_R.at<double>(0, 2) = 0.8365 ;
Hi_R.at<double>(0, 3) = -0.4830;
}
else if (wname == "db3")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 6, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.3327 ;
Lo_R.at<double>(0, 1) = 0.8069 ;
Lo_R.at<double>(0, 2) = 0.4599 ;
Lo_R.at<double>(0, 3) = -0.1350;
Lo_R.at<double>(0, 4) = -0.0854;
Lo_R.at<double>(0, 5) = 0.0352;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 6, CV_64FC1) ;
Hi_R.at<double>(0, 0) = 0.0352 ;
Hi_R.at<double>(0, 1) = 0.0854 ;
Hi_R.at<double>(0, 2) = -0.1350;
Hi_R.at<double>(0, 3) = -0.4599;
Hi_R.at<double>(0, 4) = 0.8069 ;
Hi_R.at<double>(0, 5) = -0.3327;
}
else if (wname == "db4")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 8, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.2304 ;
Lo_R.at<double>(0, 1) = 0.7148 ;
Lo_R.at<double>(0, 2) = 0.6309 ;
Lo_R.at<double>(0, 3) = -0.0280;
Lo_R.at<double>(0, 4) = -0.1870;
Lo_R.at<double>(0, 5) = 0.0308 ;
Lo_R.at<double>(0, 6) = 0.0329 ;
Lo_R.at<double>(0, 7) = -0.0106;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 8, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0106;
Hi_R.at<double>(0, 1) = -0.0329;
Hi_R.at<double>(0, 2) = 0.0308 ;
Hi_R.at<double>(0, 3) = 0.1870 ;
Hi_R.at<double>(0, 4) = -0.0280;
Hi_R.at<double>(0, 5) = -0.6309;
Hi_R.at<double>(0, 6) = 0.7148 ;
Hi_R.at<double>(0, 7) = -0.2304;
}
else if (wname == "db5")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 10, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.1601 ;
Lo_R.at<double>(0, 1) = 0.6038 ;
Lo_R.at<double>(0, 2) = 0.7243 ;
Lo_R.at<double>(0, 3) = 0.1384 ;
Lo_R.at<double>(0, 4) = -0.2423;
Lo_R.at<double>(0, 5) = -0.0322;
Lo_R.at<double>(0, 6) = 0.0776 ;
Lo_R.at<double>(0, 7) = -0.0062;
Lo_R.at<double>(0, 8) = -0.0126;
Lo_R.at<double>(0, 9) = 0.0033;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 10, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.0033 ;
Hi_R.at<double>(0, 1) = 0.0126 ;
Hi_R.at<double>(0, 2) = -0.0062;
Hi_R.at<double>(0, 3) = -0.0776;
Hi_R.at<double>(0, 4) = -0.0322;
Hi_R.at<double>(0, 5) = 0.2423 ;
Hi_R.at<double>(0, 6) = 0.1384 ;
Hi_R.at<double>(0, 7) = -0.7243;
Hi_R.at<double>(0, 8) = 0.6038 ;
Hi_R.at<double>(0, 9) = -0.1601;
}
else if (wname == "db6")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 12, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.1115 ;
Lo_R.at<double>(0, 1) = 0.4946 ;
Lo_R.at<double>(0, 2) = 0.7511 ;
Lo_R.at<double>(0, 3) = 0.3153 ;
Lo_R.at<double>(0, 4) = -0.2263;
Lo_R.at<double>(0, 5) = -0.1298;
Lo_R.at<double>(0, 6) = 0.0975 ;
Lo_R.at<double>(0, 7) = 0.0275 ;
Lo_R.at<double>(0, 8) = -0.0316;
Lo_R.at<double>(0, 9) = 0.0006;
Lo_R.at<double>(0, 10) = 0.0048 ;
Lo_R.at<double>(0, 11) = -0.0011;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 12, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0011;
Hi_R.at<double>(0, 1) = -0.0048;
Hi_R.at<double>(0, 2) = 0.0006 ;
Hi_R.at<double>(0, 3) = 0.0316 ;
Hi_R.at<double>(0, 4) = 0.0275 ;
Hi_R.at<double>(0, 5) = -0.0975;
Hi_R.at<double>(0, 6) = -0.1298;
Hi_R.at<double>(0, 7) = 0.2263 ;
Hi_R.at<double>(0, 8) = 0.3153 ;
Hi_R.at<double>(0, 9) = -0.7511;
Hi_R.at<double>(0, 10) = 0.4946 ;
Hi_R.at<double>(0, 11) = -0.1115;
}
else if (wname == "db7")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 14, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0779 ;
Lo_R.at<double>(0, 1) = 0.3965 ;
Lo_R.at<double>(0, 2) = 0.7291 ;
Lo_R.at<double>(0, 3) = 0.4698 ;
Lo_R.at<double>(0, 4) = -0.1439;
Lo_R.at<double>(0, 5) = -0.2240;
Lo_R.at<double>(0, 6) = 0.0713 ;
Lo_R.at<double>(0, 7) = 0.0806 ;
Lo_R.at<double>(0, 8) = -0.0380;
Lo_R.at<double>(0, 9) = -0.0166;
Lo_R.at<double>(0, 10) = 0.0126 ;
Lo_R.at<double>(0, 11) = 0.0004 ;
Lo_R.at<double>(0, 12) = -0.0018;
Lo_R.at<double>(0, 13) = 0.0004;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 14, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.0004 ;
Hi_R.at<double>(0, 1) = 0.0018 ;
Hi_R.at<double>(0, 2) = 0.0004 ;
Hi_R.at<double>(0, 3) = -0.0126;
Hi_R.at<double>(0, 4) = -0.0166;
Hi_R.at<double>(0, 5) = 0.0380 ;
Hi_R.at<double>(0, 6) = 0.0806 ;
Hi_R.at<double>(0, 7) = -0.0713;
Hi_R.at<double>(0, 8) = -0.2240;
Hi_R.at<double>(0, 9) = 0.1439;
Hi_R.at<double>(0, 10) = 0.4698 ;
Hi_R.at<double>(0, 11) = -0.7291;
Hi_R.at<double>(0, 12) = 0.3965 ;
Hi_R.at<double>(0, 13) = -0.0779;
}
else if (wname == "db8")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 16, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0544 ;
Lo_R.at<double>(0, 1) = 0.3129;
Lo_R.at<double>(0, 2) = 0.6756 ;
Lo_R.at<double>(0, 3) = 0.5854;
Lo_R.at<double>(0, 4) = -0.0158;
Lo_R.at<double>(0, 5) = -0.2840;
Lo_R.at<double>(0, 6) = 0.0005 ;
Lo_R.at<double>(0, 7) = 0.1287 ;
Lo_R.at<double>(0, 8) = -0.0174;
Lo_R.at<double>(0, 9) = -0.0441;
Lo_R.at<double>(0, 10) = 0.0140 ;
Lo_R.at<double>(0, 11) = 0.0087 ;
Lo_R.at<double>(0, 12) = -0.0049;
Lo_R.at<double>(0, 13) = -0.0004;
Lo_R.at<double>(0, 14) = 0.0007 ;
Lo_R.at<double>(0, 15) = -0.0001;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 16, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0001;
Hi_R.at<double>(0, 1) = -0.0007;
Hi_R.at<double>(0, 2) = -0.0004;
Hi_R.at<double>(0, 3) = 0.0049 ;
Hi_R.at<double>(0, 4) = 0.0087 ;
Hi_R.at<double>(0, 5) = -0.0140;
Hi_R.at<double>(0, 6) = -0.0441;
Hi_R.at<double>(0, 7) = 0.0174 ;
Hi_R.at<double>(0, 8) = 0.1287 ;
Hi_R.at<double>(0, 9) = -0.0005;
Hi_R.at<double>(0, 10) = -0.2840;
Hi_R.at<double>(0, 11) = 0.0158 ;
Hi_R.at<double>(0, 12) = 0.5854 ;
Hi_R.at<double>(0, 13) = -0.6756;
Hi_R.at<double>(0, 14) = 0.3129 ;
Hi_R.at<double>(0, 15) = -0.0544;
}
else if (wname == "db9")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 18, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0381 ;
Lo_R.at<double>(0, 1) = 0.2438 ;
Lo_R.at<double>(0, 2) = 0.6048 ;
Lo_R.at<double>(0, 3) = 0.6573 ;
Lo_R.at<double>(0, 4) = 0.1332 ;
Lo_R.at<double>(0, 5) = -0.2933;
Lo_R.at<double>(0, 6) = -0.0968;
Lo_R.at<double>(0, 7) = 0.1485 ;
Lo_R.at<double>(0, 8) = 0.0307 ;
Lo_R.at<double>(0, 9) = -0.0676;
Lo_R.at<double>(0, 10) = 0.0003 ;
Lo_R.at<double>(0, 11) = 0.0224 ;
Lo_R.at<double>(0, 12) = -0.0047;
Lo_R.at<double>(0, 13) = -0.0043;
Lo_R.at<double>(0, 14) = 0.0018 ;
Lo_R.at<double>(0, 15) = 0.0002 ;
Lo_R.at<double>(0, 16) = -0.0003;
Lo_R.at<double>(0, 17) = 0.0000 ;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 18, CV_64FC1);
Hi_R.at<double>(0, 0) = 0.0000 ;
Hi_R.at<double>(0, 1) = 0.0003 ;
Hi_R.at<double>(0, 2) = 0.0002 ;
Hi_R.at<double>(0, 3) = -0.0018;
Hi_R.at<double>(0, 4) = -0.0043;
Hi_R.at<double>(0, 5) = 0.0047 ;
Hi_R.at<double>(0, 6) = 0.0224 ;
Hi_R.at<double>(0, 7) = -0.0003;
Hi_R.at<double>(0, 8) = -0.0676;
Hi_R.at<double>(0, 9) = -0.0307;
Hi_R.at<double>(0, 10) = 0.1485 ;
Hi_R.at<double>(0, 11) = 0.0968 ;
Hi_R.at<double>(0, 12) = -0.2933;
Hi_R.at<double>(0, 13) = -0.1332;
Hi_R.at<double>(0, 14) = 0.6573 ;
Hi_R.at<double>(0, 15) = -0.6048;
Hi_R.at<double>(0, 16) = 0.2438 ;
Hi_R.at<double>(0, 17) = -0.0381;
}
else if (wname == "db10")
{
// <20><><EFBFBD><EFBFBD>Lo_D
Lo_R = cv::Mat(1, 20, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0267 ;
Lo_R.at<double>(0, 1) = 0.1882 ;
Lo_R.at<double>(0, 2) = 0.5272 ;
Lo_R.at<double>(0, 3) = 0.6885 ;
Lo_R.at<double>(0, 4) = 0.2812 ;
Lo_R.at<double>(0, 5) = -0.2498;
Lo_R.at<double>(0, 6) = -0.1959;
Lo_R.at<double>(0, 7) = 0.1274 ;
Lo_R.at<double>(0, 8) = 0.0931 ;
Lo_R.at<double>(0, 9) = -0.0714;
Lo_R.at<double>(0, 10) = -0.0295;
Lo_R.at<double>(0, 11) = 0.0332 ;
Lo_R.at<double>(0, 12) = 0.0036 ;
Lo_R.at<double>(0, 13) = -0.0107;
Lo_R.at<double>(0, 14) = 0.0014 ;
Lo_R.at<double>(0, 15) = 0.0020 ;
Lo_R.at<double>(0, 16) = -0.0007;
Lo_R.at<double>(0, 17) = -0.0001;
Lo_R.at<double>(0, 18) = 0.0001 ;
Lo_R.at<double>(0, 19) = -0.0000;
// <20><><EFBFBD><EFBFBD>Hi_D
Hi_R = cv::Mat(1, 20, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0000;
Hi_R.at<double>(0, 1) = -0.0001;
Hi_R.at<double>(0, 2) = -0.0001;
Hi_R.at<double>(0, 3) = 0.0007 ;
Hi_R.at<double>(0, 4) = 0.0020 ;
Hi_R.at<double>(0, 5) = -0.0014;
Hi_R.at<double>(0, 6) = -0.0107;
Hi_R.at<double>(0, 7) = -0.0036;
Hi_R.at<double>(0, 8) = 0.0332 ;
Hi_R.at<double>(0, 9) = 0.0295;
Hi_R.at<double>(0, 10) = -0.0714;
Hi_R.at<double>(0, 11) = -0.0931;
Hi_R.at<double>(0, 12) = 0.1274 ;
Hi_R.at<double>(0, 13) = 0.1959 ;
Hi_R.at<double>(0, 14) = -0.2498;
Hi_R.at<double>(0, 15) = -0.2812;
Hi_R.at<double>(0, 16) = 0.6885 ;
Hi_R.at<double>(0, 17) = -0.5272;
Hi_R.at<double>(0, 18) = 0.1882 ;
Hi_R.at<double>(0, 19) = -0.0267;
}
// coifletС<74><D0A1>
else if (wname == "coif1")
{
// <20><><EFBFBD><EFBFBD>Lo_R
Lo_R = cv::Mat(1, 6, CV_64FC1);
Lo_R.at<double>(0, 0) = -0.0727;
Lo_R.at<double>(0, 1) = 0.3379 ;
Lo_R.at<double>(0, 2) = 0.8526 ;
Lo_R.at<double>(0, 3) = 0.3849 ;
Lo_R.at<double>(0, 4) = -0.0727;
Lo_R.at<double>(0, 5) = -0.0157;
// <20><><EFBFBD><EFBFBD>Hi_R
Hi_R = cv::Mat(1, 6, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0157 ;
Hi_R.at<double>(0, 1) = 0.0727;
Hi_R.at<double>(0, 2) = 0.3849 ;
Hi_R.at<double>(0, 3) = -0.8526 ;
Hi_R.at<double>(0, 4) = 0.3379;
Hi_R.at<double>(0, 5) = 0.0727;
}
else if (wname == "coif2")
{
// <20><><EFBFBD><EFBFBD>Lo_R
Lo_R = cv::Mat(1, 12, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0164;
Lo_R.at<double>(0, 1) = -0.0415;
Lo_R.at<double>(0, 2) = -0.0674;
Lo_R.at<double>(0, 3) = 0.3861;
Lo_R.at<double>(0, 4) = 0.8127;
Lo_R.at<double>(0, 5) = 0.4170;
Lo_R.at<double>(0, 6) = -0.0765;
Lo_R.at<double>(0, 7) = -0.0594;
Lo_R.at<double>(0, 8) = 0.0237;
Lo_R.at<double>(0, 9) = 0.0056;
Lo_R.at<double>(0, 10) = -0.0018;
Lo_R.at<double>(0, 11) = -0.0007;
// <20><><EFBFBD><EFBFBD>Hi_R
Hi_R = cv::Mat(1, 12, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0007;
Hi_R.at<double>(0, 1) = 0.0018 ;
Hi_R.at<double>(0, 2) = 0.0056 ;
Hi_R.at<double>(0, 3) = -0.0237;
Hi_R.at<double>(0, 4) = -0.0594;
Hi_R.at<double>(0, 5) = 0.0765 ;
Hi_R.at<double>(0, 6) = 0.4170 ;
Hi_R.at<double>(0, 7) = -0.8127;
Hi_R.at<double>(0, 8) = 0.3861 ;
Hi_R.at<double>(0, 9) = 0.0674 ;
Hi_R.at<double>(0, 10) = -0.0415;
Hi_R.at<double>(0, 11) = -0.0164;
}
else if (wname == "coif3")
{
// <20><><EFBFBD><EFBFBD>Lo_R
Lo_R = cv::Mat(1, 18, CV_64FC1);
Lo_R.at<double>(0, 0) = -0.0038;
Lo_R.at<double>(0, 1) = 0.0078 ;
Lo_R.at<double>(0, 2) = 0.0235 ;
Lo_R.at<double>(0, 3) = -0.0658;
Lo_R.at<double>(0, 4) = -0.0611;
Lo_R.at<double>(0, 5) = 0.4052 ;
Lo_R.at<double>(0, 6) = 0.7938 ;
Lo_R.at<double>(0, 7) = 0.4285 ;
Lo_R.at<double>(0, 8) = -0.0718;
Lo_R.at<double>(0, 9) = -0.0823;
Lo_R.at<double>(0, 10) = 0.0346 ;
Lo_R.at<double>(0, 11) = 0.0159 ;
Lo_R.at<double>(0, 12) = -0.0090;
Lo_R.at<double>(0, 13) = -0.0026;
Lo_R.at<double>(0, 14) = 0.0011 ;
Lo_R.at<double>(0, 15) = 0.0005 ;
Lo_R.at<double>(0, 16) = -0.0001;
Lo_R.at<double>(0, 17) = -0.0000;
// <20><><EFBFBD><EFBFBD>Hi_R
Hi_R = cv::Mat(1, 18, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0000;
Hi_R.at<double>(0, 1) = 0.0001 ;
Hi_R.at<double>(0, 2) = 0.0005 ;
Hi_R.at<double>(0, 3) = -0.0011;
Hi_R.at<double>(0, 4) = -0.0026;
Hi_R.at<double>(0, 5) = 0.0090 ;
Hi_R.at<double>(0, 6) = 0.0159 ;
Hi_R.at<double>(0, 7) = -0.0346;
Hi_R.at<double>(0, 8) = -0.0823;
Hi_R.at<double>(0, 9) = 0.0718;
Hi_R.at<double>(0, 10) = 0.4285 ;
Hi_R.at<double>(0, 11) = -0.7938;
Hi_R.at<double>(0, 12) = 0.4052 ;
Hi_R.at<double>(0, 13) = 0.0611 ;
Hi_R.at<double>(0, 14) = -0.0658;
Hi_R.at<double>(0, 15) = -0.0235;
Hi_R.at<double>(0, 16) = 0.0078 ;
Hi_R.at<double>(0, 17) = 0.0038;
}
else if (wname == "coif4")
{
// <20><><EFBFBD><EFBFBD>Lo_R
Lo_R = cv::Mat(1, 24, CV_64FC1);
Lo_R.at<double>(0, 0) = 0.0009 ;
Lo_R.at<double>(0, 1) = -0.0016;
Lo_R.at<double>(0, 2) = -0.0073;
Lo_R.at<double>(0, 3) = 0.0161 ;
Lo_R.at<double>(0, 4) = 0.0267 ;
Lo_R.at<double>(0, 5) = -0.0813;
Lo_R.at<double>(0, 6) = -0.0561;
Lo_R.at<double>(0, 7) = 0.4153 ;
Lo_R.at<double>(0, 8) = 0.7822 ;
Lo_R.at<double>(0, 9) = 0.4344;
Lo_R.at<double>(0, 10) = -0.0666;
Lo_R.at<double>(0, 11) = -0.0962;
Lo_R.at<double>(0, 12) = 0.0393 ;
Lo_R.at<double>(0, 13) = 0.0251 ;
Lo_R.at<double>(0, 14) = -0.0152;
Lo_R.at<double>(0, 15) = -0.0057;
Lo_R.at<double>(0, 16) = 0.0038 ;
Lo_R.at<double>(0, 17) = 0.0013 ;
Lo_R.at<double>(0, 18) = -0.0006;
Lo_R.at<double>(0, 19) = -0.0003;
Lo_R.at<double>(0, 20) = 0.0001 ;
Lo_R.at<double>(0, 21) = 0.0000 ;
Lo_R.at<double>(0, 22) = -0.0000;
Lo_R.at<double>(0, 23) = -0.0000;
// <20><><EFBFBD><EFBFBD>Hi_R
Hi_R = cv::Mat(1, 24, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0000;
Hi_R.at<double>(0, 1) = 0.0000 ;
Hi_R.at<double>(0, 2) = 0.0000 ;
Hi_R.at<double>(0, 3) = -0.0001;
Hi_R.at<double>(0, 4) = -0.0003;
Hi_R.at<double>(0, 5) = 0.0006 ;
Hi_R.at<double>(0, 6) = 0.0013 ;
Hi_R.at<double>(0, 7) = -0.0038;
Hi_R.at<double>(0, 8) = -0.0057;
Hi_R.at<double>(0, 9) = 0.0152 ;
Hi_R.at<double>(0, 10) = 0.0251 ;
Hi_R.at<double>(0, 11) = -0.0393;
Hi_R.at<double>(0, 12) = -0.0962;
Hi_R.at<double>(0, 13) = 0.0666 ;
Hi_R.at<double>(0, 14) = 0.4344 ;
Hi_R.at<double>(0, 15) = -0.7822;
Hi_R.at<double>(0, 16) = 0.4153 ;
Hi_R.at<double>(0, 17) = 0.0561 ;
Hi_R.at<double>(0, 18) = -0.0813;
Hi_R.at<double>(0, 19) = -0.0267;
Hi_R.at<double>(0, 20) = 0.0161 ;
Hi_R.at<double>(0, 21) = 0.0073 ;
Hi_R.at<double>(0, 22) = -0.0016;
Hi_R.at<double>(0, 23) = -0.0009;
}
else if (wname == "coif5")
{
// <20><><EFBFBD><EFBFBD>Lo_R
Lo_R = cv::Mat(1, 30, CV_64FC1);
Lo_R.at<double>(0, 0) = -0.0002;
Lo_R.at<double>(0, 1) = 0.0004 ;
Lo_R.at<double>(0, 2) = 0.0022 ;
Lo_R.at<double>(0, 3) = -0.0042;
Lo_R.at<double>(0, 4) = -0.0101;
Lo_R.at<double>(0, 5) = 0.0234 ;
Lo_R.at<double>(0, 6) = 0.0282 ;
Lo_R.at<double>(0, 7) = -0.0919;
Lo_R.at<double>(0, 8) = -0.0520;
Lo_R.at<double>(0, 9) = 0.4216;
Lo_R.at<double>(0, 10) = 0.7743 ;
Lo_R.at<double>(0, 11) = 0.4380 ;
Lo_R.at<double>(0, 12) = -0.0620;
Lo_R.at<double>(0, 13) = -0.1056;
Lo_R.at<double>(0, 14) = 0.0413 ;
Lo_R.at<double>(0, 15) = 0.0327 ;
Lo_R.at<double>(0, 16) = -0.0198;
Lo_R.at<double>(0, 17) = -0.0092;
Lo_R.at<double>(0, 18) = 0.0068 ;
Lo_R.at<double>(0, 19) = 0.0024 ;
Lo_R.at<double>(0, 20) = -0.0017;
Lo_R.at<double>(0, 21) = -0.0006;
Lo_R.at<double>(0, 22) = 0.0003 ;
Lo_R.at<double>(0, 23) = 0.0001 ;
Lo_R.at<double>(0, 24) = -0.0000 ;
Lo_R.at<double>(0, 25) = -0.0000;
Lo_R.at<double>(0, 26) = 0.0000 ;
Lo_R.at<double>(0, 27) = 0.0000 ;
Lo_R.at<double>(0, 28) = -0.0000;
Lo_R.at<double>(0, 29) = -0.0000;
// <20><><EFBFBD><EFBFBD>Hi_R
Hi_R = cv::Mat(1, 30, CV_64FC1);
Hi_R.at<double>(0, 0) = -0.0000;
Hi_R.at<double>(0, 1) = 0.0000 ;
Hi_R.at<double>(0, 2) = 0.0000 ;
Hi_R.at<double>(0, 3) = -0.0000;
Hi_R.at<double>(0, 4) = -0.0000;
Hi_R.at<double>(0, 5) = 0.0000 ;
Hi_R.at<double>(0, 6) = 0.0001 ;
Hi_R.at<double>(0, 7) = -0.0003;
Hi_R.at<double>(0, 8) = -0.0006;
Hi_R.at<double>(0, 9) = 0.0017;
Hi_R.at<double>(0, 10) = 0.0024 ;
Hi_R.at<double>(0, 11) = -0.0068;
Hi_R.at<double>(0, 12) = -0.0092;
Hi_R.at<double>(0, 13) = 0.0198 ;
Hi_R.at<double>(0, 14) = 0.0327 ;
Hi_R.at<double>(0, 15) = -0.0413;
Hi_R.at<double>(0, 16) = -0.1056;
Hi_R.at<double>(0, 17) = 0.0620 ;
Hi_R.at<double>(0, 18) = 0.4380 ;
Hi_R.at<double>(0, 19) = -0.7743;
Hi_R.at<double>(0, 20) = 0.4216 ;
Hi_R.at<double>(0, 21) = 0.0520 ;
Hi_R.at<double>(0, 22) = -0.0919;
Hi_R.at<double>(0, 23) = -0.0282;
Hi_R.at<double>(0, 24) = 0.0234 ;
Hi_R.at<double>(0, 25) = 0.0101 ;
Hi_R.at<double>(0, 26) = -0.0042;
Hi_R.at<double>(0, 27) = -0.0022;
Hi_R.at<double>(0, 28) = 0.0004 ;
Hi_R.at<double>(0, 29) = 0.0002;
}
else
{
return false;
}
return true;
}
// <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD> waveRec2() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķֽ<C4B7>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>coef<65><66><EFBFBD><EFBFBD> level <20><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD> <20>õ<EFBFBD><C3B5>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>rec
bool waveRec2(cv::Mat& rec, const std::deque<cv::Mat> &coef, const std::deque<cv::Vec2i> &scf, const string wname, const unsigned int level)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ж<EFBFBD>
if ( level < 1 ) // ͼ<><CDBC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD> level >= 1
{
return false;
}
// ϵ<><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>coef<65>ߴ<EFBFBD><DFB4><EFBFBD>֤
if (coef.size() != 3 * level + 1)
{
return false;
}
// ϵ<><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>coef<65><66><EFBFBD><EFBFBD>ֵ + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
for (unsigned int i = 0; i < coef.size(); i++)
{
if (coef[i].empty() == true
|| (coef[i].type() != CV_64FC1))
{
return false;
}
}
// scf<63>ߴ<EFBFBD><DFB4><EFBFBD>֤
if (scf.size() != level + 2)
{
return false;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD>
for (unsigned int i = 0; i < scf.size(); i++)
{
if (scf[i][0] <= 0 || scf[i][1] <= 0)
{
return false;
}
}
// <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ع<EFBFBD><D8B9>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cv::Mat Lo_R; // <20><>Ƶ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
cv::Mat Hi_R; // <20><>Ƶ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
if (!getWaveRecFilter(Lo_R, Hi_R, wname))
{
return false;
}
// Lo_R <20><>Lo_R<5F><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>֤
if (Lo_R.empty() == true || Lo_R.empty() == true
|| Lo_R.size != Hi_R.size)
{
return false;
}
cv::Mat tmp_rec; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// <20>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
cv::Mat rcA;
cv::Mat rcV;
cv::Mat rcH;
cv::Mat rcD;
// <20><>ȡ<EFBFBD><C8A1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
coef[0].copyTo(rcA);
for (unsigned int i = 0; i < level; i++)
{
coef[i * 3 + 1].copyTo(rcV);
coef[i * 3 + 2].copyTo(rcH);
coef[i * 3 + 3].copyTo(rcD);
// <20><>άС<CEAC><D0A1><EFBFBD><EFBFBD><EFBFBD>
bool ret = idwt2(tmp_rec,
rcA, rcV, rcH, rcD,
Lo_R, Hi_R,
scf[i + 2]); // <20><>i<EFBFBD>ع<EFBFBD><D8B9>õ<EFBFBD><C3B5><EFBFBD>i-1<><31><EFBFBD><EFBFBD>Ƶ
// <20><>άС<CEAC><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBBB><EFBFBD><EFBFBD>
if (ret == false)
{
return false;
}
else
{
tmp_rec.copyTo(rcA); // <20><><EFBFBD>µ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
}
}
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>
tmp_rec.copyTo(rec);
return true;
}