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 da5d9b72f6bdc505fb01935f89260b09c8038d56
Merge: 424a7b6 54aebed
Author: Pieter Kempeneers <kempe...@gmail.com>
Date:   Mon Dec 1 14:27:10 2014 +0100

    mask in geo coordinates for pksvm and pkann

 ChangeLog             |   6 +
 src/apps/pkann.cc     | 108 ++++++-----
 src/apps/pkextract.cc | 506 ++++++++++++++++++++++++++------------------------
 src/apps/pksvm.cc     |   4 +-
 4 files changed, 328 insertions(+), 296 deletions(-)

diff --cc ChangeLog
index c525c0f,e79f273..602d788
--- a/ChangeLog
+++ b/ChangeLog
@@@ -329,7 -329,7 +329,13 @@@ version 2.6.
        Declare nodata option as double (see ticket #43500)
        Support nodata values for filtering in spectral/temporal domain (see 
ticket #43713)
   - pkextract
 +      extracting with absolute threshold (negative value) was selecting 1 
extra sample unit
+       debug: Order of SetGeometry must be before SetFrom caused bad vector 
features (First SetGeometry, then SetFrom)
++ - pksvm
++      support for mask in geo coordinates (does not need to be in same 
dimensions as input raster dataset, only in same projection)
++ - pkann
++      support for mask in geo coordinates (does not need to be in same 
dimensions as input raster dataset, only in same projection)
++
  Todo:
   - todo for API
        ImgReaderGdal (ImgWriterGdal) open in update mode (check gdal_edit.py: 
http://searchcode.com/codesearch/view/18938404)
diff --cc src/apps/pkann.cc
index 8148c45,8148c45..b8d2ec5
--- a/src/apps/pkann.cc
+++ b/src/apps/pkann.cc
@@@ -610,10 -610,10 +610,8 @@@ int main(int argc, char *argv[]
      if(mask_opt.size()){
        try{
          if(verbose_opt[0]>=1)
--          cout << "opening mask image file " << mask_opt[0] << endl;
++          std::cout << "opening mask image file " << mask_opt[0] << std::endl;
          maskReader.open(mask_opt[0]);
--        assert(maskReader.nrOfCol()==testImage.nrOfCol());
--        assert(maskReader.nrOfRow()==testImage.nrOfRow());
        }
        catch(string error){
          cerr << error << endl;
@@@ -745,20 -745,20 +743,6 @@@
        assert(nband==hpixel[0].size());
        if(verbose_opt[0]==2)
          cout << "used bands: " << nband << endl;
--      //read mask
--      if(!lineMask.empty()){
--        try{
--          maskReader.readData(lineMask,GDT_Int16,iline);
--        }
--        catch(string theError){
--          cerr << "Error reading " << mask_opt[0] << ": " << theError << endl;
--          exit(3);
--        }
--        catch(...){
--          cerr << "error catched" << endl;
--          exit(3);
--        }
--      }
        //read prior
        if(priorimg_opt.size()){
          try{
@@@ -777,40 -777,40 +761,70 @@@
            exit(3);
          }
        }
--    
++      double oldRowMask=-1;//keep track of row mask to optimize number of 
line readings
        //process per pixel
        for(int icol=0;icol<ncol;++icol){
          assert(hpixel[icol].size()==nband);
          bool masked=false;
--        if(!lineMask.empty()){
--          short theMask=0;
--          for(short ivalue=0;ivalue<msknodata_opt.size();++ivalue){
--            if(msknodata_opt[ivalue]>=0){//values set in msknodata_opt are 
invalid
--              if(lineMask[icol]==msknodata_opt[ivalue]){
--                theMask=lineMask[icol];
--                masked=true;
--                break;
--              }
--            }
--            else{//only values set in msknodata_opt are valid
--              if(lineMask[icol]!=-msknodata_opt[ivalue]){
--                  theMask=(nodata_opt.size()==msknodata_opt.size())? 
nodata_opt[ivalue] : nodata_opt[0];// lineMask[icol];
--                masked=true;
--              }
--              else{
--                masked=false;
--                break;
--              }
--            }
--          }
--          if(masked){
--            if(classBag_opt.size())
--              for(int ibag=0;ibag<nbag;++ibag)
--                classBag[ibag][icol]=theMask;
--            classOut[icol]=theMask;
--            continue;
--          }
--        }
++        if(mask_opt.size()){
++        //read mask
++        double colMask=0;
++        double rowMask=0;
++        double geox=0;
++        double geoy=0;
++
++        testImage.image2geo(icol,iline,geox,geoy);
++        maskReader.geo2image(geox,geoy,colMask,rowMask);
++        colMask=static_cast<int>(colMask);
++        rowMask=static_cast<int>(rowMask);
++        
if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
++          if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
++            assert(rowMask>=0&&rowMask<maskReader.nrOfRow());
++            try{
++              // 
maskReader.readData(lineMask[imask],GDT_Int32,static_cast<int>(rowMask));
++              
maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
++            }
++            catch(string errorstring){
++              cerr << errorstring << endl;
++              exit(1);
++            }
++            catch(...){
++              cerr << "error catched" << std::endl;
++              exit(3);
++            }
++            oldRowMask=rowMask;
++          }
++        }
++        else
++          continue;//no coverage in this mask
++        short theMask=0;
++        for(short ivalue=0;ivalue<msknodata_opt.size();++ivalue){
++          if(msknodata_opt[ivalue]>=0){//values set in msknodata_opt are 
invalid
++            if(lineMask[colMask]==msknodata_opt[ivalue]){
++              theMask=lineMask[colMask];
++              masked=true;
++              break;
++            }
++          }
++          else{//only values set in msknodata_opt are valid
++            if(lineMask[colMask]!=-msknodata_opt[ivalue]){
++              theMask=lineMask[colMask];
++              masked=true;
++            }
++            else{
++              masked=false;
++              break;
++            }
++          }
++        }
++        if(masked){
++          if(classBag_opt.size())
++            for(int ibag=0;ibag<nbag;++ibag)
++              classBag[ibag][icol]=theMask;
++          classOut[icol]=theMask;
++          continue;
++        }
++      }
          bool valid=false;
          for(int iband=0;iband<nband;++iband){
            if(hpixel[icol][iband]){
diff --cc src/apps/pksvm.cc
index bfd02d5,0745a52..60f9ddc
--- a/src/apps/pksvm.cc
+++ b/src/apps/pksvm.cc
@@@ -614,8 -614,8 +614,6 @@@ int main(int argc, char *argv[]
          if(verbose_opt[0]>=1)
            std::cout << "opening mask image file " << mask_opt[0] << std::endl;
          maskReader.open(mask_opt[0]);
-         // assert(maskReader.nrOfCol()==testImage.nrOfCol());
-         // assert(maskReader.nrOfRow()==testImage.nrOfRow());
 -        assert(maskReader.nrOfCol()==testImage.nrOfCol());
 -        assert(maskReader.nrOfRow()==testImage.nrOfRow());
        }
        catch(string error){
          cerr << error << std::endl;
@@@ -766,65 -781,35 +764,65 @@@
        for(int icol=0;icol<ncol;++icol){
          assert(hpixel[icol].size()==nband);
          bool masked=false;
 -        if(!lineMask.empty()){
 -          short theMask=0;
 -          for(short ivalue=0;ivalue<msknodata_opt.size();++ivalue){
 -            if(msknodata_opt[ivalue]>=0){//values set in msknodata_opt are 
invalid
 -              if(lineMask[icol]==msknodata_opt[ivalue]){
 -                theMask=lineMask[icol];
 -                masked=true;
 -                break;
 -              }
 -            }
 -            else{//only values set in msknodata_opt are valid
 -              if(lineMask[icol]!=-msknodata_opt[ivalue]){
 -                theMask=lineMask[icol];
 -                masked=true;
 -              }
 -              else{
 -                masked=false;
 -                break;
 -              }
 -            }
 -          }
 -          if(masked){
 -            if(classBag_opt.size())
 -              for(int ibag=0;ibag<nbag;++ibag)
 -                classBag[ibag][icol]=theMask;
 -            classOut[icol]=theMask;
 -            continue;
 -          }
 -        }
 +        if(mask_opt.size()){
 +        //read mask
 +        double colMask=0;
 +        double rowMask=0;
 +        double geox=0;
 +        double geoy=0;
 +
 +        testImage.image2geo(icol,iline,geox,geoy);
 +        maskReader.geo2image(geox,geoy,colMask,rowMask);
 +        colMask=static_cast<int>(colMask);
 +        rowMask=static_cast<int>(rowMask);
 +        
if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){
 +          if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){
 +            assert(rowMask>=0&&rowMask<maskReader.nrOfRow());
 +            try{
 +              // 
maskReader.readData(lineMask[imask],GDT_Int32,static_cast<int>(rowMask));
 +              
maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask));
 +            }
 +            catch(string errorstring){
 +              cerr << errorstring << endl;
 +              exit(1);
 +            }
 +            catch(...){
 +              cerr << "error catched" << std::endl;
 +              exit(3);
 +            }
 +            oldRowMask=rowMask;
 +          }
 +        }
 +        else
 +          continue;//no coverage in this mask
 +        short theMask=0;
 +        for(short ivalue=0;ivalue<msknodata_opt.size();++ivalue){
 +          if(msknodata_opt[ivalue]>=0){//values set in msknodata_opt are 
invalid
 +            if(lineMask[colMask]==msknodata_opt[ivalue]){
 +              theMask=lineMask[colMask];
 +              masked=true;
 +              break;
 +            }
 +          }
 +          else{//only values set in msknodata_opt are valid
-             if(lineMask[icol]!=-msknodata_opt[ivalue]){
++            if(lineMask[colMask]!=-msknodata_opt[ivalue]){
 +              theMask=lineMask[colMask];
 +              masked=true;
 +            }
 +            else{
 +              masked=false;
 +              break;
 +            }
 +          }
 +        }
 +        if(masked){
 +          if(classBag_opt.size())
 +            for(int ibag=0;ibag<nbag;++ibag)
 +              classBag[ibag][icol]=theMask;
 +          classOut[icol]=theMask;
 +          continue;
 +        }
 +      }
          bool valid=false;
          for(int iband=0;iband<hpixel[icol].size();++iband){
            if(hpixel[icol][iband]){

-- 
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

Reply via email to