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 90bff0e3382611a5cf183b91edc1b626643edd7a Author: Pieter Kempeneers <kempe...@gmail.com> Date: Sun Sep 21 14:11:40 2014 -0700 working on filter in spectral domain --- src/algorithms/Filter.cc | 7 ++--- src/algorithms/Filter.h | 82 +++++++++++++++++------------------------------- src/apps/pkfilter.cc | 6 ++-- 3 files changed, 35 insertions(+), 60 deletions(-) diff --git a/src/algorithms/Filter.cc b/src/algorithms/Filter.cc index ee48822..fd4124a 100644 --- a/src/algorithms/Filter.cc +++ b/src/algorithms/Filter.cc @@ -386,10 +386,10 @@ void filter::Filter::stat(const ImgReaderGdal& input, ImgWriterGdal& output, con } } -void filter::Filter::filter(const ImgReaderGdal& input, ImgWriterGdal& output, const std::string& method, int dim, short down, int offset) +void filter::Filter::filter(const ImgReaderGdal& input, ImgWriterGdal& output, const std::string& method, int dim) { Vector2d<double> lineInput(input.nrOfBand(),input.nrOfCol()); - Vector2d<double> lineOutput; + Vector2d<double> lineOutput(input.nrOfBand(),input.nrOfCol());; const char* pszMessage; void* pProgressArg=NULL; GDALProgressFunc pfnProgress=GDALTermProgress; @@ -402,8 +402,7 @@ void filter::Filter::filter(const ImgReaderGdal& input, ImgWriterGdal& output, c vector<double> pixelOutput; for(int x=0;x<input.nrOfCol();++x){ pixelInput=lineInput.selectCol(x); - filter(pixelInput,pixelOutput,method,dim,down,offset); - lineOutput.resize(pixelOutput.size(),input.nrOfCol()); + filter(pixelInput,pixelOutput,method,dim); for(int iband=0;iband<pixelOutput.size();++iband) lineOutput[iband][x]=pixelOutput[iband]; } diff --git a/src/algorithms/Filter.h b/src/algorithms/Filter.h index b8172e8..53be2b7 100644 --- a/src/algorithms/Filter.h +++ b/src/algorithms/Filter.h @@ -58,7 +58,7 @@ public: void pushClass(short theClass=1){m_class.push_back(theClass);}; void pushMask(short theMask=0){m_mask.push_back(theMask);}; template<class T> void filter(const std::vector<T>& input, std::vector<T>& output, int down=1, int offset=0); - template<class T> void filter(const std::vector<T>& input, std::vector<T>& output, const std::string& method, int dim, int down=1, int offset=0); + template<class T> void filter(const std::vector<T>& input, std::vector<T>& output, const std::string& method, int dim); template<class T> void smooth(const std::vector<T>& input, std::vector<T>& output, short dim, int down=1, int offset=0); template<class T> void filter(T* input, int inputSize, std::vector<T>& output, int down=1, int offset=0); template<class T> void smooth(T* input, int inputSize, std::vector<T>& output, short dim, int down=1, int offset=0); @@ -66,7 +66,7 @@ public: void morphology(const ImgReaderGdal& input, ImgWriterGdal& output, const std::string& method, int dim, short down=1, int offset=0, short verbose=0); void filter(const ImgReaderGdal& input, ImgWriterGdal& output, short down=1, int offset=0); void stat(const ImgReaderGdal& input, ImgWriterGdal& output, const std::string& method, short down=1, int offset=0); - void filter(const ImgReaderGdal& input, ImgWriterGdal& output, const std::string& method, int dim, short down=1, int offset=0); + void filter(const ImgReaderGdal& input, ImgWriterGdal& output, const std::string& method, int dim); void smooth(const ImgReaderGdal& input, ImgWriterGdal& output, short dim, short down=1, int offset=0); double getCentreWavelength(const std::vector<double> &wavelengthIn, const Vector2d<double>& srf, const std::string& interpolationType, double delta=1.0, bool verbose=false); template<class T> double applySrf(const std::vector<double> &wavelengthIn, const std::vector<T>& input, const Vector2d<double>& srf, const std::string& interpolationType, T& output, double delta=1.0, bool normalize=false, bool verbose=false); @@ -450,17 +450,17 @@ template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T } } - template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T>& output, const std::string& method, int dim, int down, int offset) + template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T>& output, const std::string& method, int dim) { bool verbose=false; assert(dim); - output.resize((input.size()-offset+down-1)/down); + output.resize(input.size()); int i=0; statfactory::StatFactory stat; std::vector<T> statBuffer; short binValue=0; //start: extend input with mirrored version of itself - for(i=offset;i<dim/2;++i){ + for(i=0;i<dim/2;++i){ binValue=0; for(int iclass=0;iclass<m_class.size();++iclass){ if(input[i]==m_class[iclass]){ @@ -490,44 +490,38 @@ template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T } } assert(statBuffer.size()==dim); - if((i-offset)%down){ - statBuffer.clear(); - continue; - } + /* if((i-offset)%down){ */ + /* statBuffer.clear(); */ + /* continue; */ + /* } */ switch(getFilterType(method)){ case(filter::median): - output[(i-offset+down-1)/down]=stat.median(statBuffer); + output[i]=stat.median(statBuffer); break; case(filter::min): - output[(i-offset+down-1)/down]=stat.mymin(statBuffer); + output[i]=stat.mymin(statBuffer); break; case(filter::max): - output[(i-offset+down-1)/down]=stat.mymax(statBuffer); + output[i]=stat.mymax(statBuffer); break; case(filter::sum): - output[(i-offset+down-1)/down]=sqrt(stat.sum(statBuffer)); + output[i]=sqrt(stat.sum(statBuffer)); break; case(filter::var): - output[(i-offset+down-1)/down]=stat.var(statBuffer); + output[i]=stat.var(statBuffer); break; case(filter::mean): - output[(i-offset+down-1)/down]=stat.mean(statBuffer); + output[i]=stat.mean(statBuffer); break; default: std::string errorString="method not supported"; throw(errorString); break; } - if(verbose){ - std::cout << "buffer: "; - for(int ibuf=0;ibuf<statBuffer.size();++ibuf) - std::cout << statBuffer[ibuf] << " "; - std::cout << "->" << output[(i-offset+down-1)/down] << std::endl; - } } //main statBuffer.clear(); - for(i=offset+dim/2;i<input.size()-dim/2;++i){ + for(i=dim/2;i<input.size()-dim/2;++i){ binValue=0; for(int t=0;t<dim;++t){ for(int iclass=0;iclass<m_class.size();++iclass){ @@ -542,40 +536,30 @@ template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T statBuffer.push_back(input[i-dim/2+t]); } assert(statBuffer.size()==dim); - if((i-offset)%down){ - statBuffer.clear(); - continue; - } switch(getFilterType(method)){ case(filter::median): - output[(i-offset+down-1)/down]=stat.median(statBuffer); + output[i]=stat.median(statBuffer); break; case(filter::min): - output[(i-offset+down-1)/down]=stat.mymin(statBuffer); + output[i]=stat.mymin(statBuffer); break; case(filter::max): - output[(i-offset+down-1)/down]=stat.mymax(statBuffer); + output[i]=stat.mymax(statBuffer); break; case(filter::sum): - output[(i-offset+down-1)/down]=sqrt(stat.sum(statBuffer)); + output[i]=sqrt(stat.sum(statBuffer)); break; case(filter::var): - output[(i-offset+down-1)/down]=stat.var(statBuffer); + output[i]=stat.var(statBuffer); break; case(filter::mean): - output[(i-offset+down-1)/down]=stat.mean(statBuffer); + output[i]=stat.mean(statBuffer); break; default: std::string errorString="method not supported"; throw(errorString); break; } - if(verbose){ - std::cout << "buffer: "; - for(int ibuf=0;ibuf<statBuffer.size();++ibuf) - std::cout << statBuffer[ibuf] << " "; - std::cout << "->" << output[(i-offset+down-1)/down] << std::endl; - } statBuffer.clear(); } //end: extend input with mirrored version of itself @@ -608,40 +592,30 @@ template<class T> void Filter::filter(const std::vector<T>& input, std::vector<T statBuffer.push_back(input[i-t]); } } - if((i-offset)%down){ - statBuffer.clear(); - continue; - } switch(getFilterType(method)){ case(filter::median): - output[(i-offset+down-1)/down]=stat.median(statBuffer); + output[i]=stat.median(statBuffer); break; case(filter::min): - output[(i-offset+down-1)/down]=stat.mymin(statBuffer); + output[i]=stat.mymin(statBuffer); break; case(filter::max): - output[(i-offset+down-1)/down]=stat.mymax(statBuffer); + output[i]=stat.mymax(statBuffer); break; case(filter::sum): - output[(i-offset+down-1)/down]=sqrt(stat.sum(statBuffer)); + output[i]=sqrt(stat.sum(statBuffer)); break; case(filter::var): - output[(i-offset+down-1)/down]=stat.var(statBuffer); + output[i]=stat.var(statBuffer); break; case(filter::mean): - output[(i-offset+down-1)/down]=stat.mean(statBuffer); + output[i]=stat.mean(statBuffer); break; default: std::string errorString="method not supported"; throw(errorString); break; } - if(verbose){ - std::cout << "buffer: "; - for(int ibuf=0;ibuf<statBuffer.size();++ibuf) - std::cout << statBuffer[ibuf] << " "; - std::cout << "->" << output[(i-offset+down-1)/down] << std::endl; - } } } diff --git a/src/apps/pkfilter.cc b/src/apps/pkfilter.cc index d8f04cd..2d704e1 100644 --- a/src/apps/pkfilter.cc +++ b/src/apps/pkfilter.cc @@ -711,8 +711,10 @@ int main(int argc,char **argv) { if(dimZ_opt.size()){ if(dimZ_opt.size()==1) filter1d.stat(input,output,method_opt[0],down_opt[0]); - else - filter1d.filter(input,output,method_opt[0],dimZ_opt[0],down_opt[0]); + else{ + assert(down_opt[0]==1);//not implemented yet... + filter1d.filter(input,output,method_opt[0],dimZ_opt[0]); + } } else filter2d.doit(input,output,method_opt[0],dimX_opt[0],dimY_opt[0],down_opt[0],disc_opt[0]); -- 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