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 48f0d4284676f242fc8364a451ca65008c165049 Author: Pieter Kempeneers <kempe...@gmail.com> Date: Thu Dec 26 23:45:09 2013 +0100 moved readDataImageShape to ImgReaderOgr.h --- src/apps/Makefile.am | 8 +- src/apps/pkclassify_nn.cc | 7 +- src/apps/pkclassify_nn.h | 195 --------------------------------------- src/apps/pkclassify_svm.cc | 7 +- src/apps/pkfs_nn.cc | 21 +++-- src/apps/pkfs_svm.cc | 23 +++-- src/apps/pkopt_svm.cc | 24 +++-- src/imageclasses/ImgReaderOgr.cc | 144 +++++++++++++++++++++++++++++ src/imageclasses/ImgReaderOgr.h | 13 +++ 9 files changed, 216 insertions(+), 226 deletions(-) diff --git a/src/apps/Makefile.am b/src/apps/Makefile.am index eeafcff..16e7ed1 100644 --- a/src/apps/Makefile.am +++ b/src/apps/Makefile.am @@ -13,7 +13,7 @@ bin_PROGRAMS = pkinfo pkcrop pkreclass pkgetmask pksetmask pkcreatect pkdumpimg if USE_FANN bin_PROGRAMS += pkclassify_nn pkfs_nn pkregression_nn -pkclassify_nn_SOURCES = $(top_srcdir)/src/algorithms/myfann_cpp.h pkclassify_nn.h pkclassify_nn.cc +pkclassify_nn_SOURCES = $(top_srcdir)/src/algorithms/myfann_cpp.h pkclassify_nn.cc pkclassify_nn_CXXFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/base $(FANN_CFLAGS) -I$(top_srcdir)/src/algorithms $(AM_CXXFLAGS) pkclassify_nn_LDADD = $(FANN_LIBS) $(FANN_CFLAGS) $(AM_LDFLAGS) pkfs_nn_SOURCES = $(top_srcdir)/src/algorithms/myfann_cpp.h pkfs_nn.cc @@ -31,7 +31,7 @@ pklas2img_LDADD = $(top_srcdir)/src/lasclasses/liblasClasses.la -llas $(AM_LDFLA endif if USE_NLOPT bin_PROGRAMS += pkopt_svm -pkopt_svm_SOURCES = $(top_srcdir)/src/algorithms/OptFactory.h pkclassify_nn.h pkopt_svm.cc +pkopt_svm_SOURCES = $(top_srcdir)/src/algorithms/OptFactory.h pkopt_svm.cc pkopt_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) -lnlopt endif # list of sources for the binaries @@ -62,8 +62,8 @@ pkmosaic_SOURCES = pkmosaic.cc pkndvi_SOURCES = pkndvi.cc pkpolygonize_SOURCES = pkpolygonize.cc pkdiff_SOURCES = pkdiff.cc -pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkclassify_svm.cc -pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_nn.h pkfs_svm.cc +pkclassify_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkclassify_svm.cc +pkfs_svm_SOURCES = $(top_srcdir)/src/algorithms/svm.h $(top_srcdir)/src/algorithms/svm.cpp pkfs_svm.cc pkfs_svm_LDADD = $(GSL_LIBS) $(AM_LDFLAGS) pkascii2img_SOURCES = pkascii2img.cc pkascii2ogr_SOURCES = pkascii2ogr.cc diff --git a/src/apps/pkclassify_nn.cc b/src/apps/pkclassify_nn.cc index 7c2ec41..7134308 100644 --- a/src/apps/pkclassify_nn.cc +++ b/src/apps/pkclassify_nn.cc @@ -17,7 +17,6 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with pktools. If not, see <http://www.gnu.org/licenses/>. ***********************************************************************/ -#include "pkclassify_nn.h" #include <vector> #include <map> #include <algorithm> @@ -203,14 +202,16 @@ int main(int argc, char *argv[]) if(verbose_opt[0]>=1) cout << "reading imageShape file " << training_opt[0] << endl; try{ + ImgReaderOgr trainingReaderBag(training_opt[ibag]); if(band_opt.size()) - totalSamples=readDataImageShape(training_opt[ibag],trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); + totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); else - totalSamples=readDataImageShape(training_opt[ibag],trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); if(trainingMap.size()<2){ string errorstring="Error: could not read at least two classes from training file"; throw(errorstring); } + trainingReaderBag.close(); } catch(string error){ cerr << error << std::endl; diff --git a/src/apps/pkclassify_nn.h b/src/apps/pkclassify_nn.h deleted file mode 100644 index 28ed4ec..0000000 --- a/src/apps/pkclassify_nn.h +++ /dev/null @@ -1,195 +0,0 @@ -/********************************************************************** -pkclassify_nn.h: classify raster image using Artificial Neural Network -Copyright (C) 2008-2012 Pieter Kempeneers - -This file is part of pktools - -pktools is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -pktools is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with pktools. If not, see <http://www.gnu.org/licenses/>. -***********************************************************************/ -#include <map> -#include "imageclasses/ImgReaderOgr.h" -#include "base/Vector2d.h" - -#ifndef _PKCLASSIFY_NN_H_ -#define _PKCLASSIFY_NN_H_ - -using namespace std; - -template<typename T> unsigned int readDataImageShape(const string &filename, - map<string,Vector2d<T> > &mapPixels, //[classNr][pixelNr][bandNr], - vector<string>& fields, - const vector<short>& bands, - const string& label, - int verbose=false); - -template<typename T> unsigned int readDataImageShape(const string &filename, - map<string,Vector2d<T> > &mapPixels, //[classNr][pixelNr][bandNr], - vector<string>& fields, - double start, - double end, - const string& label, - int verbose=false); - -template<typename T> unsigned int readDataImageShape(const string &filename, - map<string,Vector2d<T> > &mapPixels, //[classNr][pixelNr][bandNr], - vector<string>& fields, - const vector<short>& bands, - const string& label, - int verbose) -{ - mapPixels.clear(); - int nsample=0; - int totalSamples=0; - int nband=0; - if(verbose) - cout << "reading shape file " << filename << endl; - ImgReaderOgr imgReaderShape; - try{ - imgReaderShape.open(filename); - //only retain bands in fields - imgReaderShape.getFields(fields); - vector<string>::iterator fit=fields.begin(); - if(verbose>1) - cout << "reading fields: "; - while(fit!=fields.end()){ - if(verbose) - cout << *fit << " "; - // size_t pos=(*fit).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ "); - if((*fit).substr(0,1)=="B"){ - if((*fit).substr(1).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ ")!=string::npos){ - int theBand=atoi((*fit).substr(1).c_str()); - if(bands.size()){ - bool validBand=false; - for(int iband=0;iband<bands.size();++iband){ - if(theBand==bands[iband]) - validBand=true; - } - if(validBand) - ++fit; - else - fields.erase(fit); - } - else - ++fit; - } - else if((*fit)=="B" || (*fit)=="Band")//B is only band - ++fit; - } - else - fields.erase(fit); - } - if(verbose) - cout << endl; - if(verbose){ - cout << "fields:"; - for(vector<string>::iterator fit=fields.begin();fit!=fields.end();++fit) - cout << " " << *fit; - cout << endl; - } - if(!nband){ - if(verbose) - cout << "reading data" << endl; - nband=imgReaderShape.readData(mapPixels,OFTReal,fields,label,0,true,verbose==2); - - } - else - assert(nband==imgReaderShape.readData(mapPixels,OFTReal,fields,label,0,true,false)); - } - catch(string e){ - ostringstream estr; - estr << e << " " << filename; - throw(estr.str()); - } - nsample=imgReaderShape.getFeatureCount(); - totalSamples+=nsample; - if(verbose) - cout << ": " << nsample << " samples read with " << nband << " bands" << endl; - imgReaderShape.close(); - if(verbose) - cout << "total number of samples read " << totalSamples << endl; - return totalSamples; -} - -template<typename T> unsigned int readDataImageShape(const string &filename, - map<string,Vector2d<T> > &mapPixels, //[classNr][pixelNr][bandNr], - vector<string>& fields, - double start, - double end, - const string& label, - int verbose) -{ - mapPixels.clear(); - int nsample=0; - int totalSamples=0; - int nband=0; - if(verbose) - cout << "reading shape file " << filename << endl; - ImgReaderOgr imgReaderShape; - try{ - imgReaderShape.open(filename); - //only retain bands in fields - imgReaderShape.getFields(fields); - vector<string>::iterator fit=fields.begin(); - if(verbose) - cout << "reading fields: "; - while(fit!=fields.end()){ - if(verbose) - cout << *fit << " "; - // size_t pos=(*fit).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ "); - if((*fit).substr(0,1)=="B"){ - if((*fit).substr(1).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ ")!=string::npos){ - int iband=atoi((*fit).substr(1).c_str()); - if((start||end)&&(iband<start||iband>end)) - fields.erase(fit); - else - ++fit; - } - else if(*fit=="B" || *fit=="Band") - ++fit; - } - else - fields.erase(fit); - } - if(verbose) - cout << endl; - if(verbose){ - cout << "fields:"; - for(vector<string>::iterator fit=fields.begin();fit!=fields.end();++fit) - cout << " " << *fit; - cout << endl; - } - if(!nband){ - if(verbose) - cout << "reading data" << endl; - nband=imgReaderShape.readData(mapPixels,OFTReal,fields,label,0,true,verbose==2); - - } - else - assert(nband==imgReaderShape.readData(mapPixels,OFTReal,fields,label,0,true,false)); - } - catch(string e){ - ostringstream estr; - estr << e << " " << filename; - throw(estr.str()); - } - nsample=imgReaderShape.getFeatureCount(); - totalSamples+=nsample; - if(verbose) - cout << ": " << nsample << " samples read with " << nband << " bands" << endl; - imgReaderShape.close(); - if(verbose) - cout << "total number of samples read " << totalSamples << endl; - return totalSamples; -} -#endif //_PKCLASSIFY_NN_H_ diff --git a/src/apps/pkclassify_svm.cc b/src/apps/pkclassify_svm.cc index d505cd1..9a0426e 100644 --- a/src/apps/pkclassify_svm.cc +++ b/src/apps/pkclassify_svm.cc @@ -28,7 +28,6 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. #include "base/PosValue.h" #include "algorithms/ConfusionMatrix.h" #include "algorithms/svm.h" -#include "pkclassify_nn.h" #ifdef HAVE_CONFIG_H #include <config.h> @@ -245,14 +244,16 @@ int main(int argc, char *argv[]) if(verbose_opt[0]>=1) std::cout << "reading imageShape file " << training_opt[0] << std::endl; try{ + ImgReaderOgr trainingReaderBag(training_opt[ibag]); if(band_opt.size()) - totalSamples=readDataImageShape(training_opt[ibag],trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); + totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); else - totalSamples=readDataImageShape(training_opt[ibag],trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + totalSamples=trainingReaderBag.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); if(trainingMap.size()<2){ string errorstring="Error: could not read at least two classes from training file"; throw(errorstring); } + trainingReaderBag.close(); } catch(string error){ cerr << error << std::endl; diff --git a/src/apps/pkfs_nn.cc b/src/apps/pkfs_nn.cc index 53928ff..eba12e4 100644 --- a/src/apps/pkfs_nn.cc +++ b/src/apps/pkfs_nn.cc @@ -30,7 +30,6 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. #include "algorithms/myfann_cpp.h" #include "algorithms/ConfusionMatrix.h" #include "algorithms/FeatureSelector.h" -#include "pkclassify_nn.h" #ifdef HAVE_CONFIG_H #include <config.h> @@ -317,15 +316,22 @@ int main(int argc, char *argv[]) if(verbose_opt[0]>=1) std::cout << "reading imageShape file " << training_opt[0] << std::endl; try{ + ImgReaderOgr trainingReader(training_opt[0]); if(band_opt.size()){ - totalSamples=readDataImageShape(training_opt[0],trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); - if(input_opt.size()) - totalTestSamples=readDataImageShape(input_opt[0],testMap,fields,band_opt,label_opt[0],verbose_opt[0]); + totalSamples=trainingReader.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); + if(input_opt.size()){ + ImgReaderOgr inputReader(input_opt[0]); + totalTestSamples=trainingReader.readDataImageShape(testMap,fields,band_opt,label_opt[0],verbose_opt[0]); + inputReader.close(); + } } else{ - totalSamples=readDataImageShape(training_opt[0],trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); - if(input_opt.size()) - totalTestSamples=readDataImageShape(input_opt[0],testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + totalSamples=trainingReader.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + if(input_opt.size()){ + ImgReaderOgr inputReader(input_opt[0]); + totalTestSamples=trainingReader.readDataImageShape(testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + inputReader.close(); + } } if(trainingMap.size()<2){ string errorstring="Error: could not read at least two classes from training file"; @@ -335,6 +341,7 @@ int main(int argc, char *argv[]) string errorstring="Error: could not read at least two classes from test input file"; throw(errorstring); } + trainingReader.close(); } catch(string error){ cerr << error << std::endl; diff --git a/src/apps/pkfs_svm.cc b/src/apps/pkfs_svm.cc index 1b12dd0..bc839cf 100644 --- a/src/apps/pkfs_svm.cc +++ b/src/apps/pkfs_svm.cc @@ -25,7 +25,7 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. #include "algorithms/ConfusionMatrix.h" #include "algorithms/FeatureSelector.h" #include "algorithms/svm.h" -#include "pkclassify_nn.h" +#include "imageclasses/ImgReaderOgr.h" #ifdef HAVE_CONFIG_H #include <config.h> @@ -38,6 +38,7 @@ namespace svm{ enum SelectorValue { NA=0, SFFS=1, SFS=2, SBS=3, BFS=4 }; +using namespace std; #define Malloc(type,n) (type *)malloc((n)*sizeof(type)) @@ -340,15 +341,22 @@ int main(int argc, char *argv[]) if(verbose_opt[0]>=1) std::cout << "reading training file " << training_opt[0] << std::endl; try{ + ImgReaderOgr trainingReader(training_opt[0]); if(band_opt.size()){ - totalSamples=readDataImageShape(training_opt[0],trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); - if(input_opt.size()) - totalTestSamples=readDataImageShape(input_opt[0],testMap,fields,band_opt,label_opt[0],verbose_opt[0]); + totalSamples=trainingReader.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); + if(input_opt.size()){ + ImgReaderOgr inputReader(input_opt[0]); + totalTestSamples=inputReader.readDataImageShape(testMap,fields,band_opt,label_opt[0],verbose_opt[0]); + inputReader.close(); + } } else{ - totalSamples=readDataImageShape(training_opt[0],trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); - if(input_opt.size()) - totalTestSamples=readDataImageShape(input_opt[0],testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + totalSamples=trainingReader.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + if(input_opt.size()){ + ImgReaderOgr inputReader(input_opt[0]); + totalTestSamples=inputReader.readDataImageShape(testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + inputReader.close(); + } } if(trainingMap.size()<2){ string errorstring="Error: could not read at least two classes from training input file"; @@ -358,6 +366,7 @@ int main(int argc, char *argv[]) string errorstring="Error: could not read at least two classes from test input file"; throw(errorstring); } + trainingReader.close(); } catch(string error){ cerr << error << std::endl; diff --git a/src/apps/pkopt_svm.cc b/src/apps/pkopt_svm.cc index d8b6f47..0a8ff6b 100644 --- a/src/apps/pkopt_svm.cc +++ b/src/apps/pkopt_svm.cc @@ -29,7 +29,7 @@ along with pktools. If not, see <http://www.gnu.org/licenses/>. #include "algorithms/FeatureSelector.h" #include "algorithms/OptFactory.h" #include "algorithms/svm.h" -#include "pkclassify_nn.h" +#include "imageclasses/ImgReaderOgr.h" #ifdef HAVE_CONFIG_H #include <config.h> @@ -40,6 +40,8 @@ namespace svm{ enum KERNEL_TYPE {linear=0,polynomial=1,radial=2,sigmoid=3}; } +using namespace std; + #define Malloc(type,n) (type *)malloc((n)*sizeof(type)) //declare objective function double objFunction(const std::vector<double> &x, std::vector<double> &grad, void *my_func_data); @@ -349,15 +351,23 @@ int main(int argc, char *argv[]) if(verbose_opt[0]>=1) std::cout << "reading training file " << training_opt[0] << std::endl; try{ + ImgReaderOgr trainingReader(training_opt[0]); if(band_opt.size()){ - totalSamples=readDataImageShape(training_opt[0],trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); - if(input_opt.size()) - totalTestSamples=readDataImageShape(input_opt[0],testMap,fields,band_opt,label_opt[0],verbose_opt[0]); + totalSamples=trainingReader.readDataImageShape(trainingMap,fields,band_opt,label_opt[0],verbose_opt[0]); + if(input_opt.size()){ + ImgReaderOgr inputReader(input_opt[0]); + totalTestSamples=inputReader.readDataImageShape(testMap,fields,band_opt,label_opt[0],verbose_opt[0]); + inputReader.close(); + } } else{ - totalSamples=readDataImageShape(training_opt[0],trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); - if(input_opt.size()) - totalTestSamples=readDataImageShape(input_opt[0],testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + totalSamples=trainingReader.readDataImageShape(trainingMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + if(input_opt.size()){ + ImgReaderOgr inputReader(input_opt[0]); + totalTestSamples=inputReader.readDataImageShape(testMap,fields,start_opt[0],end_opt[0],label_opt[0],verbose_opt[0]); + inputReader.close(); + } + trainingReader.close(); } if(trainingMap.size()<2){ string errorstring="Error: could not read at least two classes from training input file"; diff --git a/src/imageclasses/ImgReaderOgr.cc b/src/imageclasses/ImgReaderOgr.cc index fe172ba..ff901cb 100644 --- a/src/imageclasses/ImgReaderOgr.cc +++ b/src/imageclasses/ImgReaderOgr.cc @@ -216,3 +216,147 @@ std::ostream& operator<<(std::ostream& theOstream, ImgReaderOgr& theImageReader) // imgWriter.close(); // } // } + +unsigned int ImgReaderOgr::readDataImageShape(std::map<std::string,Vector2d<float> > &mapPixels, //[classNr][pixelNr][bandNr], + std::vector<std::string>& fields, + const std::vector<short>& bands, + const std::string& label, + int verbose) +{ + mapPixels.clear(); + int nsample=0; + int totalSamples=0; + int nband=0; + if(verbose) + std::cout << "reading shape file " << m_filename << std::endl; + try{ + //only retain bands in fields + getFields(fields); + std::vector<std::string>::iterator fit=fields.begin(); + if(verbose>1) + std::cout << "reading fields: "; + while(fit!=fields.end()){ + if(verbose) + std::cout << *fit << " "; + // size_t pos=(*fit).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ "); + if((*fit).substr(0,1)=="B"){ + if((*fit).substr(1).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ ")!=std::string::npos){ + int theBand=atoi((*fit).substr(1).c_str()); + if(bands.size()){ + bool validBand=false; + for(int iband=0;iband<bands.size();++iband){ + if(theBand==bands[iband]) + validBand=true; + } + if(validBand) + ++fit; + else + fields.erase(fit); + } + else + ++fit; + } + else if((*fit)=="B" || (*fit)=="Band")//B is only band + ++fit; + } + else + fields.erase(fit); + } + if(verbose) + std::cout << std::endl; + if(verbose){ + std::cout << "fields:"; + for(std::vector<std::string>::iterator fit=fields.begin();fit!=fields.end();++fit) + std::cout << " " << *fit; + std::cout << std::endl; + } + if(!nband){ + if(verbose) + std::cout << "reading data" << std::endl; + nband=readData(mapPixels,OFTReal,fields,label,0,true,verbose==2); + + } + else + assert(nband==readData(mapPixels,OFTReal,fields,label,0,true,false)); + } + catch(std::string e){ + std::ostringstream estr; + estr << e << " " << m_filename; + throw(estr.str()); + } + nsample=getFeatureCount(); + totalSamples+=nsample; + if(verbose) + std::cout << ": " << nsample << " samples read with " << nband << " bands" << std::endl; + if(verbose) + std::cout << "total number of samples read " << totalSamples << std::endl; + return totalSamples; +} + +unsigned int ImgReaderOgr::readDataImageShape(std::map<std::string,Vector2d<float> > &mapPixels, //[classNr][pixelNr][bandNr], + std::vector<std::string>& fields, + double start, + double end, + const std::string& label, + int verbose) +{ + mapPixels.clear(); + int nsample=0; + int totalSamples=0; + int nband=0; + if(verbose) + std::cout << "reading shape file " << m_filename << std::endl; + try{ + //only retain bands in fields + getFields(fields); + std::vector<std::string>::iterator fit=fields.begin(); + if(verbose) + std::cout << "reading fields: "; + while(fit!=fields.end()){ + if(verbose) + std::cout << *fit << " "; + // size_t pos=(*fit).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ "); + if((*fit).substr(0,1)=="B"){ + if((*fit).substr(1).find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ ")!=std::string::npos){ + int iband=atoi((*fit).substr(1).c_str()); + if((start||end)&&(iband<start||iband>end)) + fields.erase(fit); + else + ++fit; + } + else if(*fit=="B" || *fit=="Band") + ++fit; + } + else + fields.erase(fit); + } + if(verbose) + std::cout << std::endl; + if(verbose){ + std::cout << "fields:"; + for(std::vector<std::string>::iterator fit=fields.begin();fit!=fields.end();++fit) + std::cout << " " << *fit; + std::cout << std::endl; + } + if(!nband){ + if(verbose) + std::cout << "reading data" << std::endl; + nband=readData(mapPixels,OFTReal,fields,label,0,true,verbose==2); + + } + else + assert(nband==readData(mapPixels,OFTReal,fields,label,0,true,false)); + } + catch(std::string e){ + std::ostringstream estr; + estr << e << " " << m_filename; + throw(estr.str()); + } + nsample=getFeatureCount(); + totalSamples+=nsample; + if(verbose) + std::cout << ": " << nsample << " samples read with " << nband << " bands" << std::endl; + if(verbose) + std::cout << "total number of samples read " << totalSamples << std::endl; + return totalSamples; +} diff --git a/src/imageclasses/ImgReaderOgr.h b/src/imageclasses/ImgReaderOgr.h index 27890fd..171bcfb 100644 --- a/src/imageclasses/ImgReaderOgr.h +++ b/src/imageclasses/ImgReaderOgr.h @@ -48,6 +48,19 @@ public: template <typename T> int readData(Vector2d<T>& data, const OGRFieldType& fieldType, std::vector<std::string>& fields, int layer=0, bool pos=false, bool verbose=false);//default layer 0 and no pos information in data template <typename T> int readData(std::map<int,Vector2d<T> >& data, const OGRFieldType& fieldType, std::vector<std::string>& fields, const std::string& label, int layer=0, bool pos=false, bool verbose=false);//default layer 0 and no pos information in data template <typename T> int readData(std::map<std::string,Vector2d<T> >& data, const OGRFieldType& fieldType, std::vector<std::string>& fields, const std::string& label, int layer=0, bool pos=false, bool verbose=false);//default layer 0 and no pos information in data + unsigned int readDataImageShape(std::map<std::string,Vector2d<float> > &mapPixels, //[classNr][pixelNr][bandNr], + std::vector<std::string>& fields, + const std::vector<short>& bands, + const std::string& label, + int verbose=false); + + unsigned int readDataImageShape(std::map<std::string,Vector2d<float> > &mapPixels, //[classNr][pixelNr][bandNr], + std::vector<std::string>& fields, + double start, + double end, + const std::string& label, + int verbose=false); + void shape2ascii(std::ostream& theOstream, const std::string& pointname, int layer=0, bool verbose=false); unsigned long int getFeatureCount(int layer=0) const; int getFieldCount(int layer=0) const; -- 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