[pktools] 371/375: working on geo mask in pksvm
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 424a7b6ca990bfc21578b1a6e7b422ae49357ed5
Author: Pieter Kempeneers <kempenep at gmail.com>
Date: Mon Dec 1 10:27:16 2014 +0100
working on geo mask in pksvm
---
ChangeLog | 3 +-
src/apps/pkextract.cc | 6 +--
src/apps/pksvm.cc | 109 ++++++++++++++++++++++++++++----------------------
3 files changed, 67 insertions(+), 51 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index d73fa64..c525c0f 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -328,7 +328,8 @@ version 2.6.1
- pkfilter
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
Todo:
- todo for API
ImgReaderGdal (ImgWriterGdal) open in update mode (check gdal_edit.py: http://searchcode.com/codesearch/view/18938404)
diff --git a/src/apps/pkextract.cc b/src/apps/pkextract.cc
index 8ec5bd6..d878fa2 100644
--- a/src/apps/pkextract.cc
+++ b/src/apps/pkextract.cc
@@ -421,7 +421,7 @@ int main(int argc, char *argv[])
continue;//do not select for now, go to next column
}
else if(nvalid.size()>processClass){//absolute value
- if(nvalid[processClass]>-theThreshold)
+ if(nvalid[processClass]>=-theThreshold)
continue;//do not select any more pixels for this class, go to next column to search for other classes
}
writeBuffer.push_back(sample);
@@ -614,7 +614,7 @@ int main(int argc, char *argv[])
continue;//do not select for now, go to next column
}
else if(nvalid.size()>processClass){//absolute value
- if(nvalid[processClass]>-theThreshold)
+ if(nvalid[processClass]>=-theThreshold)
continue;//do not select any more pixels for this class, go to next column to search for other classes
}
writeBuffer.push_back(sample);
@@ -812,7 +812,7 @@ int main(int argc, char *argv[])
}
}
else{//absolute value
- if(ntotalvalid>-threshold_opt[0]){
+ if(ntotalvalid>=-threshold_opt[0]){
if(test_opt.size())
writeTest=true;
else
diff --git a/src/apps/pksvm.cc b/src/apps/pksvm.cc
index 0745a52..bfd02d5 100644
--- a/src/apps/pksvm.cc
+++ b/src/apps/pksvm.cc
@@ -614,8 +614,8 @@ 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;
@@ -699,8 +699,6 @@ int main(int argc, char *argv[])
for(int iline=0;iline<nrow;++iline){
vector<float> buffer(ncol);
vector<short> lineMask;
- if(mask_opt.size())
- lineMask.resize(maskReader.nrOfCol());
Vector2d<float> linePrior;
if(priorimg_opt.size())
linePrior.resize(nclass,ncol);//prior prob for each class
@@ -745,20 +743,6 @@ int main(int argc, char *argv[])
assert(nband==hpixel[0].size());
if(verbose_opt[0]>1)
std::cout << "used bands: " << nband << std::endl;
- //read mask
- if(!lineMask.empty()){
- try{
- maskReader.readData(lineMask,GDT_Int16,iline);
- }
- catch(string theError){
- cerr << "Error reading " << mask_opt[0] << ": " << theError << std::endl;
- exit(3);
- }
- catch(...){
- cerr << "error catched" << std::endl;
- exit(3);
- }
- }
//read prior
if(priorimg_opt.size()){
try{
@@ -777,39 +761,70 @@ int main(int argc, char *argv[])
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=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]){
+ 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