[pktools] 334/375: working on pkextract with random sample generation

Bas Couwenberg sebastic at xs4all.nl
Wed Dec 3 21:54:27 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 a13363f2cab7236552ec5f589b0c5adca39ee775
Author: Pieter Kempeneers <kempenep at gmail.com>
Date:   Mon Sep 29 22:03:51 2014 +0200

    working on pkextract with random sample generation
---
 src/apps/pkextract.cc | 178 ++++++--------------------------------------------
 1 file changed, 21 insertions(+), 157 deletions(-)

diff --git a/src/apps/pkextract.cc b/src/apps/pkextract.cc
index b843991..30fbcb6 100644
--- a/src/apps/pkextract.cc
+++ b/src/apps/pkextract.cc
@@ -45,6 +45,8 @@ int main(int argc, char *argv[])
   Optionpk<string> image_opt("i", "input", "Raster input dataset containing band information");
   Optionpk<string> sample_opt("s", "sample", "OGR vector dataset with features to be extracted from input data. Output will contain features with input band information included. Sample image can also be GDAL raster dataset.");
   Optionpk<string> layer_opt("ln", "ln", "Layer name(s) in sample (leave empty to select all)");
+  Optionpk<unsigned int> random_opt("rand", "random", "Create random sample of points. Provide number of points to generate");
+  Optionpk<unsigned int> grid_opt("grid", "grid", "Create systematic grid of points. Provide number of points to generate");
   Optionpk<string> output_opt("o", "output", "Output sample dataset");
   Optionpk<int> class_opt("c", "class", "Class(es) to extract from input sample image. Leave empty to extract all valid data pixels from sample dataset. Make sure to set classes if rule is set to maxvote or proportion");
   Optionpk<float> threshold_opt("t", "threshold", "Probability threshold for selecting samples (randomly). Provide probability in percentage (>0) or absolute (<0). Use a single threshold for vector sample datasets. If using raster land cover maps as a sample dataset, you can provide a threshold value for each class (e.g. -t 80 -t 60). Use value 100 to select all pixels for selected class(es)", 100);
@@ -71,6 +73,8 @@ int main(int argc, char *argv[])
     doProcess=image_opt.retrieveOption(argc,argv);
     sample_opt.retrieveOption(argc,argv);
     layer_opt.retrieveOption(argc,argv);
+    random_opt.retrieveOption(argc,argv);
+    grid_opt.retrieveOption(argc,argv);
     output_opt.retrieveOption(argc,argv);
     class_opt.retrieveOption(argc,argv);
     threshold_opt.retrieveOption(argc,argv);
@@ -147,10 +151,6 @@ int main(int argc, char *argv[])
     std::cerr << "No output dataset provided (use option -o). Use --help for help information";
       exit(0);
   }
-  if(sample_opt.empty()){
-    std::cerr << "No sample dataset provided (use option -s). Use --help for help information";
-    exit(0);
-  }
   try{
     imgReader.open(image_opt[0]);
   }
@@ -174,27 +174,6 @@ int main(int argc, char *argv[])
 
   if(verbose_opt[0])
     std::cout << fieldname_opt << std::endl;
-  vector<ImgReaderGdal> maskReader;
-  // if(mask_opt.size()){
-  //   maskReader.resize(mask_opt.size());
-  //   for(int imask=0;imask<mask_opt.size();++imask){
-  //     if(verbose_opt[0]>1)
-  //       std::cout << "opening mask image dataset " << mask_opt[imask] << std::endl;
-  //     maskReader[imask].open(mask_opt[0]);
-  //     if(imgReader.isGeoRef())
-  //       assert(maskReader[imask].isGeoRef());
-  //   }
-  // }
-
-  // Vector2d<int> maskBuffer;
-  // if(mask_opt.size()){
-  //   maskBuffer.resize(mask_opt.size());
-  //   for(int imask=0;imask<maskReader.size();++imask)
-  //     maskBuffer[imask].resize(maskReader[imask].nrOfCol());
-  // }
-  // vector<double> oldmaskrow(mask_opt.size());
-  // for(int imask=0;imask<mask_opt.size();++imask)
-  //   oldmaskrow[imask]=-1;
   
   if(verbose_opt[0]>1)
     std::cout << "Number of bands in input image: " << imgReader.nrOfBand() << std::endl;
@@ -255,7 +234,22 @@ int main(int argc, char *argv[])
     sampleReaderOgr.open(sample_opt[0]);
   }
   catch(string errorString){
-    sampleIsRaster=true;
+    if(sample_opt.empty()){
+      if(random_opt.size()){
+	//todo: create random sample of points (can be virtual dataset in memory only, as in http://www.gdal.org/gdal_vrttut.html: 
+
+	//poVRTDS = poDriver->CreateCopy( "", poSrcDS, FALSE, NULL, NULL, NULL ); with empty filename...
+      }
+      else if(systematic_opt.size()){
+	//todo: create systematic grid of points (can be virtual dataset in memory only?) 
+      }
+      else{
+	std::cerr << "No sample dataset provided (use option -s). Use --help for help information";
+	exit(0);
+      }
+    }
+    else
+      sampleIsRaster=true;
   }
 
   if(sampleIsRaster){
@@ -263,16 +257,6 @@ int main(int argc, char *argv[])
       // std::cout << "Warning: no classes selected, if a classes must be extracted, set to -1 for all classes using option -c -1" << std::endl;
       ImgReaderGdal classReader;
       ImgWriterOgr ogrWriter;
-      // if(verbose_opt[0]>1){
-      //   std::cout << "reading position from " << sample_opt[0] << std::endl;
-      //   std::cout << "class thresholds: " << std::endl;
-      //   for(int iclass=0;iclass<class_opt.size();++iclass){
-      //     if(threshold_opt.size()>1)
-      //       std::cout << class_opt[iclass] << ": " << threshold_opt[iclass] << std::endl;
-      //     else
-      //       std::cout << class_opt[iclass] << ": " << threshold_opt[0] << std::endl;
-      //   }
-      // }
       classReader.open(sample_opt[0]);
       // vector<int> classBuffer(classReader.nrOfCol());
       vector<double> classBuffer(classReader.nrOfCol());
@@ -367,67 +351,7 @@ int main(int argc, char *argv[])
 	      }
               oldimgrow=jimg;
 	    }
-	    
-            // for(int imask=0;imask<mask_opt.size();++imask){
-            //   double colMask,rowMask;//image coordinates in mask image
-            //   if(mask_opt.size()>1){//multiple masks
-            //     if(geo_opt[0])
-            //       maskReader[imask].geo2image(x,y,colMask,rowMask);
-            //     else{
-            //       colMask=icol;
-            //       rowMask=irow;
-            //     }
-            //     //nearest neighbour
-            //     rowMask=static_cast<int>(rowMask);
-            //     colMask=static_cast<int>(colMask);
-            //     if(static_cast<int>(colMask)<0||static_cast<int>(colMask)>=maskReader[imask].nrOfCol())
-            //       continue;
-            //     if(static_cast<int>(rowMask)!=static_cast<int>(oldmaskrow[imask])){
-            //       if(static_cast<int>(rowMask)<0||static_cast<int>(rowMask)>=maskReader[imask].nrOfRow())
-            //         continue;
-            //       else{
-            //         maskReader[imask].readData(maskBuffer[imask],GDT_Int32,static_cast<int>(rowMask));
-            //         oldmaskrow[imask]=rowMask;
-            //       }
-            //     }
-            //     int ivalue=0;
-            //     if(mask_opt.size()==msknodata_opt.size())//one invalid value for each mask
-            //       ivalue=static_cast<int>(msknodata_opt[imask]);
-            //     else//use same invalid value for each mask
-            //       ivalue=static_cast<int>(msknodata_opt[0]);
-            //     if(maskBuffer[imask][colMask]==ivalue){
-            //       valid=false;
-            //       break;
-            //     }
-            //   }
-            //   else if(maskReader.size()){
-            //     if(geo_opt[0])
-            //       maskReader[0].geo2image(x,y,colMask,rowMask);
-            //     else{
-            //       colMask=icol;
-            //       rowMask=irow;
-            //     }
-            //     //nearest neighbour
-            //     rowMask=static_cast<int>(rowMask);
-            //     colMask=static_cast<int>(colMask);
-            //     if(static_cast<int>(colMask)<0||static_cast<int>(colMask)>=maskReader[0].nrOfCol())
-            //       continue;
-            //     if(static_cast<int>(rowMask)!=static_cast<int>(oldmaskrow[0])){
-            //       if(static_cast<int>(rowMask)<0||static_cast<int>(rowMask)>=maskReader[0].nrOfRow())
-            //         continue;
-            //       else{
-            //         maskReader[0].readData(maskBuffer[0],GDT_Int32,static_cast<int>(rowMask));
-            //         oldmaskrow[0]=rowMask;
-            //       }
-            //     }
-            //     for(int ivalue=0;ivalue<msknodata_opt.size();++ivalue){
-            //       if(maskBuffer[0][colMask]==static_cast<int>(msknodata_opt[ivalue])){
-            //         valid=false;
-            //         break;
-            //       }
-            //     }
-            //   }
-            // }
+
             if(valid){
               for(int iband=0;iband<imgBuffer.size();++iband){
                 if(imgBuffer[iband].size()!=imgReader.nrOfCol()){
@@ -621,66 +545,6 @@ int main(int argc, char *argv[])
               }
               oldimgrow=jimg;
             }
-            // for(int imask=0;imask<mask_opt.size();++imask){
-            //   double colMask,rowMask;//image coordinates in mask image
-            //   if(mask_opt.size()>1){//multiple masks
-            //     if(geo_opt[0])
-            //       maskReader[imask].geo2image(x,y,colMask,rowMask);
-            //     else{
-            //       colMask=icol;
-            //       rowMask=irow;
-            //     }
-            //     //nearest neighbour
-            //     rowMask=static_cast<int>(rowMask);
-            //     colMask=static_cast<int>(colMask);
-            //     if(static_cast<int>(colMask)<0||static_cast<int>(colMask)>=maskReader[imask].nrOfCol())
-            //       continue;
-            //     if(static_cast<int>(rowMask)!=static_cast<int>(oldmaskrow[imask])){
-            //       if(static_cast<int>(rowMask)<0||static_cast<int>(rowMask)>=maskReader[imask].nrOfRow())
-            //         continue;
-            //       else{
-            //         maskReader[imask].readData(maskBuffer[imask],GDT_Int32,static_cast<int>(rowMask));
-            //         oldmaskrow[imask]=rowMask;
-            //       }
-            //     }
-            //     int ivalue=0;
-            //     if(mask_opt.size()==msknodata_opt.size())//one invalid value for each mask
-            //       ivalue=static_cast<int>(msknodata_opt[imask]);
-            //     else//use same invalid value for each mask
-            //       ivalue=static_cast<int>(msknodata_opt[0]);
-            //     if(maskBuffer[imask][colMask]==ivalue){
-            //       valid=false;
-            //       break;
-            //     }
-            //   }
-            //   else if(maskReader.size()){
-            //     if(geo_opt[0])
-            //       maskReader[0].geo2image(x,y,colMask,rowMask);
-            //     else{
-            //       colMask=icol;
-            //       rowMask=irow;
-            //     }
-            //     //nearest neighbour
-            //     rowMask=static_cast<int>(rowMask);
-            //     colMask=static_cast<int>(colMask);
-            //     if(static_cast<int>(colMask)<0||static_cast<int>(colMask)>=maskReader[0].nrOfCol())
-            //       continue;
-            //     if(static_cast<int>(rowMask)!=static_cast<int>(oldmaskrow[0])){
-            //       if(static_cast<int>(rowMask)<0||static_cast<int>(rowMask)>=maskReader[0].nrOfRow())
-            //         continue;
-            //       else{
-            //         maskReader[0].readData(maskBuffer[0],GDT_Int32,static_cast<int>(rowMask));
-            //         oldmaskrow[0]=rowMask;
-            //       }
-            //     }
-            //     for(int ivalue=0;ivalue<msknodata_opt.size();++ivalue){
-            //       if(maskBuffer[0][colMask]==static_cast<int>(msknodata_opt[ivalue])){
-            //         valid=false;
-            //         break;
-            //       }
-            //     }
-            //   }
-            // }
             if(valid){
               for(int iband=0;iband<imgBuffer.size();++iband){
                 if(imgBuffer[iband].size()!=imgReader.nrOfCol()){

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