#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <algorithm>
#include "lwave.h"
using namespace std;
int main()
{
string name="bior3.3";
int J=2;
vector<double> sig;
for (int i=0; i < 88;i ++) {
sig.push_back((double) (i+1));
}
int rows=11;
int cols=8;
cout << "INPUT : " << endl;
for (int i=0; i < (int) rows; i++) {
for (int j=0; j < (int) cols;j++) {
cout << sig[i*cols+j] << " ";
}
cout << endl;
}
liftscheme blift(name);
lwt2<double> lift2(sig,rows,cols,blift,J);
vector<double> A,B,C,D;
lift2.getCoef(A,B,C,D);
vector<int> lengths;
lift2.getDim(lengths);
cout << "Respective Size of All 4 Output vectors (LL,LH,HL,HH) : " ;
cout << A.size() << " " << B.size() << " " << C.size() << " " << D.size() << endl;
cout << "Length of Dimension Vector (8 at Level 1 + 6 at Level 2) :" << lengths.size() << endl;
cout << "Low Pass Component At Level 2 : " << endl;
for (int i=0; i < (int) lengths[0]; i++) {
for (int j=0; j < (int) lengths[1];j++) {
cout << A[i*lengths[1]+j] << " ";
}
cout << endl;
}
cout << " Levels : " << lift2.getLevels() << endl;
cout << " All 7 row/col pairs : " << endl;
for (int i=0; i < (int) lengths.size()/2; i++) {
cout << lengths[2*i] << " " << lengths[2*i+1 ] << endl;
}
int slevel = 1;
vector<double> H;
vector<int> detlenH;
lift2.getDetails("LH",slevel,H,detlenH);
cout << " Lengths of Horizontal Component at level 1 : " << detlenH[0] << " " << detlenH[1] << endl;
cout << " Horizontal Component at level 1 : " << endl;
for (int i=0; i < (int) detlenH[0]; i++) {
for (int j=0; j < (int) detlenH[1];j++) {
cout << H[i*detlenH[1]+j] << " ";
}
cout << endl;
}
cout << endl;
ilwt2<double> ilift2(lift2,blift);
vector<double> oup;
ilift2.getSignal(oup);
vector<int> oup_dim;
ilift2.getDim(oup_dim);
cout << "Output Dimensions : " << oup_dim[0] << " :: " << oup_dim[1] << endl;
cout << "OUTPUT : " << endl;
for (int i=0; i < (int) oup_dim[0]; i++) {
for (int j=0; j < (int) oup_dim[1];j++) {
cout << oup[i*oup_dim[1]+j] << " ";
}
cout << endl;
}
return 0;
}