v3.0.3 - 11 Mar 2016
C$ Procedure SUBROUTINE FIND_LAMBDA_PIC(NTMP,QSZ,DNX, SP,CP,TUSE,TMPL, . LAMBDA,PHI,CHI,CHI0) C$ Abstract C C The predicted brightness for a pixel in a maplet is given by C C B = LAMBDA*ETA*ILLUM(COS(I),COS(E),PHASE)+PHI C C where I and E are incidence and emission angles, ETA is relative C albedo, normalized to 1 across the maplet. Since no attempt is made C to account for absolute radiometry, there is a constant lambda that C serves to relate the topography manifested by the slopes leading to C variations in I and E to the brightness measured by the imaging data. C Clearly, a smaller value of lambda requires a more robust topography C than a larger one, so we must have some initial idea of the topography C to determine lambda. This is accomplished by making large, low C resolution maplets to start, that owe most of their relief to the C curvature of the body from ordinary stereography. Once lambda is C determined, it sets the scale for the higher frequency topography in C the maplet. This topography, in turn, sets the scale for the higher C resolution maplets that overlap the original maplet and their even C higher frequency topography. The topography scale of any maplet is C constantly refined by contributions such as differential stereo, limb C contributions and randomly selected heights from overlapping maplets. C C This subroutine estimates the value oflambda in the brightness function C from the observed brightness distribution and the nominal topography. It C can also solve for a constant background in the brightness such as was C observed due to atmospheric scattering in Viking Orbiter images of Mars. C This latter PHI term is usually ignored by setting the parameter CHI0 = 1 C in INIT_LITHOS.TXT. 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 NTMP DOUBLE PRECISION SP(3) DOUBLE PRECISION CP(3) DOUBLE PRECISION ALPHA DOUBLE PRECISION RPD DOUBLE PRECISION VDOT DOUBLE PRECISION ILLUM DOUBLE PRECISION GAMMA DOUBLE PRECISION ETA DOUBLE PRECISION LAMBDA DOUBLE PRECISION PHI DOUBLE PRECISION CHI DOUBLE PRECISION CHI0 DOUBLE PRECISION X1 DOUBLE PRECISION X2 DOUBLE PRECISION Z0 DOUBLE PRECISION Z1 DOUBLE PRECISION Z2 DOUBLE PRECISION ZI DOUBLE PRECISION ZB DOUBLE PRECISION ZBI DOUBLE PRECISION ZBB DOUBLE PRECISION ZII REAL*4 DNX(-NTMP:NTMP,-NTMP:NTMP) REAL*4 TMPL(-NTMP:NTMP,-NTMP:NTMP,3) INTEGER QSZ INTEGER I INTEGER J INTEGER N1 LOGICAL TUSE(-NTMP:NTMP,-NTMP:NTMP) C$ Variable_I/O C C Variable I/O Description C -------- --- -------------------------------------------------- C NTMP C QSZ C DNX C SP C CP C TUSE C TMPL C LAMBDA C PHI C CHI C CHI0 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 C VDOT C C$ SPICELIB_subroutines_called C None C C$ Called_by_SPC_Programs C AUTOREGISTER C SUBROUTINE FIND_LAMBDA LAMBDA=1 PHI=0 Z0=1 ZI=0 ZB=0 ZBI=0 ZBB=0 ZII=0 N1=0 % Do per pixel DO I=-QSZ,QSZ DO J=-QSZ,QSZ IF((DNX(I,J).GT.0).AND.TUSE(I,J)) THEN X1=DNX(I,J) Z0=MIN(X1,Z0) GAMMA=SQRT(1+TMPL(I,J,1)**2+TMPL(I,J,2)**2) Z1=(SP(3)+TMPL(I,J,1)*SP(1)+TMPL(I,J,2)*SP(2))/GAMMA Z2=(CP(3)+TMPL(I,J,1)*CP(1)+TMPL(I,J,2)*CP(2))/GAMMA ETA=1+TMPL(I,J,3) ALPHA=ACOS(VDOT(CP,SP))/RPD() % phase X2=ETA*ILLUM(Z1,Z2,ALPHA) ZI=ZI+X1 ZB=ZB+X2 ZBI=ZBI+X1*X2 ZBB=ZBB+X2**2 ZII=ZII+X1**2 N1=N1+1 ENDIF ENDDO ENDDO IF((N1.GT.0).AND.(ZB.GT.0)) THEN ZI=ZI/N1 ZB=ZB/N1 ZBI=ZBI/N1 ZBB=ZBB/N1 ZII=ZII/N1 LAMBDA=ZI/ZB PHI=0 CHI=0 IF((ZBB-ZB**2.GT.0.001).AND.(ZII-ZI**2.GT.0.001)) THEN CHI=(ZBI-ZB*ZI)/SQRT((ZBB-ZB**2)*(ZII-ZI**2)) IF(CHI.GT.CHI0) THEN Z1=(ZI*ZBB-ZB*ZBI)/(ZBB-ZB**2) IF(Z1.GT.0) THEN PHI=MIN(Z0,Z1) LAMBDA=(ZI-PHI)/ZB ENDIF ENDIF ENDIF ENDIF RETURN END