[pktools] 182/375: coding in Enschede, down in pkfilter

Bas Couwenberg sebastic at xs4all.nl
Wed Dec 3 21:54:12 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 df97b5a55bd2ba6283e7852733388598d05749b8
Author: user <user at ubuntu.(none)>
Date:   Sat Jan 25 03:52:45 2014 -0500

    coding in Enschede, down in pkfilter
---
 ChangeLog                  |  7 +++++++
 configure.ac               |  2 +-
 src/algorithms/Filter2d.cc |  1 +
 src/apps/pkextract.cc      | 48 +++++++++++++++++++++++++++++-----------------
 src/apps/pkfilter.cc       |  7 ++++++-
 5 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 22b5b0f..72fd89f 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -244,3 +244,10 @@ version 2.5
 	changed some option names
  - pkfilterdem
 	new utility (moved from pklas2ig)
+
+version 2.5.1
+ - pkextract
+	support sum rule
+ - pkfilter
+	support of density filter
+	debug down option (forgot to adapt xres and yres)
diff --git a/configure.ac b/configure.ac
index 5d86766..b9f6825 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([pktools], [2.5], [kempenep at gmail.com])
+AC_INIT([pktools], [2.5.1], [kempenep at gmail.com])
 #AM_INIT_AUTOMAKE([-Wall -Werror foreign])
 AM_INIT_AUTOMAKE([-Wall -Wno-extra-portability foreign])
 AC_CONFIG_MACRO_DIR([m4])
diff --git a/src/algorithms/Filter2d.cc b/src/algorithms/Filter2d.cc
index 7171c72..5ca73a2 100644
--- a/src/algorithms/Filter2d.cc
+++ b/src/algorithms/Filter2d.cc
@@ -656,6 +656,7 @@ void filter2d::Filter2d::doit(const ImgReaderGdal& input, ImgWriterGdal& output,
       }
     }
   }
+  pfnProgress(1.0,pszMessage,pProgressArg);
 }
 
 void filter2d::Filter2d::mrf(const ImgReaderGdal& input, ImgWriterGdal& output, int dimX, int dimY, double beta, bool eightConnectivity, short down, bool verbose){
diff --git a/src/apps/pkextract.cc b/src/apps/pkextract.cc
index eaac497..8b61bbd 100644
--- a/src/apps/pkextract.cc
+++ b/src/apps/pkextract.cc
@@ -34,7 +34,7 @@ along with pktools.  If not, see <http://www.gnu.org/licenses/>.
 #endif
 
 namespace rule{
-  enum RULE_TYPE {point=0, mean=1, proportion=2, custom=3, minimum=4, maximum=5, maxvote=6, centroid=7};
+  enum RULE_TYPE {point=0, mean=1, proportion=2, custom=3, minimum=4, maximum=5, maxvote=6, centroid=7, sum=8};
 }
 
 using namespace std;
@@ -64,7 +64,7 @@ int main(int argc, char *argv[])
   Optionpk<string> label_opt("cn", "cname", "name of the class label in the output vector file", "label");
   Optionpk<bool> polygon_opt("polygon", "polygon", "create OGRPolygon as geometry instead of OGRPoint. Only if sample option is also of polygon type.", false);
   Optionpk<int> band_opt("b", "band", "band index to crop. Use -1 to use all bands)", -1);
-  Optionpk<string> rule_opt("r", "rule", "rule how to report image information per feature. point (value at each point or at centroid if polygon), centroid, mean (of polygon), proportion, minimum (of polygon), maximum (of polygon), maxvote.", "point");
+  Optionpk<string> rule_opt("r", "rule", "rule how to report image information per feature. point (value at each point or at centroid if polygon), centroid, mean (of polygon), proportion, minimum (of polygon), maximum (of polygon), maxvote, sum.", "point");
   Optionpk<short> verbose_opt("v", "verbose", "verbose mode if > 0", 0);
 
   bool doProcess;//stop process when program was invoked with help option (-h --help)
@@ -107,11 +107,14 @@ int main(int argc, char *argv[])
   std::map<std::string, rule::RULE_TYPE> ruleMap;
   //initialize ruleMap
   ruleMap["point"]=rule::point;
-  ruleMap["mean"]=rule::mean;
   ruleMap["centroid"]=rule::centroid;
+  ruleMap["mean"]=rule::mean;
   ruleMap["proportion"]=rule::proportion;
+  ruleMap["minimum"]=rule::minimum;
+  ruleMap["maximum"]=rule::maximum;
   ruleMap["custom"]=rule::custom;
   ruleMap["maxvote"]=rule::maxvote;
+  ruleMap["sum"]=rule::sum;
 
   if(verbose_opt[0])
     std::cout << class_opt << std::endl;
@@ -831,6 +834,7 @@ int main(int argc, char *argv[])
       break;
       case(rule::point):
       case(rule::mean):
+      case(rule::sum):
       case(rule::centroid):
       default:{
 	for(int windowJ=-theDim/2;windowJ<(theDim+1)/2;++windowJ){
@@ -1218,7 +1222,7 @@ int main(int argc, char *argv[])
 	      else
 		writePolygonFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());
 	    }
-	    else if(ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid){
+	    else if(ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid||ruleMap[rule_opt[0]]==rule::sum){
 	      if(writeTest)
 		writeCentroidFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());
 	      else
@@ -1229,6 +1233,7 @@ int main(int argc, char *argv[])
 	    switch(ruleMap[rule_opt[0]]){
 	    case(rule::point):
 	    case(rule::mean):
+	    case(rule::sum):
 	    case(rule::centroid):
 	    default:
 	      polyValues.resize(nband);
@@ -1345,7 +1350,7 @@ int main(int argc, char *argv[])
 		  OGRFeature *writePointFeature;
 		  if(!polygon_opt[0]){
 		    //create feature
-		    if(ruleMap[rule_opt[0]]!=rule::mean&&ruleMap[rule_opt[0]]!=rule::centroid){//do not create in case of mean value (only create point at centroid
+		    if(ruleMap[rule_opt[0]]!=rule::mean&&ruleMap[rule_opt[0]]!=rule::centroid&&ruleMap[rule_opt[0]]!=rule::sum){//do not create in case of mean, sum or centroid (only create point at centroid)
 		      if(writeTest)
 			writePointFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());
 		      else
@@ -1370,7 +1375,7 @@ int main(int argc, char *argv[])
 		    imgReader.readData(value,GDT_Float64,i,j,theBand);
 		    if(verbose_opt[0]>1)
 		      std::cout << ": " << value << std::endl;
-		    if(polygon_opt[0]||ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid){
+		    if(polygon_opt[0]||ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid||ruleMap[rule_opt[0]]==rule::sum){
 		      int iclass=0;
 		      switch(ruleMap[rule_opt[0]]){
 		      case(rule::point)://in centroid if polygon_opt==true or all values as points if polygon_opt!=true
@@ -1378,6 +1383,7 @@ int main(int argc, char *argv[])
 		      default:
 			polyValues[iband]=value;
 		      break;
+		      case(rule::sum):
 		      case(rule::mean)://mean as polygon if polygon_opt==true or as point in centroid if polygon_opt!=true
 			polyValues[iband]+=value;
 			break;
@@ -1436,7 +1442,7 @@ int main(int argc, char *argv[])
 		    }
 		  }
 		  if(!polygon_opt[0]){
-		    if(ruleMap[rule_opt[0]]!=rule::mean&&ruleMap[rule_opt[0]]!=rule::centroid){//do not create in case of mean value (only at centroid)
+		    if(ruleMap[rule_opt[0]]!=rule::mean&&ruleMap[rule_opt[0]]!=rule::centroid&&ruleMap[rule_opt[0]]!=rule::sum){//do not create in case of mean value (only at centroid)
 		      //write feature
 		      if(verbose_opt[0]>1)
 			std::cout << "creating point feature" << std::endl;
@@ -1463,7 +1469,7 @@ int main(int argc, char *argv[])
 		}
 	      }
 	    }
-	    if(polygon_opt[0]||ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid){
+	    if(polygon_opt[0]||ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid||ruleMap[rule_opt[0]]==rule::sum){
 	      //do not create if no points found within polygon
 	      if(!nPointPolygon)
 		continue;
@@ -1568,6 +1574,7 @@ int main(int argc, char *argv[])
 		break;
 	      }
 	      case(rule::mean):
+	      case(rule::sum):
 	      case(rule::centroid):{//mean value (written to centroid of polygon if line is not set)
 		if(verbose_opt[0])
 		  std::cout << "number of points in polygon: " << nPointPolygon << std::endl;
@@ -1577,7 +1584,8 @@ int main(int argc, char *argv[])
 		for(int index=0;index<polyValues.size();++index){
 		  double theValue=polyValues[index];
 		  // ostringstream fs;
-		  theValue/=nPointPolygon;
+		  if(ruleMap[rule_opt[0]]==rule::mean)
+		    theValue/=nPointPolygon;
 		  int theBand=(band_opt[0]<0)?index:band_opt[index];
 		  // if(nband==1)
 		  //   fs << fieldname_opt[0];
@@ -1827,7 +1835,7 @@ int main(int argc, char *argv[])
 	      else
 		writePolygonFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());
 	    }
-	    else if(ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid){
+	    else if(ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid||ruleMap[rule_opt[0]]==rule::sum){
 	      if(writeTest)
 		writeCentroidFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());
 	      else
@@ -1838,6 +1846,7 @@ int main(int argc, char *argv[])
 	    switch(ruleMap[rule_opt[0]]){
 	    case(rule::point):
 	    case(rule::mean):
+	    case(rule::sum):
 	    case(rule::centroid):
 	    default:
 	      polyValues.resize(nband);
@@ -1954,7 +1963,7 @@ int main(int argc, char *argv[])
 		  OGRFeature *writePointFeature;
 		  if(!polygon_opt[0]){
 		    //create feature
-		    if(ruleMap[rule_opt[0]]!=rule::mean&&ruleMap[rule_opt[0]]!=rule::centroid){//do not create in case of mean value (only create point at centroid)
+		    if(ruleMap[rule_opt[0]]!=rule::mean&&ruleMap[rule_opt[0]]!=rule::centroid&&ruleMap[rule_opt[0]]!=rule::sum){//do not create in case of mean or sum (only create point at centroid)
 		      if(writeTest)
 			writePointFeature = OGRFeature::CreateFeature(writeTestLayer->GetLayerDefn());
 		      else
@@ -1979,7 +1988,7 @@ int main(int argc, char *argv[])
 		    imgReader.readData(value,GDT_Float64,i,j,theBand);
 		    if(verbose_opt[0]>1)
 		      std::cout << ": " << value << std::endl;
-		    if(polygon_opt[0]||ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid){
+		    if(polygon_opt[0]||ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid||ruleMap[rule_opt[0]]==rule::sum){
 		      int iclass=0;
 		      switch(ruleMap[rule_opt[0]]){
 		      case(rule::point)://in centroid if polygon_opt==true or all values as points if polygon_opt!=true
@@ -1987,7 +1996,8 @@ int main(int argc, char *argv[])
 		      default:
 			polyValues[iband]=value;
 		      break;
-		      case(rule::mean)://mean as polygon if polygon_opt==true or as point in centroid if polygon_opt!=true
+		      case(rule::sum):
+		      case(rule::mean)://mean or sum polygon if polygon_opt==true or as point in centroid if polygon_opt!=true
 			polyValues[iband]+=value;
 			break;
 		      case(rule::proportion):
@@ -2045,7 +2055,7 @@ int main(int argc, char *argv[])
 		    }
 		  }
 		  if(!polygon_opt[0]){
-		    if(ruleMap[rule_opt[0]]!=rule::mean&&ruleMap[rule_opt[0]]!=rule::centroid){//do not create in case of mean value (only at centroid)
+		    if(ruleMap[rule_opt[0]]!=rule::mean&&ruleMap[rule_opt[0]]!=rule::centroid&&ruleMap[rule_opt[0]]!=rule::sum){//do not create in case of mean value (only at centroid)
 		      //write feature
 		      if(verbose_opt[0]>1)
 			std::cout << "creating point feature" << std::endl;
@@ -2075,7 +2085,7 @@ int main(int argc, char *argv[])
 	    //test
 	    if(!validFeature)
 	      continue;
-	    if(polygon_opt[0]||ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid){
+	    if(polygon_opt[0]||ruleMap[rule_opt[0]]==rule::mean||ruleMap[rule_opt[0]]==rule::centroid||ruleMap[rule_opt[0]]==rule::sum){
 	      //add ring to polygon
 	      if(polygon_opt[0]){
 		writePolygon.addRing(&writeRing);
@@ -2173,7 +2183,8 @@ int main(int argc, char *argv[])
 		break;
 	      }//case 0 and default
 	      case(rule::mean):
-	      case(rule::centroid):{//mean value (written to centroid of polygon if line is not set
+	      case(rule::sum):
+	      case(rule::centroid):{//mean value (written to centroid of polygon if line is not set)
 		if(verbose_opt[0])
 		  std::cout << "number of points in polygon: " << nPointPolygon << std::endl;
 		//test
@@ -2181,8 +2192,9 @@ int main(int argc, char *argv[])
 		  assert(nPointPolygon<=1);
 		for(int index=0;index<polyValues.size();++index){
 		  double theValue=polyValues[index];
-		  ostringstream fs;
-		  theValue/=nPointPolygon;
+		  // ostringstream fs;
+		  if(ruleMap[rule_opt[0]]==rule::mean)
+		    theValue/=nPointPolygon;
 		  int theBand=(band_opt[0]<0)?index:band_opt[index];
 		  // if(nband==1)
 		  //   fs << fieldname_opt[0];
diff --git a/src/apps/pkfilter.cc b/src/apps/pkfilter.cc
index 82666fb..6684631 100644
--- a/src/apps/pkfilter.cc
+++ b/src/apps/pkfilter.cc
@@ -198,6 +198,8 @@ int main(int argc,char **argv) {
   output.setProjection(input.getProjection());
   double gt[6];
   input.getGeoTransform(gt);
+  gt[1]*=down_opt[0];//dx
+  gt[5]*=down_opt[0];//dy
   output.setGeoTransform(gt);
   
   if(colorTable_opt.size()){
@@ -683,8 +685,11 @@ int main(int argc,char **argv) {
 	filter2d.dwtCut(input, output, wavelet_type_opt[0], family_opt[0], threshold_opt[0]);
       break;
     case(filter2d::threshold):
-      filter2d.setThresholds(threshold_opt);
+      filter2d.setThresholds(threshold_opt);//deliberate fall through
+    case(filter2d::density):
       filter2d.setClasses(class_opt);//deliberate fall through
+      if(verbose_opt[0])
+	std::cout << "classes set" << std::endl;
     default:
       filter2d.doit(input,output,method_opt[0],dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]);
       break;

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