[pktools] 372/375: mask in geo coordinates for pksvm and pkann

Bas Couwenberg sebastic at xs4all.nl
Wed Dec 3 21:54:31 UTC 2014


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



More information about the Pkg-grass-devel mailing list