#include "stdafx.h" #include "pyramid.h" #include #include CPyramid::CPyramid() { layerNum=0; ImgLayer=NULL; } void CPyramid::Init(int s_row, int s_col, int levelNum) { int i,j,k; //new pyramid this->ImgLayer = new CMatrix[levelNum]; this->layerNum = levelNum; //calculate level int delta=1; int level=levelNum-1; //memory allocation // for(i=0;iImgLayer[level].Array1D= buf1D; this->ImgLayer[level].Array2D= buf2D; this->ImgLayer[level].row = row; this->ImgLayer[level].col = col; this->ImgLayer[level].len = len; delta*=2; level--; } for(k=1; kImgLayer[level].Array1D= buf1D; this->ImgLayer[level].Array2D= buf2D; this->ImgLayer[level].row = row; this->ImgLayer[level].col = col; this->ImgLayer[level].len = len; delta*=2; level--; } } void CPyramid::BuildPyd(unsigned char* Source, int s_row, int s_col, int levelNum) { int i,j,k; //calculate level int delta=1; int level=levelNum-1; //memory allocation // for(i=0;iImgLayer[level].Array1D[i] = Source[i]*Source[i]; } delta = delta<<1; level--; } for(k=1; kImgLayer[level+1].Array2D; int row = s_row-delta+1; int col = s_col-delta+1; int len = row*col; memset(buf1Dtemp,0,s_row*s_col*sizeof(int)); int pre_delta=delta>>1; for(i=0; iImgLayer[level+1].row;i++) for(j=0; jImgLayer[level].Array1D[i] = Source[i]*Source[i]; } delta*=2; level--; } for(k=1; kImgLayer[level+1].Array2D; int row = s_row-delta+1; int col = s_col-delta+1; int len = row*col; memset(buf1Dtemp,0,s_row*s_col*sizeof(int)); int pre_delta=delta>>1; for(i=0; iImgLayer[level+1].row;i++) for(j=0; jlayerNum; for(int i=0; iImgLayer[i].Array1D ); free( this->ImgLayer[i].Array2D ); } free(buf1Dtemp); free(buf2Dtemp); } //================================================================= //================================================================= void ClearPyd(CPyramid *p) { int level=p->layerNum; for(int i=0; iImgLayer[i].Array1D ); free( p->ImgLayer[i].Array2D ); } }