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 da5d9b72f6bdc505fb01935f89260b09c8038d56 Merge: 424a7b6 54aebed Author: Pieter Kempeneers <kempe...@gmail.com> Date: Mon Dec 1 14:27:10 2014 +0100 mask in geo coordinates for pksvm and pkann ChangeLog | 6 + src/apps/pkann.cc | 108 ++++++----- src/apps/pkextract.cc | 506 ++++++++++++++++++++++++++------------------------ src/apps/pksvm.cc | 4 +- 4 files changed, 328 insertions(+), 296 deletions(-) diff --cc ChangeLog index c525c0f,e79f273..602d788 --- a/ChangeLog +++ b/ChangeLog @@@ -329,7 -329,7 +329,13 @@@ version 2.6. Declare nodata option as double (see ticket #43500) Support nodata values for filtering in spectral/temporal domain (see ticket #43713) - pkextract + extracting with absolute threshold (negative value) was selecting 1 extra sample unit + debug: Order of SetGeometry must be before SetFrom caused bad vector features (First SetGeometry, then SetFrom) ++ - pksvm ++ support for mask in geo coordinates (does not need to be in same dimensions as input raster dataset, only in same projection) ++ - pkann ++ support for mask in geo coordinates (does not need to be in same dimensions as input raster dataset, only in same projection) ++ Todo: - todo for API ImgReaderGdal (ImgWriterGdal) open in update mode (check gdal_edit.py: http://searchcode.com/codesearch/view/18938404) diff --cc src/apps/pkann.cc index 8148c45,8148c45..b8d2ec5 --- a/src/apps/pkann.cc +++ b/src/apps/pkann.cc @@@ -610,10 -610,10 +610,8 @@@ int main(int argc, char *argv[] if(mask_opt.size()){ try{ if(verbose_opt[0]>=1) -- cout << "opening mask image file " << mask_opt[0] << endl; ++ std::cout << "opening mask image file " << mask_opt[0] << std::endl; maskReader.open(mask_opt[0]); -- assert(maskReader.nrOfCol()==testImage.nrOfCol()); -- assert(maskReader.nrOfRow()==testImage.nrOfRow()); } catch(string error){ cerr << error << endl; @@@ -745,20 -745,20 +743,6 @@@ assert(nband==hpixel[0].size()); if(verbose_opt[0]==2) cout << "used bands: " << nband << endl; -- //read mask -- if(!lineMask.empty()){ -- try{ -- maskReader.readData(lineMask,GDT_Int16,iline); -- } -- catch(string theError){ -- cerr << "Error reading " << mask_opt[0] << ": " << theError << endl; -- exit(3); -- } -- catch(...){ -- cerr << "error catched" << endl; -- exit(3); -- } -- } //read prior if(priorimg_opt.size()){ try{ @@@ -777,40 -777,40 +761,70 @@@ exit(3); } } -- ++ double oldRowMask=-1;//keep track of row mask to optimize number of line readings //process per pixel for(int icol=0;icol<ncol;++icol){ assert(hpixel[icol].size()==nband); bool masked=false; -- if(!lineMask.empty()){ -- short theMask=0; -- for(short ivalue=0;ivalue<msknodata_opt.size();++ivalue){ -- if(msknodata_opt[ivalue]>=0){//values set in msknodata_opt are invalid -- if(lineMask[icol]==msknodata_opt[ivalue]){ -- theMask=lineMask[icol]; -- masked=true; -- break; -- } -- } -- else{//only values set in msknodata_opt are valid -- if(lineMask[icol]!=-msknodata_opt[ivalue]){ -- theMask=(nodata_opt.size()==msknodata_opt.size())? nodata_opt[ivalue] : nodata_opt[0];// lineMask[icol]; -- masked=true; -- } -- else{ -- masked=false; -- break; -- } -- } -- } -- if(masked){ -- if(classBag_opt.size()) -- for(int ibag=0;ibag<nbag;++ibag) -- classBag[ibag][icol]=theMask; -- classOut[icol]=theMask; -- continue; -- } -- } ++ if(mask_opt.size()){ ++ //read mask ++ double colMask=0; ++ double rowMask=0; ++ double geox=0; ++ double geoy=0; ++ ++ testImage.image2geo(icol,iline,geox,geoy); ++ maskReader.geo2image(geox,geoy,colMask,rowMask); ++ colMask=static_cast<int>(colMask); ++ rowMask=static_cast<int>(rowMask); ++ if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){ ++ if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){ ++ assert(rowMask>=0&&rowMask<maskReader.nrOfRow()); ++ try{ ++ // maskReader.readData(lineMask[imask],GDT_Int32,static_cast<int>(rowMask)); ++ maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask)); ++ } ++ catch(string errorstring){ ++ cerr << errorstring << endl; ++ exit(1); ++ } ++ catch(...){ ++ cerr << "error catched" << std::endl; ++ exit(3); ++ } ++ oldRowMask=rowMask; ++ } ++ } ++ else ++ continue;//no coverage in this mask ++ short theMask=0; ++ for(short ivalue=0;ivalue<msknodata_opt.size();++ivalue){ ++ if(msknodata_opt[ivalue]>=0){//values set in msknodata_opt are invalid ++ if(lineMask[colMask]==msknodata_opt[ivalue]){ ++ theMask=lineMask[colMask]; ++ masked=true; ++ break; ++ } ++ } ++ else{//only values set in msknodata_opt are valid ++ if(lineMask[colMask]!=-msknodata_opt[ivalue]){ ++ theMask=lineMask[colMask]; ++ masked=true; ++ } ++ else{ ++ masked=false; ++ break; ++ } ++ } ++ } ++ if(masked){ ++ if(classBag_opt.size()) ++ for(int ibag=0;ibag<nbag;++ibag) ++ classBag[ibag][icol]=theMask; ++ classOut[icol]=theMask; ++ continue; ++ } ++ } bool valid=false; for(int iband=0;iband<nband;++iband){ if(hpixel[icol][iband]){ diff --cc src/apps/pksvm.cc index bfd02d5,0745a52..60f9ddc --- a/src/apps/pksvm.cc +++ b/src/apps/pksvm.cc @@@ -614,8 -614,8 +614,6 @@@ int main(int argc, char *argv[] if(verbose_opt[0]>=1) std::cout << "opening mask image file " << mask_opt[0] << std::endl; maskReader.open(mask_opt[0]); - // assert(maskReader.nrOfCol()==testImage.nrOfCol()); - // assert(maskReader.nrOfRow()==testImage.nrOfRow()); - assert(maskReader.nrOfCol()==testImage.nrOfCol()); - assert(maskReader.nrOfRow()==testImage.nrOfRow()); } catch(string error){ cerr << error << std::endl; @@@ -766,65 -781,35 +764,65 @@@ for(int icol=0;icol<ncol;++icol){ assert(hpixel[icol].size()==nband); bool masked=false; - if(!lineMask.empty()){ - short theMask=0; - for(short ivalue=0;ivalue<msknodata_opt.size();++ivalue){ - if(msknodata_opt[ivalue]>=0){//values set in msknodata_opt are invalid - if(lineMask[icol]==msknodata_opt[ivalue]){ - theMask=lineMask[icol]; - masked=true; - break; - } - } - else{//only values set in msknodata_opt are valid - if(lineMask[icol]!=-msknodata_opt[ivalue]){ - theMask=lineMask[icol]; - masked=true; - } - else{ - masked=false; - break; - } - } - } - if(masked){ - if(classBag_opt.size()) - for(int ibag=0;ibag<nbag;++ibag) - classBag[ibag][icol]=theMask; - classOut[icol]=theMask; - continue; - } - } + if(mask_opt.size()){ + //read mask + double colMask=0; + double rowMask=0; + double geox=0; + double geoy=0; + + testImage.image2geo(icol,iline,geox,geoy); + maskReader.geo2image(geox,geoy,colMask,rowMask); + colMask=static_cast<int>(colMask); + rowMask=static_cast<int>(rowMask); + if(rowMask>=0&&rowMask<maskReader.nrOfRow()&&colMask>=0&&colMask<maskReader.nrOfCol()){ + if(static_cast<int>(rowMask)!=static_cast<int>(oldRowMask)){ + assert(rowMask>=0&&rowMask<maskReader.nrOfRow()); + try{ + // maskReader.readData(lineMask[imask],GDT_Int32,static_cast<int>(rowMask)); + maskReader.readData(lineMask,GDT_Int16,static_cast<int>(rowMask)); + } + catch(string errorstring){ + cerr << errorstring << endl; + exit(1); + } + catch(...){ + cerr << "error catched" << std::endl; + exit(3); + } + oldRowMask=rowMask; + } + } + else + continue;//no coverage in this mask + short theMask=0; + for(short ivalue=0;ivalue<msknodata_opt.size();++ivalue){ + if(msknodata_opt[ivalue]>=0){//values set in msknodata_opt are invalid + if(lineMask[colMask]==msknodata_opt[ivalue]){ + theMask=lineMask[colMask]; + masked=true; + break; + } + } + else{//only values set in msknodata_opt are valid - if(lineMask[icol]!=-msknodata_opt[ivalue]){ ++ if(lineMask[colMask]!=-msknodata_opt[ivalue]){ + theMask=lineMask[colMask]; + masked=true; + } + else{ + masked=false; + break; + } + } + } + if(masked){ + if(classBag_opt.size()) + for(int ibag=0;ibag<nbag;++ibag) + classBag[ibag][icol]=theMask; + classOut[icol]=theMask; + continue; + } + } bool valid=false; for(int iband=0;iband<hpixel[icol].size();++iband){ if(hpixel[icol][iband]){ -- 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