[pktools] 372/375: mask in geo coordinates for pksvm and pkann
Bas Couwenberg
sebastic at xs4all.nl
Wed Dec 3 21:54:31 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 da5d9b72f6bdc505fb01935f89260b09c8038d56
Merge: 424a7b6 54aebed
Author: Pieter Kempeneers <kempenep at 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
More information about the Pkg-grass-devel
mailing list