Commit a23c4132c77f7ece12411d70570a50d13fd89c3d

Authored by David Mayerich
1 parent e0c22b85

Doxygen comments for bil, bsq, bip. Removed JPEG library from image.h

Showing 4 changed files with 293 additions and 49 deletions   Show diff stats
envi/bil.h
... ... @@ -8,6 +8,15 @@
8 8  
9 9 namespace stim{
10 10  
  11 +/**
  12 + The BIL class represents a 3-dimensional binary file stored using band interleaved by line (BIL) image encoding. The binary file is stored
  13 + such that X-Z "frames" are stored sequentially to form an image stack along the y-axis. When accessing the data sequentially on disk,
  14 + the dimensions read, from fastest to slowest, are X, Z, Y.
  15 +
  16 + This class is optimized for data streaming, and therefore supports extremely large (terabyte-scale) files. Data is loaded from disk
  17 + on request. Functions used to access data are written to support efficient reading.
  18 +*/
  19 +
11 20 template <typename T>
12 21  
13 22 class bil: public binary<T> {
... ... @@ -22,7 +31,14 @@ public:
22 31 using binary<T>::file;
23 32 using binary<T>::R;
24 33  
25   - //open a file, given the file and its header's names
  34 + /// Open a data file for reading using the class interface.
  35 +
  36 + /// @param filename is the name of the binary file on disk
  37 + /// @param X is the number of samples along dimension 1
  38 + /// @param Y is the number of samples (lines) along dimension 2
  39 + /// @param B is the number of samples (bands) along dimension 3
  40 + /// @param header_offset is the number of bytes (if any) in the binary header
  41 + /// @param wavelengths is an optional STL vector of size B specifying a numerical label for each band
26 42 bool open(std::string filename, unsigned int X, unsigned int Y, unsigned int B, unsigned int header_offset, std::vector<double> wavelengths){
27 43  
28 44 w = wavelengths;
... ... @@ -31,7 +47,10 @@ public:
31 47  
32 48 }
33 49  
34   - //save one band of the file into the memory, and return the pointer
  50 + /// Retrieve a single band (based on index) and stores it in pre-allocated memory.
  51 +
  52 + /// @param p is a pointer to an allocated region of memory at least X * Y * sizeof(T) in size.
  53 + /// @param page <= B is the integer number of the band to be copied.
35 54 bool band_index( T * p, unsigned int page){
36 55  
37 56 unsigned int L = R[0] * sizeof(T); //caculate the number of bytes in a sample line
... ... @@ -52,6 +71,10 @@ public:
52 71 return true;
53 72 }
54 73  
  74 + /// Retrieve a single band (by numerical label) and stores it in pre-allocated memory.
  75 +
  76 + /// @param p is a pointer to an allocated region of memory at least X * Y * sizeof(T) in size.
  77 + /// @param wavelength is a floating point value (usually a wavelength in spectral data) used as a label for the band to be copied.
55 78 bool band( T * p, double wavelength){
56 79  
57 80 //if there are no wavelengths in the BSQ file
... ... @@ -151,7 +174,11 @@ public:
151 174 return true;
152 175 }
153 176  
154   - //save one pixel of the BIP file into the memory, and return the pointer
  177 + /// Retrieve a single spectrum (B-axis line) at a given (x, y) location and stores it in pre-allocated memory.
  178 +
  179 + /// @param p is a pointer to pre-allocated memory at least B * sizeof(T) in size.
  180 + /// @param x is the x-coordinate (dimension 1) of the spectrum.
  181 + /// @param y is the y-coordinate (dimension 2) of the spectrum.
155 182 bool spectrum(T * p, unsigned x, unsigned y){
156 183  
157 184 if ( x >= R[0] || y >= R[1]){ //make sure the sample and line number is right
... ... @@ -173,7 +200,10 @@ public:
173 200 return true;
174 201 }
175 202  
176   - //save one pixel into memory
  203 + /// Retrieve a single pixel and stores it in pre-allocated memory.
  204 +
  205 + /// @param p is a pointer to pre-allocated memory at least sizeof(T) in size.
  206 + /// @param n is an integer index to the pixel using linear array indexing.
177 207 bool pixel(T * p, unsigned n){
178 208  
179 209 //calculate the corresponding x, y
... ... @@ -199,7 +229,10 @@ public:
199 229  
200 230 }
201 231  
202   - //(BIL) baseline correction
  232 + /// Perform baseline correction given a list of baseline points and stores the result in a new BSQ file.
  233 +
  234 + /// @param outname is the name of the output file used to store the resulting baseline-corrected data.
  235 + /// @param wls is the list of baseline points based on band labels.
203 236 bool baseline(std::string outname, std::vector<double> wls){
204 237  
205 238 unsigned N = wls.size(); //get the number of baseline points
... ... @@ -308,7 +341,11 @@ public:
308 341  
309 342 }
310 343  
311   - // normalize the BIL file
  344 + /// Normalize all spectra based on the value of a single band, storing the result in a new BSQ file.
  345 +
  346 + /// @param outname is the name of the output file used to store the resulting baseline-corrected data.
  347 + /// @param w is the label specifying the band that the hyperspectral image will be normalized to.
  348 + /// @param t is a threshold specified such that a spectrum with a value at w less than t is set to zero. Setting this threshold allows the user to limit division by extremely small numbers.
312 349 bool normalize(std::string outname, double w, double t = 0.0)
313 350 {
314 351 unsigned int B = R[2]; //calculate the number of bands
... ... @@ -352,7 +389,9 @@ public:
352 389 return true;
353 390 }
354 391  
355   - //convert BIL file to BSQ file and save it
  392 + /// Convert the current BIL file to a BSQ file with the specified file name.
  393 +
  394 + /// @param outname is the name of the output BSQ file to be saved to disk.
356 395 bool bsq(std::string outname)
357 396 {
358 397 unsigned int S = R[0] * R[1] * sizeof(T); //calculate the number of bytes in a band
... ... @@ -374,7 +413,9 @@ public:
374 413 return true;
375 414 }
376 415  
377   - //convert bil file to bip file and save it
  416 + /// Convert the current BIL file to a BIP file with the specified file name.
  417 +
  418 + /// @param outname is the name of the output BIP file to be saved to disk.
378 419 bool bip(std::string outname)
379 420 {
380 421 unsigned int S = R[0] * R[2] * sizeof(T); //calculate the number of bytes in a ZX slice
... ... @@ -408,7 +449,14 @@ public:
408 449 }
409 450  
410 451  
411   - //providing the left and the right bound data, return baseline-corrected band height
  452 + /// Return a baseline corrected band given two adjacent baseline points and their bands. The result is stored in a pre-allocated array.
  453 +
  454 + /// @param lb is the label value for the left baseline point
  455 + /// @param rb is the label value for the right baseline point
  456 + /// @param lp is a pointer to an array holding the band image for the left baseline point
  457 + /// @param rp is a pointer to an array holding the band image for the right baseline point
  458 + /// @param wavelength is the label value for the requested baseline-corrected band
  459 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size.
412 460 bool baseline_band(double lb, double rb, T* lp, T* rp, double wavelength, T* result){
413 461  
414 462 unsigned XY = R[0] * R[1];
... ... @@ -421,6 +469,13 @@ public:
421 469 }
422 470 return true;
423 471 }
  472 +
  473 + /// Return a baseline corrected band given two adjacent baseline points. The result is stored in a pre-allocated array.
  474 +
  475 + /// @param lb is the label value for the left baseline point
  476 + /// @param rb is the label value for the right baseline point
  477 + /// @param bandwavelength is the label value for the desired baseline-corrected band
  478 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size.
424 479 bool height(double lb, double rb, double bandwavelength, T* result){
425 480  
426 481 T* lp;
... ... @@ -441,7 +496,14 @@ public:
441 496 }
442 497  
443 498  
444   - //calculate the area between two bound point(including baseline correction)
  499 +
  500 + /// Calculate the area under the spectrum between two specified points and stores the result in a pre-allocated array.
  501 +
  502 + /// @param lb is the label value for the left baseline point
  503 + /// @param rb is the label value for the right baseline point
  504 + /// @param lab is the label value for the left bound (start of the integration)
  505 + /// @param rab is the label value for the right bound (end of the integration)
  506 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
445 507 bool area(double lb, double rb, double lab, double rab, T* result){
446 508  
447 509 T* lp; //left band pointer
... ... @@ -519,7 +581,15 @@ public:
519 581 return true;
520 582 }
521 583  
522   - //peak height ratio
  584 + /// Compute the ratio of two baseline-corrected peaks. The result is stored in a pre-allocated array.
  585 +
  586 + /// @param lb1 is the label value for the left baseline point for the first peak (numerator)
  587 + /// @param rb1 is the label value for the right baseline point for the first peak (numerator)
  588 + /// @param pos1 is the label value for the first peak (numerator) position
  589 + /// @param lb2 is the label value for the left baseline point for the second peak (denominator)
  590 + /// @param rb2 is the label value for the right baseline point for the second peak (denominator)
  591 + /// @param pos2 is the label value for the second peak (denominator) position
  592 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
523 593 bool ph_to_ph(double lb1, double rb1, double pos1, double lb2, double rb2, double pos2, T * result){
524 594  
525 595 T* p1 = (T*)malloc(R[0] * R[1] * sizeof(T));
... ... @@ -541,7 +611,15 @@ public:
541 611 return true;
542 612 }
543 613  
544   - //peak are to peak height ratio
  614 + /// Compute the ratio between a peak area and peak height.
  615 +
  616 + /// @param lb1 is the label value for the left baseline point for the first peak (numerator)
  617 + /// @param rb1 is the label value for the right baseline point for the first peak (numerator)
  618 + /// @param pos1 is the label value for the first peak (numerator) position
  619 + /// @param lb2 is the label value for the left baseline point for the second peak (denominator)
  620 + /// @param rb2 is the label value for the right baseline point for the second peak (denominator)
  621 + /// @param pos2 is the label value for the second peak (denominator) position
  622 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
545 623 bool pa_to_ph(double lb1, double rb1, double lab1, double rab1,
546 624 double lb2, double rb2, double pos, T* result){
547 625  
... ... @@ -564,7 +642,17 @@ public:
564 642 return true;
565 643 }
566 644  
567   - //peak area to peak area ratio
  645 + /// Compute the ratio between two peak areas.
  646 +
  647 + /// @param lb1 is the label value for the left baseline point for the first peak (numerator)
  648 + /// @param rb1 is the label value for the right baseline point for the first peak (numerator)
  649 + /// @param lab1 is the label value for the left bound (start of the integration) of the first peak (numerator)
  650 + /// @param rab1 is the label value for the right bound (end of the integration) of the first peak (numerator)
  651 + /// @param lb2 is the label value for the left baseline point for the second peak (denominator)
  652 + /// @param rb2 is the label value for the right baseline point for the second peak (denominator)
  653 + /// @param lab2 is the label value for the left bound (start of the integration) of the second peak (denominator)
  654 + /// @param rab2 is the label value for the right bound (end of the integration) of the second peak (denominator)
  655 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
568 656 bool pa_to_pa(double lb1, double rb1, double lab1, double rab1,
569 657 double lb2, double rb2, double lab2, double rab2, T* result){
570 658  
... ... @@ -587,7 +675,13 @@ public:
587 675 return true;
588 676 }
589 677  
590   - //x * f(x)
  678 + /// Compute the definite integral of a baseline corrected peak.
  679 +
  680 + /// @param lb is the label value for the left baseline point
  681 + /// @param rb is the label value for the right baseline point
  682 + /// @param lab is the label for the start of the definite integral
  683 + /// @param rab is the label for the end of the definite integral
  684 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
591 685 bool x_area(double lb, double rb, double lab, double rab, T* result){
592 686 T* lp; //left band pointer
593 687 T* rp; //right band pointer
... ... @@ -662,7 +756,13 @@ public:
662 756 return true;
663 757 }
664 758  
665   - //centroid point
  759 + /// Compute the centroid of a baseline corrected peak.
  760 +
  761 + /// @param lb is the label value for the left baseline point
  762 + /// @param rb is the label value for the right baseline point
  763 + /// @param lab is the label for the start of the peak
  764 + /// @param rab is the label for the end of the peak
  765 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
666 766 bool cpoint(double lb, double rb, double lab, double rab, T* result){
667 767 T* p1 = (T*)malloc(R[0] * R[1] * sizeof(T));
668 768 T* p2 = (T*)malloc(R[0] * R[1] * sizeof(T));
... ... @@ -683,7 +783,13 @@ public:
683 783 return true;
684 784 }
685 785  
686   - //create mask file
  786 + /// Create a mask based on a given band and threshold value.
  787 +
  788 + /// All pixels in the
  789 + /// specified band greater than the threshold are true and all pixels less than the threshold are false.
  790 + /// @param mask_band is the band used to specify the mask
  791 + /// @param threshold is the threshold used to determine if the mask value is true or false
  792 + /// @param p is a pointer to a pre-allocated array at least X * Y in size
687 793 bool build_mask(double mask_band, double threshold, unsigned char* p){
688 794  
689 795 T* temp = (T*)malloc(R[0] * R[1] * sizeof(T)); //allocate memory for the certain band
... ... @@ -700,7 +806,10 @@ public:
700 806 return true;
701 807 }
702 808  
703   - //apply mask
  809 + /// Apply a mask file to the BSQ image, setting all values outside the mask to zero.
  810 +
  811 + /// @param outfile is the name of the masked output file
  812 + /// @param p is a pointer to memory of size X * Y, where p(i) = 0 for pixels that will be set to zero.
704 813 bool apply_mask(std::string outfile, unsigned char* p){
705 814  
706 815 std::ofstream target(outfile.c_str(), std::ios::binary);
... ... @@ -730,7 +839,9 @@ public:
730 839 return true;
731 840 }
732 841  
733   - //calculate the average band value
  842 + /// Calculate the mean band value (average along B) at each pixel location.
  843 +
  844 + /// @param p is a pointer to memory of size X * Y * sizeof(T) that will store the band averages.
734 845 bool band_avg(T* p){
735 846 unsigned long long XZ = R[0] * R[2];
736 847 T* temp = (T*)malloc(sizeof(T) * XZ);
... ... @@ -757,7 +868,10 @@ public:
757 868 return true;
758 869 }
759 870  
760   - //calculate the average number of every band
  871 + /// Calculate the mean value for all masked (or valid) pixels in a band and returns the average spectrum
  872 +
  873 + /// @param p is a pointer to pre-allocated memory of size [B * sizeof(T)] that stores the mean spectrum
  874 + /// @param mask is a pointer to memory of size [X * Y] that stores the mask value at each pixel location
761 875 bool avg_band(T*p, unsigned char* mask){
762 876 unsigned long long XZ = R[0] * R[2];
763 877 unsigned long long XY = R[0] * R[1];
... ... @@ -787,7 +901,11 @@ public:
787 901 return true;
788 902 }
789 903  
790   - //calculate correlation coefficient matrix
  904 + /// Calculate the covariance matrix for all masked pixels in the image.
  905 +
  906 + /// @param co is a pointer to pre-allocated memory of size [B * B] that stores the resulting covariance matrix
  907 + /// @param avg is a pointer to memory of size B that stores the average spectrum
  908 + /// @param mask is a pointer to memory of size [X * Y] that stores the mask value at each pixel location
791 909 bool co_matrix(T* co, T* avg, unsigned char *mask){
792 910 //memory allocation
793 911 unsigned long long xy = R[0] * R[1];
... ... @@ -829,7 +947,13 @@ public:
829 947 }
830 948  
831 949  
832   - //crop specified area the of the original file
  950 + /// Crop a region of the image and save it to a new file.
  951 +
  952 + /// @param outfile is the file name for the new cropped image
  953 + /// @param x0 is the lower-left x pixel coordinate to be included in the cropped image
  954 + /// @param y0 is the lower-left y pixel coordinate to be included in the cropped image
  955 + /// @param x1 is the upper-right x pixel coordinate to be included in the cropped image
  956 + /// @param y1 is the upper-right y pixel coordinate to be included in the cropped image
833 957 bool crop(std::string outfile, unsigned x0, unsigned y0, unsigned x1, unsigned y1){
834 958  
835 959 //calculate the new number of samples and lines
... ... @@ -856,7 +980,7 @@ public:
856 980 }
857 981  
858 982  
859   - //close the file
  983 + /// Close the file.
860 984 bool close(){
861 985 file.close();
862 986 return true;
... ...
envi/bip.h
... ... @@ -9,6 +9,14 @@
9 9  
10 10 namespace stim{
11 11  
  12 +/**
  13 + The BIP class represents a 3-dimensional binary file stored using band interleaved by pixel (BIP) image encoding. The binary file is stored
  14 + such that Z-X "frames" are stored sequentially to form an image stack along the y-axis. When accessing the data sequentially on disk,
  15 + the dimensions read, from fastest to slowest, are Z, X, Y.
  16 +
  17 + This class is optimized for data streaming, and therefore supports extremely large (terabyte-scale) files. Data is loaded from disk
  18 + on request. Functions used to access data are written to support efficient reading.
  19 +*/
12 20 template <typename T>
13 21  
14 22 class bip: public binary<T> {
... ... @@ -25,7 +33,14 @@ public:
25 33 using binary<T>::file;
26 34 using binary<T>::R;
27 35  
28   - //open a file, given the file and its header's names
  36 + /// Open a data file for reading using the class interface.
  37 +
  38 + /// @param filename is the name of the binary file on disk
  39 + /// @param X is the number of samples along dimension 1
  40 + /// @param Y is the number of samples (lines) along dimension 2
  41 + /// @param B is the number of samples (bands) along dimension 3
  42 + /// @param header_offset is the number of bytes (if any) in the binary header
  43 + /// @param wavelengths is an optional STL vector of size B specifying a numerical label for each band
29 44 bool open(std::string filename, unsigned int X, unsigned int Y, unsigned int B, unsigned int header_offset, std::vector<double> wavelengths){
30 45  
31 46 //copy the wavelengths to the BSQ file structure
... ... @@ -37,7 +52,10 @@ public:
37 52  
38 53 }
39 54  
40   - //save one band of the file into the memory, and return the pointer
  55 + /// Retrieve a single band (based on index) and stores it in pre-allocated memory.
  56 +
  57 + /// @param p is a pointer to an allocated region of memory at least X * Y * sizeof(T) in size.
  58 + /// @param page <= B is the integer number of the band to be copied.
41 59 bool band_index( T * p, unsigned int page){
42 60  
43 61 if (page >= R[2]){ //make sure the bank number is right
... ... @@ -56,6 +74,10 @@ public:
56 74 return true;
57 75 }
58 76  
  77 + /// Retrieve a single band (by numerical label) and stores it in pre-allocated memory.
  78 +
  79 + /// @param p is a pointer to an allocated region of memory at least X * Y * sizeof(T) in size.
  80 + /// @param wavelength is a floating point value (usually a wavelength in spectral data) used as a label for the band to be copied.
59 81 bool band( T * p, double wavelength){
60 82  
61 83 //if there are no wavelengths in the BSQ file
... ... @@ -247,7 +269,11 @@ public:
247 269 return true;
248 270 }
249 271  
250   - //save one pixel of the BIP file into the memory, and return the pointer
  272 + /// Retrieve a single spectrum (B-axis line) at a given (x, y) location and stores it in pre-allocated memory.
  273 +
  274 + /// @param p is a pointer to pre-allocated memory at least B * sizeof(T) in size.
  275 + /// @param x is the x-coordinate (dimension 1) of the spectrum.
  276 + /// @param y is the y-coordinate (dimension 2) of the spectrum.
251 277 bool spectrum(T * p, unsigned x, unsigned y){
252 278  
253 279 if ( x >= R[0] || y >= R[1]){ //make sure the sample and line number is right
... ... @@ -262,7 +288,10 @@ public:
262 288 return true;
263 289 }
264 290  
265   - //save one pixel into memory
  291 + /// Retrieve a single pixel and stores it in pre-allocated memory.
  292 +
  293 + /// @param p is a pointer to pre-allocated memory at least sizeof(T) in size.
  294 + /// @param n is an integer index to the pixel using linear array indexing.
266 295 bool pixel(T * p, unsigned n){
267 296  
268 297 unsigned bandnum = R[0] * R[1]; //calculate numbers in one band
... ... @@ -291,7 +320,10 @@ public:
291 320  
292 321 }
293 322  
294   - //(BIP) baseline correction
  323 + /// Perform baseline correction given a list of baseline points and stores the result in a new BSQ file.
  324 +
  325 + /// @param outname is the name of the output file used to store the resulting baseline-corrected data.
  326 + /// @param wls is the list of baseline points based on band labels.
295 327 bool baseline(std::string outname, std::vector<double> wls){
296 328  
297 329 unsigned N = wls.size(); //get the number of baseline points
... ... @@ -400,7 +432,11 @@ public:
400 432  
401 433 }
402 434  
403   - // normalize the BIP file
  435 + /// Normalize all spectra based on the value of a single band, storing the result in a new BSQ file.
  436 +
  437 + /// @param outname is the name of the output file used to store the resulting baseline-corrected data.
  438 + /// @param w is the label specifying the band that the hyperspectral image will be normalized to.
  439 + /// @param t is a threshold specified such that a spectrum with a value at w less than t is set to zero. Setting this threshold allows the user to limit division by extremely small numbers.
404 440 bool normalize(std::string outname, double w, double t = 0.0)
405 441 {
406 442 unsigned int B = R[2]; //calculate the number of bands
... ... @@ -447,7 +483,9 @@ public:
447 483 return true;
448 484 }
449 485  
450   - //convert BIP file to BSQ file and save it
  486 + /// Convert the current BIP file to a BSQ file with the specified file name.
  487 +
  488 + /// @param outname is the name of the output BSQ file to be saved to disk.
451 489 bool bsq(std::string outname)
452 490 {
453 491 std::string temp = outname + "_temp";
... ... @@ -468,7 +506,9 @@ public:
468 506 return true;
469 507 }
470 508  
471   - //convert bip file to bil file and save it
  509 + /// Convert the current BIP file to a BIL file with the specified file name.
  510 +
  511 + /// @param outname is the name of the output BIL file to be saved to disk.
472 512 bool bil(std::string outname)
473 513 {
474 514 unsigned int S = R[0] * R[2] * sizeof(T); //calculate the number of bytes in a ZX slice
... ... @@ -500,7 +540,14 @@ public:
500 540 return true;
501 541 }
502 542  
503   - //providing the left and the right bound data, return baseline-corrected band height
  543 + /// Return a baseline corrected band given two adjacent baseline points and their bands. The result is stored in a pre-allocated array.
  544 +
  545 + /// @param lb is the label value for the left baseline point
  546 + /// @param rb is the label value for the right baseline point
  547 + /// @param lp is a pointer to an array holding the band image for the left baseline point
  548 + /// @param rp is a pointer to an array holding the band image for the right baseline point
  549 + /// @param wavelength is the label value for the requested baseline-corrected band
  550 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size.
504 551 bool baseline_band(double lb, double rb, T* lp, T* rp, double wavelength, T* result){
505 552  
506 553 unsigned XY = R[0] * R[1];
... ... @@ -514,6 +561,12 @@ public:
514 561 return true;
515 562 }
516 563  
  564 + /// Return a baseline corrected band given two adjacent baseline points. The result is stored in a pre-allocated array.
  565 +
  566 + /// @param lb is the label value for the left baseline point
  567 + /// @param rb is the label value for the right baseline point
  568 + /// @param bandwavelength is the label value for the desired baseline-corrected band
  569 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size.
517 570 bool height(double lb, double rb, double bandwavelength, T* result){
518 571  
519 572 T* lp;
... ... @@ -534,7 +587,13 @@ public:
534 587 }
535 588  
536 589  
537   - //calculate the area between two bound point(including baseline correction)
  590 + /// Calculate the area under the spectrum between two specified points and stores the result in a pre-allocated array.
  591 +
  592 + /// @param lb is the label value for the left baseline point
  593 + /// @param rb is the label value for the right baseline point
  594 + /// @param lab is the label value for the left bound (start of the integration)
  595 + /// @param rab is the label value for the right bound (end of the integration)
  596 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
538 597 bool area(double lb, double rb, double lab, double rab, T* result){
539 598  
540 599 T* lp; //left band pointer
... ... @@ -612,7 +671,15 @@ public:
612 671 return true;
613 672 }
614 673  
615   - //peak height ratio
  674 + /// Compute the ratio of two baseline-corrected peaks. The result is stored in a pre-allocated array.
  675 +
  676 + /// @param lb1 is the label value for the left baseline point for the first peak (numerator)
  677 + /// @param rb1 is the label value for the right baseline point for the first peak (numerator)
  678 + /// @param pos1 is the label value for the first peak (numerator) position
  679 + /// @param lb2 is the label value for the left baseline point for the second peak (denominator)
  680 + /// @param rb2 is the label value for the right baseline point for the second peak (denominator)
  681 + /// @param pos2 is the label value for the second peak (denominator) position
  682 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
616 683 bool ph_to_ph(double lb1, double rb1, double pos1, double lb2, double rb2, double pos2, T * result){
617 684  
618 685 T* p1 = (T*)malloc(R[0] * R[1] * sizeof(T));
... ... @@ -634,7 +701,15 @@ public:
634 701 return true;
635 702 }
636 703  
637   - //peak are to peak height ratio
  704 + /// Compute the ratio between a peak area and peak height.
  705 +
  706 + /// @param lb1 is the label value for the left baseline point for the first peak (numerator)
  707 + /// @param rb1 is the label value for the right baseline point for the first peak (numerator)
  708 + /// @param pos1 is the label value for the first peak (numerator) position
  709 + /// @param lb2 is the label value for the left baseline point for the second peak (denominator)
  710 + /// @param rb2 is the label value for the right baseline point for the second peak (denominator)
  711 + /// @param pos2 is the label value for the second peak (denominator) position
  712 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
638 713 bool pa_to_ph(double lb1, double rb1, double lab1, double rab1,
639 714 double lb2, double rb2, double pos, T* result){
640 715  
... ... @@ -657,7 +732,17 @@ public:
657 732 return true;
658 733 }
659 734  
660   - //peak area to peak area ratio
  735 + /// Compute the ratio between two peak areas.
  736 +
  737 + /// @param lb1 is the label value for the left baseline point for the first peak (numerator)
  738 + /// @param rb1 is the label value for the right baseline point for the first peak (numerator)
  739 + /// @param lab1 is the label value for the left bound (start of the integration) of the first peak (numerator)
  740 + /// @param rab1 is the label value for the right bound (end of the integration) of the first peak (numerator)
  741 + /// @param lb2 is the label value for the left baseline point for the second peak (denominator)
  742 + /// @param rb2 is the label value for the right baseline point for the second peak (denominator)
  743 + /// @param lab2 is the label value for the left bound (start of the integration) of the second peak (denominator)
  744 + /// @param rab2 is the label value for the right bound (end of the integration) of the second peak (denominator)
  745 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
661 746 bool pa_to_pa(double lb1, double rb1, double lab1, double rab1,
662 747 double lb2, double rb2, double lab2, double rab2, T* result){
663 748  
... ... @@ -680,7 +765,13 @@ public:
680 765 return true;
681 766 }
682 767  
683   - //x * f(x)
  768 + /// Compute the definite integral of a baseline corrected peak.
  769 +
  770 + /// @param lb is the label value for the left baseline point
  771 + /// @param rb is the label value for the right baseline point
  772 + /// @param lab is the label for the start of the definite integral
  773 + /// @param rab is the label for the end of the definite integral
  774 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
684 775 bool x_area(double lb, double rb, double lab, double rab, T* result){
685 776 T* lp; //left band pointer
686 777 T* rp; //right band pointer
... ... @@ -755,7 +846,13 @@ public:
755 846 return true;
756 847 }
757 848  
758   - //centroid point
  849 + /// Compute the centroid of a baseline corrected peak.
  850 +
  851 + /// @param lb is the label value for the left baseline point
  852 + /// @param rb is the label value for the right baseline point
  853 + /// @param lab is the label for the start of the peak
  854 + /// @param rab is the label for the end of the peak
  855 + /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
759 856 bool cpoint(double lb, double rb, double lab, double rab, T* result){
760 857 T* p1 = (T*)malloc(R[0] * R[1] * sizeof(T));
761 858 T* p2 = (T*)malloc(R[0] * R[1] * sizeof(T));
... ... @@ -776,7 +873,13 @@ public:
776 873 return true;
777 874 }
778 875  
779   - //create mask file
  876 + /// Create a mask based on a given band and threshold value.
  877 +
  878 + /// All pixels in the
  879 + /// specified band greater than the threshold are true and all pixels less than the threshold are false.
  880 + /// @param mask_band is the band used to specify the mask
  881 + /// @param threshold is the threshold used to determine if the mask value is true or false
  882 + /// @param p is a pointer to a pre-allocated array at least X * Y in size
780 883 bool build_mask(double mask_band, double threshold, unsigned char* p){
781 884  
782 885 T* temp = (T*)malloc(R[0] * R[1] * sizeof(T)); //allocate memory for the certain band
... ... @@ -794,7 +897,10 @@ public:
794 897  
795 898 }
796 899  
797   - //apply mask
  900 + /// Apply a mask file to the BSQ image, setting all values outside the mask to zero.
  901 +
  902 + /// @param outfile is the name of the masked output file
  903 + /// @param p is a pointer to memory of size X * Y, where p(i) = 0 for pixels that will be set to zero.
798 904 bool apply_mask(std::string outfile, unsigned char* p){
799 905  
800 906 std::ofstream target(outfile.c_str(), std::ios::binary);
... ... @@ -824,7 +930,9 @@ public:
824 930 return true;
825 931 }
826 932  
827   - //calculate the average band of the file
  933 + /// Calculate the mean band value (average along B) at each pixel location.
  934 +
  935 + /// @param p is a pointer to memory of size X * Y * sizeof(T) that will store the band averages.
828 936 bool band_avg(T* p){
829 937 unsigned long long XY = R[0] * R[1];
830 938 //get every pixel and calculate average value
... ... @@ -843,7 +951,10 @@ public:
843 951 return true;
844 952 }
845 953  
846   - //calculate the average number of every band
  954 + /// Calculate the mean value for all masked (or valid) pixels in a band and returns the average spectrum
  955 +
  956 + /// @param p is a pointer to pre-allocated memory of size [B * sizeof(T)] that stores the mean spectrum
  957 + /// @param mask is a pointer to memory of size [X * Y] that stores the mask value at each pixel location
847 958 bool avg_band(T*p, unsigned char* mask){
848 959 unsigned long long XY = R[0] * R[1];
849 960 T* temp = (T*)malloc(sizeof(T) * R[2]);
... ... @@ -870,7 +981,12 @@ public:
870 981 free(temp);
871 982 return true;
872 983 }
873   - //calculate correlation coefficient matrix
  984 +
  985 + /// Calculate the covariance matrix for all masked pixels in the image.
  986 +
  987 + /// @param co is a pointer to pre-allocated memory of size [B * B] that stores the resulting covariance matrix
  988 + /// @param avg is a pointer to memory of size B that stores the average spectrum
  989 + /// @param mask is a pointer to memory of size [X * Y] that stores the mask value at each pixel location
874 990 bool co_matrix(T* co, T* avg, unsigned char *mask){
875 991 //memory allocation
876 992 unsigned long long xy = R[0] * R[1];
... ... @@ -912,7 +1028,13 @@ public:
912 1028 }
913 1029  
914 1030  
915   - //crop specified area the of the original file
  1031 + /// Crop a region of the image and save it to a new file.
  1032 +
  1033 + /// @param outfile is the file name for the new cropped image
  1034 + /// @param x0 is the lower-left x pixel coordinate to be included in the cropped image
  1035 + /// @param y0 is the lower-left y pixel coordinate to be included in the cropped image
  1036 + /// @param x1 is the upper-right x pixel coordinate to be included in the cropped image
  1037 + /// @param y1 is the upper-right y pixel coordinate to be included in the cropped image
916 1038 bool crop(std::string outfile, unsigned x0, unsigned y0, unsigned x1, unsigned y1){
917 1039  
918 1040 //calculate the new number of samples and lines
... ... @@ -937,7 +1059,7 @@ public:
937 1059 }
938 1060  
939 1061  
940   - //close the file
  1062 + /// Close the file.
941 1063 bool close(){
942 1064 file.close();
943 1065 return true;
... ...
envi/bsq.h
... ... @@ -66,9 +66,9 @@ public:
66 66 std::cout<<"ERROR: page out of range"<<std::endl;
67 67 return false;
68 68 }
69   -
  69 + //move the file pointer to the start of the page on disk
70 70 file.seekg(R[0] * R[1] * page * sizeof(T));
71   -
  71 + //read the page from disk
72 72 file.read((char *)p, sizeof(T) * R[0] * R[1]);
73 73  
74 74 return true;
... ... @@ -551,8 +551,6 @@ public:
551 551 /// @param rb2 is the label value for the right baseline point for the second peak (denominator)
552 552 /// @param pos2 is the label value for the second peak (denominator) position
553 553 /// @param result is a pointer to a pre-allocated array at least X * Y * sizeof(T) in size
554   -
555   -
556 554 bool pa_to_ph(double lb1, double rb1, double lab1, double rab1,
557 555 double lb2, double rb2, double pos, T* result){
558 556  
... ...
image/image.h
1 1 #ifndef STIM_IMAGE_H
2 2 #define STIM_IMAGE_H
3   -#define cimg_use_jpeg //necessary for JPG files
  3 +//#define cimg_use_jpeg //necessary for JPG files
4 4 #include "CImg.h"
5 5  
6 6 #include <iostream>
... ...