#include "../envi/envi.h" #include "../envi/binary.h" namespace rts{ template class bsq: public binary { protected: envi header; public: //open a file, given the file and its header's names bool open(std::string filename, std::string headername){ if (header.load(headername)==false){ std::cout<<"ERROR: unable to load head file"<(header.samples, header.lines, header.bands), header.header_offset); return true; } //save one band of the file into the memory, and return the pointer bool getBand( T * p, unsigned int page){ if (page >= header.bands){ //make sure the bank number is right std::cout<<"ERROR: page out of range"<= header.samples || y >= header.lines){ //make sure the sample and line number is right std::cout<<"ERROR: sample or line out of range"< bands ) { unsigned N = bands.size(); //to get points number; ofstream bitext(outname.c_str(), std::ios::binary); //target binary file unsigned i, j, k; unsigned lownum, highnum; unsigned control=0; T * low; T * high; T * current; T * temp; low=(T *)malloc(header.lines * header.samples * sizeof(T)); //memory allocation high=(T *)malloc(header.lines * header.samples * sizeof(T)); current=(T *)malloc(header.lines * header.samples * sizeof(T)); if (low == NULL || high == NULL || current == NULL){ cout<<"memory allocation failure"; return false; } //perform baseline correction //initialize lownum, highnum, low, high lownum=0; if(bands[0] != 0){ highnum = bands[control]; memset(low, 0.0, sizeof(T) * header.lines * header.samples); } else{ control += 1; getBand(low, lownum); highnum = bands[control]; } getBand(high, highnum); //correct every band for(k = 0; k < header.bands; k++) { cout<(current), sizeof(T) * header.lines * header.samples); //write the corrected data into destination } free(low); free(high); free(current); bitext.close(); return true; } }; }