find_albedo here

From v3.0.3 - May 11 2016

   WGT=SK(K)*(1-MU*SP(3,K)**2)/LAMBDA(K)**2

   K is the image
   Mu = 0.75
   SP is sun position
   Lambda(K)  Current brightness coefficient for each image

The reduction base on incidence angle

coverage_p.jpg

C$ Procedure
 
      SUBROUTINE FIND_ALBEDO(PMX,NTMP,NPIX,QSZ,NSZ,DN1,SP,CP,
     .                       PUSE,LAMBDA,PHI,SK,TUSE,TMPL)

C$ Abstract
C
C     This subroutine is called by LITHOS  and LITHOSP if ALPAD=.TRUE. in
C     INIT_LITHOS.TXT.  It is intended to give a better estimate for the 
C     albedo at each pixel of the maplet by more appropriate weighting of 
C     the data.
C
C     The input weighting factor SK = SCALE**2/(SCALE**2+PICRES**2) approaches
C     1 for very high resolution images and 0 for very low resolution images.
C     It is then multiplied by a factor [1-0.75cos(i)] that de-emphasizes high 
C     local sun angles and by B^4/(B^4+nu^4) that de-emphasizes brightness less      
C     than nu=.05 (5% of full scale).
C
C     The sum of the weighted squared residuals between observed and predicted 
C     brightness for each image contributing to each pixel of the maplet are 
C     minimized to obtain a correction to the albedo.
C
C$ Disclaimer
C
C
C$ Required_Reading
C
C     R.W. Gaskell, et.al, "Characterizing and navigating small bodies
C           with imaging data", Meteoritics & Planetary Science 43,
C           Nr 6, 1049-1061 (2008)
C
C$ Declarations

      IMPLICIT NONE
      
      INTEGER               PMX   % Max number of images that SPC can hold
      INTEGER               NTMP  % Variable for the size of maplet
      
      DOUBLE PRECISION      SP(3,PMX)
      DOUBLE PRECISION      CP(3,PMX)
      DOUBLE PRECISION      ALPHA
      DOUBLE PRECISION      RPD
      DOUBLE PRECISION      VDOT
      DOUBLE PRECISION      ILLUM
      DOUBLE PRECISION      GAMMA
      DOUBLE PRECISION      ETA
      DOUBLE PRECISION      LAMBDA(PMX)
      DOUBLE PRECISION      PHI(PMX)
      DOUBLE PRECISION      SK(PMX)
      DOUBLE PRECISION      RSD(PMX)
      DOUBLE PRECISION      Z1, Z2, Z3, Z5, Z6
      DOUBLE PRECISION      W, M, P, WGT, MU, NU
      
      REAL*4                DN1(5000,5000)
      REAL*4                TMPL(-NTMP:NTMP,-NTMP:NTMP,3)

      INTEGER               NPIX    % Number of images contributing to maplet
      INTEGER               QSZ     % Maplet pixel range from -qsz to qsz
      INTEGER               NSZ     % Number of maplets in one row of data grid
      INTEGER               I
      INTEGER               J
      INTEGER               K
      INTEGER               N
      INTEGER               K1
      INTEGER               N1
      INTEGER               N2
      INTEGER               I0
      INTEGER               J0

      LOGICAL               TUSE(-NTMP:NTMP,-NTMP:NTMP)
      LOGICAL               PUSE(PMX)
C$ Variable_I/O
C
C     Variable  I/O  Description
C     --------  ---  --------------------------------------------------
C     PMX        I     Maximum number of images contributing to a maplet
C     NTMP       I     Maximum maplet pixel range
C     NPIX       I     Number of images contributing to maplet.
C     QSZ        I     Maplet pixel range from -qsz to qsz.
C     NSZ        I     Number of maplets in one row of data grid
C     DN1        I     Data grid with extracted and predicted maplet brightness
C     SP         I     Sun vector for each image in maplet frame
C     CP         I     Camera vector for each image in maplet frame
C     PUSE       I     .TRUE. if image used in maplet construction
C     LAMBDA     I     Current brightness coefficient for each image
C     PHI        I     Current background brightness for each picture 
C     SK         I     A weighting factor emphasizing higher res images
C     TUSE       I     .TRUE. means maplet data exists at that pixel
C     TMPL      I/O    Slope and albedo deviation at each maplet pixel
C
C$ File_I/O
C
C     Filename                      I/O  Description
C     ----------------------------  ---  -------------------------------
C     None
C
C$ Restrictions
C
C
C$ Software_Documentation
C
C     OSIRIS-REx Stereophotoclinometry Software Design Document
C     OSIRIS-REx Stereophotoclinometry Software User's Guide
C
C$ Author_and_Institution
C
C     R.W. Gaskell    (PSI)
C
C$ Version
C
C
C
C$ SPC_functions_called
C     ILLUM
C
C$ SPC_subroutines_called
C     None
C
C$ SPICELIB_functions_called
C     RPD                      % Conversion for radians/degrees
C     VDOT
C
C$ SPICELIB_subroutines_called
C     None

C$ Called_by_SPC_Programs
C     LITHOS
C     



      MU=0.75
      NU=0.05
      DO I=-QSZ,QSZ
      DO J=-QSZ,QSZ

% Assuming TMPL (template) with 1 and 2 being slope x/y and 3 being albedo
% Assuming gamma is slope
% Assuming eta is albedo (why do we add 1?)

      IF(TUSE(I,J)) THEN
        GAMMA=SQRT(1+TMPL(I,J,1)**2+TMPL(I,J,2)**2)
        ETA=1+TMPL(I,J,3)
        M=0
        W=0
        N=0
        N1=0

% For each image
        DO K=1,NPIX
        IF(PUSE(K)) THEN
          N=N+1               % counts the number of images used
          K1=(N-1)/NSZ        % scaled for the number of maplets 
          N2=N-1-NSZ*K1
          I0=(QSZ+1)*(1+2*N2)
          J0=(QSZ+1)*(1+4*K1)
          Z5=(SP(3,K)+TMPL(I,J,1)*SP(1,K)+TMPL(I,J,2)*SP(2,K))/GAMMA
          Z6=(CP(3,K)+TMPL(I,J,1)*CP(1,K)+TMPL(I,J,2)*CP(2,K))/GAMMA

% If valid 
          IF((Z5.GT.0).AND.(Z6.GT.0)) THEN
            IF(DN1(I+I0,J+J0).GT.0) THEN

% Alpha is phase?
              ALPHA=ACOS(VDOT(CP(1,K),SP(1,K)))/RPD()

% RSD is residual?  For the whole image?  It gets overwritten

              RSD(K)=DN1(I+I0,J+J0)
     .              -LAMBDA(K)*ETA*ILLUM(Z5,Z6,ALPHA)-PHI(K)
              P=LAMBDA(K)*ILLUM(Z5,Z6,ALPHA)
              WGT=SK(K)*(1-MU*SP(3,K)**2)/LAMBDA(K)**2
              Z2=DN1(I+I0,J+J0)
              WGT=WGT*Z2**4/(Z2**4+NU**4)

% What is M and W?
              M=M+P*P*WGT
              W=W+RSD(K)*P*WGT
              N1=N1+1
            ENDIF
          ENDIF
        ENDIF
        ENDDO
        IF(N1.GE.1) TMPL(I,J,3)=TMPL(I,J,3)+SNGL(W/M)
      ENDIF
      ENDDO
      ENDDO

      Z1= 1.D10
      Z2=-1.D10
      Z3=0
      N1=0
      DO I=-QSZ,QSZ
      DO J=-QSZ,QSZ
      IF(TUSE(I,J)) THEN
        Z1=MIN(Z1,TMPL(I,J,3))
        Z2=MAX(Z2,TMPL(I,J,3))
        Z3=Z3+TMPL(I,J,3)
        N1=N1+1
      ENDIF
      ENDDO
      ENDDO
      Z3=Z3/N1
      Z1=1.01*MAX(1.D0,(Z2-Z3),(Z3-Z1))
      DO I=-QSZ,QSZ
      DO J=-QSZ,QSZ
      IF(TUSE(I,J)) THEN
        TMPL(I,J,3)=(TMPL(I,J,3)-SNGL(Z3))/SNGL(Z1)
      ENDIF
      ENDDO
      ENDDO

      RETURN
      END

sub find_albedo (last edited 2019-04-12 10:56:56 by EricPalmer)