This is an automated email from the git hooks/post-receive script. sebastic-guest pushed a commit to branch upstream-master in repository pktools.
commit 076ab5dc8e3ed00d4f2326cf57ccf4b0ecbeaba8 Author: Pieter Kempeneers <kempe...@gmail.com> Date: Mon May 5 18:19:01 2014 +0200 working on dsm2dtm in Filter2d.h, error for south to north... --- src/algorithms/Filter2d.h | 78 +++++++++++++++++++++++++---------------------- src/apps/pkfilterdem.cc | 72 ++++++++++++++++++++++++------------------- 2 files changed, 82 insertions(+), 68 deletions(-) diff --git a/src/algorithms/Filter2d.h b/src/algorithms/Filter2d.h index 54aeee0..c623b07 100644 --- a/src/algorithms/Filter2d.h +++ b/src/algorithms/Filter2d.h @@ -825,14 +825,17 @@ template<class T> unsigned long int Filter2d::morphology(const Vector2d<T>& inpu ++nmasked; } } - if(nmasked<nlimit){ + if(nmasked<=nlimit){ ++nchange; //reset pixel in outputMask outputMask[y][x]=0; } else{ //reset pixel height in tmpDSM - inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); + sort(neighbors.begin(),neighbors.end()); + assert(neighbors.size()>1); + inBuffer[(dimY-1)/2][x]=neighbors[1]; + /* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */ } } progress=(1.0+y); @@ -916,14 +919,17 @@ template<class T> unsigned long int Filter2d::morphology(const Vector2d<T>& inpu ++nmasked; } } - if(nmasked<nlimit){ + if(nmasked<=nlimit){ ++nchange; //reset pixel in outputMask outputMask[y][x]=0; } else{ //reset pixel height in tmpDSM - inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); + sort(neighbors.begin(),neighbors.end()); + assert(neighbors.size()>1); + inBuffer[(dimY-1)/2][x]=neighbors[1]; + /* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */ } } progress=(1.0+y); @@ -956,30 +962,26 @@ template<class T> unsigned long int Filter2d::morphology(const Vector2d<T>& inpu if(outputMask.size()!=inputDSM.nRows()) outputMask.resize(inputDSM.nRows()); int indexI=0; - int indexJ=0; - //initialize last half of inBuffer - for(int j=-(dimY-1)/2;j<=dimY/2;++j){ + int indexJ=inputDSM.nRows()-1; + //initialize first half of inBuffer + for(int j=inputDSM.nRows()-dimY/2;j<inputDSM.nRows();--j){ for(int i=0;i<inputDSM.nCols();++i) inBuffer[indexJ][i]=tmpDSM[abs(j)][i]; ++indexJ; } for(int y=tmpDSM.nRows()-1;y>=0;--y){ - if(y){//inBuffer already initialized for y=0 - //erase first line from inBuffer - inBuffer.erase(inBuffer.begin()); - //read extra line and push back to inBuffer if not out of bounds - if(y+dimY/2<tmpDSM.nRows()){ + if(y<tmpDSM.nRows()-1){//inBuffer already initialized for y=tmpDSM.nRows()-1 + //erase last line from inBuffer + inBuffer.erase(inBuffer.end()-1); + //read extra line and insert to inBuffer if not out of bounds + if(y-dimY/2>0){ //allocate buffer - inBuffer.push_back(inBuffer.back()); + inBuffer.insert(inBuffer.begin(),inBuffer.back()); for(int i=0;i<tmpDSM.nCols();++i) - inBuffer[inBuffer.size()-1][i]=tmpDSM[y+dimY/2][i]; + inBuffer[0][i]=tmpDSM[y-dimY/2][i]; } else{ - int over=y+dimY/2-tmpDSM.nRows(); - int index=(inBuffer.size()-1)-over; - assert(index>=0); - assert(index<inBuffer.size()); - inBuffer.push_back(inBuffer[index]); + inBuffer.insert(inBuffer.begin(),inBuffer[abs(y-dimY/2)]); } } for(int x=tmpDSM.nCols()-1;x>=0;--x){ @@ -1007,14 +1009,17 @@ template<class T> unsigned long int Filter2d::morphology(const Vector2d<T>& inpu ++nmasked; } } - if(nmasked<nlimit){ + if(nmasked<=nlimit){ ++nchange; //reset pixel in outputMask outputMask[y][x]=0; } else{ //reset pixel height in tmpDSM - inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); + sort(neighbors.begin(),neighbors.end()); + assert(neighbors.size()>1); + inBuffer[(dimY-1)/2][x]=neighbors[1]; + /* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */ } } progress=(1.0+y); @@ -1048,29 +1053,25 @@ template<class T> unsigned long int Filter2d::morphology(const Vector2d<T>& inpu outputMask.resize(inputDSM.nRows()); int indexI=0; int indexJ=0; - //initialize last half of inBuffer - for(int j=-(dimY-1)/2;j<=dimY/2;++j){ + //initialize first half of inBuffer + for(int j=inputDSM.nRows()-dimY/2;j<inputDSM.nRows();--j){ for(int i=0;i<inputDSM.nCols();++i) inBuffer[indexJ][i]=tmpDSM[abs(j)][i]; ++indexJ; } for(int y=tmpDSM.nRows()-1;y>=0;--y){ - if(y){//inBuffer already initialized for y=0 - //erase first line from inBuffer - inBuffer.erase(inBuffer.begin()); - //read extra line and push back to inBuffer if not out of bounds - if(y+dimY/2<tmpDSM.nRows()){ + if(y<tmpDSM.nRows()-1){//inBuffer already initialized for y=0 + //erase last line from inBuffer + inBuffer.erase(inBuffer.end()-1); + //read extra line and insert to inBuffer if not out of bounds + if(y-dimY/2>0){ //allocate buffer - inBuffer.push_back(inBuffer.back()); + inBuffer.insert(inBuffer.begin(),inBuffer.back()); for(int i=0;i<tmpDSM.nCols();++i) - inBuffer[inBuffer.size()-1][i]=tmpDSM[y+dimY/2][i]; + inBuffer[0][i]=tmpDSM[y-dimY/2][i]; } else{ - int over=y+dimY/2-tmpDSM.nRows(); - int index=(inBuffer.size()-1)-over; - assert(index>=0); - assert(index<inBuffer.size()); - inBuffer.push_back(inBuffer[index]); + inBuffer.insert(inBuffer.begin(),inBuffer[abs(y-dimY/2)]); } } for(int x=0;x<tmpDSM.nCols();++x){ @@ -1098,14 +1099,17 @@ template<class T> unsigned long int Filter2d::morphology(const Vector2d<T>& inpu ++nmasked; } } - if(nmasked<nlimit){ + if(nmasked<=nlimit){ ++nchange; //reset pixel in outputMask outputMask[y][x]=0; } else{ //reset pixel height in tmpDSM - inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); + sort(neighbors.begin(),neighbors.end()); + assert(neighbors.size()>1); + inBuffer[(dimY-1)/2][x]=neighbors[1]; + /* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */ } } progress=(1.0+y); diff --git a/src/apps/pkfilterdem.cc b/src/apps/pkfilterdem.cc index b96e06c..62f5d0b 100644 --- a/src/apps/pkfilterdem.cc +++ b/src/apps/pkfilterdem.cc @@ -161,11 +161,12 @@ int main(int argc,char **argv) { unsigned long int nchange=1; if(postFilter_opt[0]=="vito"){ //todo: fill empty pixels - // hThreshold_opt.resize(3); + // hThreshold_opt.resize(4); // hThreshold_opt[0]=0.7; // hThreshold_opt[1]=0.3; // hThreshold_opt[2]=0.1; - vector<int> nlimit(3); + // hThreshold_opt[2]=-0.2; + vector<int> nlimit(4); nlimit[0]=2; nlimit[1]=3; nlimit[2]=4; @@ -184,40 +185,39 @@ int main(int argc,char **argv) { tmpMask[irow][icol]=1;//1=surface, 0=terrain if(verbose_opt[0]) cout << "filtering NWSE" << endl; - theFilter.dsm2dtm_nwse(inputData,tmpMask,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]); - - // //from here - + //from here // Vector2d<double> tmpDSM(inputData); - // double noDataValue=0; - - // unsigned long int nchange=0; // int dimX=dim_opt[0]; // int dimY=dim_opt[0]; // assert(dimX); // assert(dimY); // statfactory::StatFactory stat; // Vector2d<double> inBuffer(dimY,inputData.nCols()); - // // if(tmpMask.size()!=inputData.nRows()) - // // tmpMask.resize(inputData.nRows()); + // if(tmpData.size()!=inputData.nRows()) + // tmpData.resize(inputData.nRows()); // int indexI=0; - // int indexJ=0; + // int indexJ=inputData.nRows()-1; + // // int indexJ=0; // //initialize last half of inBuffer // for(int j=-(dimY-1)/2;j<=dimY/2;++j){ // for(int i=0;i<inputData.nCols();++i) // inBuffer[indexJ][i]=tmpDSM[abs(j)][i]; - // ++indexJ; + // --indexJ; + // // ++indexJ; // } - // for(int y=0;y<tmpDSM.nRows();++y){ + // for(int y=tmpDSM.nRows()-1;y>=0;--y){ // if(y){//inBuffer already initialized for y=0 // //erase first line from inBuffer - // inBuffer.erase(inBuffer.begin()); + // inBuffer.erase(inBuffer.end()-1); + // // inBuffer.erase(inBuffer.begin()); // //read extra line and push back to inBuffer if not out of bounds // if(y+dimY/2<tmpDSM.nRows()){ // //allocate buffer - // inBuffer.push_back(inBuffer.back()); - // for(int i=0;i<tmpDSM.nCols();++i) - // inBuffer[inBuffer.size()-1][i]=tmpDSM[y+dimY/2][i]; + // // inBuffer.push_back(inBuffer.back()); + // inBuffer.insert(inBuffer.begin(),*(inBuffer.begin())); + // for(int i=0;i<tmpDSM.nCols();++i) + // inBuffer[0][i]=tmpDSM[y-dimY/2][i]; + // // inBuffer[inBuffer.size()-1][i]=tmpDSM[y+dimY/2][i]; // } // else{ // int over=y+dimY/2-tmpDSM.nRows(); @@ -227,8 +227,10 @@ int main(int argc,char **argv) { // inBuffer.push_back(inBuffer[index]); // } // } - // for(int x=0;x<tmpDSM.nCols();++x){ + // for(int x=tmpDSM.nCols()-1;x>=0;--x){ // double centerValue=inBuffer[(dimY-1)/2][x]; + // //test + // cout << "pixel (" << x << "," << y << "): " << centerValue << endl; // short nmasked=0; // std::vector<double> neighbors; // for(int j=-(dimY-1)/2;j<=dimY/2;++j){ @@ -246,41 +248,49 @@ int main(int argc,char **argv) { // else // indexJ=(dimY-1)/2+j; // double difference=(centerValue-inBuffer[indexJ][indexI]); + // //test + // cout << "centerValue-inBuffer[" << indexJ << "][" << indexI << "]=" << centerValue << " - " << inBuffer[indexJ][indexI] << " = " << difference << endl; // if(i||j)//skip centerValue // neighbors.push_back(inBuffer[indexJ][indexI]); // if(difference>hThreshold_opt[iheight]) // ++nmasked; // } // } - // if(nmasked<nlimit[iheight]){ + // //test + // cout << "pixel " << x << ", " << y << ": nmasked is " << nmasked << endl; + // if(nmasked<=nlimit[iheight]){ // ++nchange; - // //reset pixel in tmpMask - // tmpMask[y][x]=0; + // //reset pixel in outputMask + // tmpData[y][x]=0; + // //test + // cout << "pixel " << x << ", " << y << " is ground" << endl; // } // else{ // //reset pixel height in tmpDSM - // inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); + // sort(neighbors.begin(),neighbors.end()); + // assert(neighbors.size()>1); + // inBuffer[(dimY-1)/2][x]=neighbors[1]; + // //test + // cout << "pixel " << x << ", " << y << " is surface, reset DSM to " << neighbors[1] << endl; + // /* inBuffer[(dimY-1)/2][x]=stat.mymin(neighbors); */ // } // } // } //to here - tmpData.setMask(tmpMask,0,0); + theFilter.dsm2dtm_nwse(inputData,tmpData,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]); if(verbose_opt[0]) cout << "filtering NESW" << endl; - theFilter.dsm2dtm_nesw(inputData,tmpMask,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]); - tmpData.setMask(tmpMask,0,0); + theFilter.dsm2dtm_nesw(inputData,tmpData,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]); if(verbose_opt[0]) cout << "filtering SENW" << endl; - theFilter.dsm2dtm_senw(inputData,tmpMask,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]); - tmpData.setMask(tmpMask,0,0); + theFilter.dsm2dtm_senw(inputData,tmpData,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]); if(verbose_opt[0]) cout << "filtering SWNE" << endl; - theFilter.dsm2dtm_swne(inputData,tmpMask,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]); - // set tmpMask to finalMask - tmpData.setMask(tmpMask,0,0); + theFilter.dsm2dtm_swne(inputData,tmpData,hThreshold_opt[iheight],nlimit[iheight],dim_opt[0]); } outputData=tmpData; + //todo: interpolate //outputData.setMask(tmpData,1,0); } else if(postFilter_opt[0]=="etew_min"){ -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel