GetMeanSpectrum

Declaration: GetMeanSpectrum(llx, lly, urx, ury, TimeStart, TimeEnd, Group: integer; var Spect: TDoubleArray): integer;
Calculates the mean spectrum of a rectangular range of pixels. The parameters llx and lly denote the lower left corner of the range, the parameters urx and ury specify the upper right corner. The parameters TimeStart and TimeEnd specify the time range. The Group parameter determines the spectral group to be processed (valid range 1..4). The calculated mean spectrum is returned in the Spect array which is automatically resized to take up the entire spectrum.

The function returns the following error codes:

 0 ... everything is OK
-1 ... the specified spectral group does not exist
-2 ... one or more of the parameters llx, lly, urx, or ury are out of range
-3 ... the parameters TimeStart and/or TimeEnd are out of range

Sample Program: The following short example shows how to select a spectrum and how to calculate the mean spectrum of the pixels surrounding the selected position:
program MeanSpec;

const
  QUADSIZE = 5;  // size of quadratic region to be averaged
  PAGE = 1;      // chartbook page

var
  PosX, PosY     : integer;
  Layer          : integer;
  i              : integer;

begin
if SelectSpectrum(PosX, PosY, Layer, 'Please select a position') = 0 then
  begin
  GetMeanSpectrum (PosX-QUADSIZE div 2, PosY-QuadSize div 2,
                   PosX-QUADSIZE div 2+QUADSIZE-1, PosY-QuadSize div 2+QUADSIZE-1,
                   1,1,1,spec);
  ChartBook.Reset;
  ChartBook.Configure
     (PAGE,               // page 1
      true, false, false, // only the chart is visible
      250, 250);          // default width & height
  ChartBook.TabCaption[PAGE] := 'Spectrum';
  with ChartBook.Charts[PAGE] do
    begin
    Reset;
    Caption := 'Mean spectrum at position ['+IntToStr(PosX)+','+IntToStr(PosY)+
               ']; averaged area: '+IntToStr(QUADSIZE)+'x'+IntToStr(QUADSIZE)+
               ' pixels';
    GridStyle := gsDotLines;
    GridColor := clSilver;
    ScalePropsY[1].ShortTicks := false;
    MoveTo(1,spec[0]);
    for i:=1 to MData.CubeSize[dimL] do
      DrawTo (i, spec[i-1]);
    AutoRange (1,4);
    Update;
    end;
  end;
end.


Last Update: 2018-Mai-06