[pktools] 324/375: working on filter in spectral domain

Bas Couwenberg sebastic at xs4all.nl
Wed Dec 3 21:54:26 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 0df665d75d3397463186c59f6fa07e3ffc0437d6
Author: Pieter Kempeneers <kempenep at gmail.com>
Date:   Sun Sep 21 11:46:47 2014 -0700

    working on filter in spectral domain
---
 ChangeLog                  |  2 ++
 doc/examples_pkextract.dox | 33 +++++++++++++++++++--------------
 src/algorithms/Filter.cc   | 13 ++++++++++---
 3 files changed, 31 insertions(+), 17 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index bbbe5ae..38c5595 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -308,6 +308,8 @@ version 2.5.3
 version 2.5.4
  - pkinfo
 	Support multiple input bands when calculating statistics
+ - pkfilter
+	Support filtering and statistics in spectral domain (see ticket #43252)
 
 Next versions: 
  - todo for API: ImgReaderGdal (ImgWriterGdal) open in update mode (check gdal_edit.py: http://searchcode.com/codesearch/view/18938404)
diff --git a/doc/examples_pkextract.dox b/doc/examples_pkextract.dox
index f9a0f51..0ba5b51 100644
--- a/doc/examples_pkextract.dox
+++ b/doc/examples_pkextract.dox
@@ -1,37 +1,42 @@
 \section examples_pkextract Examples of pkextract
 \code
-pkextract -i input.tif -s points.shp -o extracted.shp
+pkextract -i input.tif -s points.sqlite -o extracted.sqlite
 \endcode
-extract the points read in points.shp from input.tif. Create a new point vector file  extracted.shp, where each point will contain an attribute for the individual input bands in input.tif.
+extract the points read in points.sqlite from input.tif. Create a new point vector file  extracted.sqlite, where each point will contain an attribute for the individual input bands in input.tif.
 
 \code
-pkextract -i input.tif -s points.shp -m mask.tif -msknodata 255 -o extracted.shp 
+pkextract -i input.tif -s points.shp -f "ESRI Shapefile" -o extracted.shp
 \endcode
-extract all bands from input.tif to extracted.shp at pixel locations defined in points.shp that have not a value 255 in mask.tif
+Same example as above, but vector format is ESRI Shapefile
 
 \code
-pkextract -i input.tif -s polygons.shp -o training.shp -r point
+pkextract -i input.tif -s points.sqlite -m mask.tif -msknodata 255 -o extracted.sqlite 
 \endcode
-extract all pixels from input.tif covered by the polygons in locations.shp. Each polygon can thus result in multiple point features with attributes for each input band. Write the extracted points to a point vector file training.shp.
+extract all bands from input.tif to extracted.sqlite at pixel locations defined in points.sqlite that have not a value 255 in mask.tif
 
 \code
-pkextract -i input.tif -b 0 -s polygons.shp -r centroid -o extracted.shp -polygon  
+pkextract -i input.tif -s polygons.sqlite -o training.sqlite -r point
 \endcode
-extract the first band from input.tif at the centroids of the polygons in vector filepolygons.shp. Assign the extracted point value to a new attribute of the polygon and write to the vector file extracted.shp.
+extract all pixels from input.tif covered by the polygons in locations.sqlite. Each polygon can thus result in multiple point features with attributes for each input band. Write the extracted points to a point vector file training.sqlite.
 
 \code
-pkextract -i input.tif -b 1 -s polygons.shp -r mean -o extracted.shp -polygon  
+pkextract -i input.tif -b 0 -s polygons.sqlite -r centroid -o extracted.sqlite -polygon  
 \endcode
-extract the mean values for the second band in input.tif covered by each polygon in polygons.shp. The mean values are written to a copy of the polygons in output vector file extracted.shp
+extract the first band from input.tif at the centroids of the polygons in vector filepolygons.sqlite. Assign the extracted point value to a new attribute of the polygon and write to the vector file extracted.sqlite.
 
 \code
-pkextract -i input.tif -s sample.tif -o extracted.shp -t 10 -c 1 -c 2 -c 3
+pkextract -i input.tif -b 1 -s polygons.sqlite -r mean -o extracted.sqlite -polygon  
 \endcode
-Typical use where pixels are extracted based on a land cover map (sample.tif). Extract all bands for a random sample of 10 percent of the pixels in the land cover map sample.tif where the land cover classes are either 1,2 or 3 (class values). Write output to the point vector file extracted.shp.
+extract the mean values for the second band in input.tif covered by each polygon in polygons.sqlite. The mean values are written to a copy of the polygons in output vector file extracted.sqlite
 
 \code
-pkextract -i input.tif -s sample.tif -o extracted.shp -t -5000 -c 1
+pkextract -i input.tif -s sample.tif -o extracted.sqlite -t 10 -c 1 -c 2 -c 3
 \endcode
-extract all bands for the first 5000 pixels encountered in sample.tif where pixels have a value equal to 1. Write output to point vector file extracted.shp.
+Typical use where pixels are extracted based on a land cover map (sample.tif). Extract all bands for a random sample of 10 percent of the pixels in the land cover map sample.tif where the land cover classes are either 1,2 or 3 (class values). Write output to the point vector file extracted.sqlite.
+
+\code
+pkextract -i input.tif -s sample.tif -o extracted.sqlite -t -5000 -c 1
+\endcode
+extract all bands for the first 5000 pixels encountered in sample.tif where pixels have a value equal to 1. Write output to point vector file extracted.sqlite.
 
 
diff --git a/src/algorithms/Filter.cc b/src/algorithms/Filter.cc
index 58080bd..ee48822 100644
--- a/src/algorithms/Filter.cc
+++ b/src/algorithms/Filter.cc
@@ -338,10 +338,14 @@ void filter::Filter::stat(const ImgReaderGdal& input, ImgWriterGdal& output, con
   double progress=0;
   pfnProgress(progress,pszMessage,pProgressArg);
   for(int y=0;y<input.nrOfRow();++y){
+    if((y+1+down/2)%down)
+      continue;
     for(int iband=0;iband<input.nrOfBand();++iband)
       input.readData(lineInput[iband],GDT_Float64,y,iband);
     vector<double> pixelInput(input.nrOfBand());
     for(int x=0;x<input.nrOfCol();++x){
+      if((x+1+down/2)%down)
+	continue;
       pixelInput=lineInput.selectCol(x);
       switch(getFilterType(method)){
       case(filter::median):
@@ -354,11 +358,14 @@ void filter::Filter::stat(const ImgReaderGdal& input, ImgWriterGdal& output, con
 	lineOutput[(x-offset+down-1)/down]=stat.mymax(pixelInput);
 	break;
       case(filter::sum):
-	lineOutput[(x-offset+down-1)/down]=sqrt(stat.sum(pixelInput));
+	lineOutput[(x-offset+down-1)/down]=stat.sum(pixelInput);
 	break;
       case(filter::var):
 	lineOutput[(x-offset+down-1)/down]=stat.var(pixelInput);
 	break;
+      case(filter::stdev):
+	lineOutput[(x-offset+down-1)/down]=sqrt(stat.var(pixelInput));
+	break;
       case(filter::mean):
 	lineOutput[(x-offset+down-1)/down]=stat.mean(pixelInput);
 	break;
@@ -369,10 +376,10 @@ void filter::Filter::stat(const ImgReaderGdal& input, ImgWriterGdal& output, con
       }
     }
     try{
-      output.writeData(lineOutput,GDT_Float64,y);
+      output.writeData(lineOutput,GDT_Float64,y/down);
     }
     catch(string errorstring){
-      cerr << errorstring << "in line " << y << endl;
+      cerr << errorstring << "in line " << y/down << endl;
     }
     progress=(1.0+y)/output.nrOfRow();
     pfnProgress(progress,pszMessage,pProgressArg);

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