DOI-USGS / ISIS3

Integrated Software for Imagers and Spectrometers v3. ISIS3 is a digital image processing software package to manipulate imagery collected by current and past NASA and International planetary missions.
https://isis.astrogeology.usgs.gov
Other
195 stars 166 forks source link

Update Hapke model in photomet #5121

Open colindundas opened 1 year ago

colindundas commented 1 year ago

Randy Kirk has identified a shortcoming of the current version of photomet. As currently implemented, photomet is using an older version of the Hapke photometric model, and a newer version is available in a 2012 book. The differences between the current version in ISIS and the newer photometric function are:

In order to make ISIS compatible with the newer functional form of this photometric model, which is now being used in publications, we should update photomet. The changes to the equations relative to the existing model would be straightforward. Some updates to the user interface would be required to allow either the new or old equations to be specified, to maintain backwards compatibility and avoid breaking scripts or methods that have used the current version of photomet. However, this should not require a major development effort.

tclark96 commented 1 year ago

@colindundas Could you provide a link to the 2012 publication of the newer model.

tclark96 commented 1 year ago

Posting Notes from Randy Kirk. The references are to Hakpe, Bruce (2012), Theory of Reflectance and Emittance Spectroscopy (2nd Ed.), Cambridge Univ. Press.

Chandrasekhar H Function The Hapke model contains a term with H(u0)H(u) where u0 and u are the cosines of the incidence and emission angles respectively (the “u” conventionally stands in for the Greek “mu” so expect to see mu in typeset versions of the equations). The H function is defined by an integral equation, so it has to be approximated. Hapke’s early papers (starting with paper 1 in 1981) make use of the “two stream approximation”, which gives the following (p. 203, Eq. 8.53)

H(x) = (1 + 2 x) / (1 + 2 gamma x)

Multiplication of adjacent quantities is implied here (e.g., 2 x means 2*x). This is the approximation in the current ISIS code. The parameter gamma is related to the single scattering albedo w by gamma = sqrt(1 – w). This approximation has a maximum error of less than 4% according to the book.

Hapke’s paper 5 in 2002 introduced a better approximation for H, obtained by making a linear approximation (i.e., even worse than the one above) and substituting it into the integral equation to get the better approximation (p. 204, Eq. 8.56)

H(x) = {1 - w x [r0 + ((1 - 2 r0 x) / 2) ln((1 + x) / x)]}^(-1)

where r0 = (1 - gamma) / (1 + gamma), so both r0 and gamma depend only on w. There is no significance to the different types of braces, brackets, and parentheses here. I just copied Hapke’s use of {} and [] to distinguish the levels of nested grouping. Also, one could just as well compute 1/{…} rather than {…}^(-1) as written. This approximation has errors of <1% everywhere.

This approximation does not introduce any new user-supplied parameters; H(x) still depends only on x and w. We do need a new ISIS parameter to control which approximation is to be used, because I am not confident (yet) that we can just replace the old approximation with the new. Thus, we might have a UI parameter with a name like HFUNCTION and values like OLD and NEW or GOOD and BETTER or 2STREAM and IMPROVED, or even 1981 and 2002, though the last pair would probably be confusing to most users. I lean toward OLD and NEW as being simple and straightforward. Hopefully we can indicate what papers the old and new approximations come from in the documentation of the photometry programs.

We need old invocations (scripts) of the photometric programs to continue to work and give the same results as before, so if no value for the “switch” (HFUNCTION or whatever we call it) is given, the program should run as if OLD (or equivalent value) was specified.

Coherent Backscatter Opposition Effect (CBOE) The opposition effect is the brightening of a surface at small phase angles, i.e., when the light comes from the observer’s direction. It can be seen in everyday life as a bright halo around the shadow of one’s head cast onto grass, or of one’s airplane cast onto a cloud. Hapke’s paper 4 in 1986 derived an expression for the shadow-hiding opposition effect (SHOE), and this is in the current ISIS code. The Hapke photometric function with SHOE only is not given in the book, but it looks like this

I/F = (w/4) (u0/(u0 + u)) [(1 + Bs0 Bs(g)) p(g) + H(u0) H(u) -1]

where g is the phase angle, p(g) is the single-scattering phase function, Bs0 is a constant describing the amplitude of SHOE, and Bs(g) is approximated by (p. 232, Eq. 9.22)

Bs(g) = (1 + (1 / hs) tan(g / 2))^(-1)

in which hs is a parameter (with constant value independent of the angles for any particular surface) describing the width of SHOE. Hapke relates both Bs0 and hs to more physical quantities, but in practice they are just treated as parameters. They’re fitted to data, and then the values are used in calculations.

The preceding is just for orientation to the current state of the code. Hapke’s paper 5 in 2002 added the coherent backscatter opposition effect (CBOE), which acts in addition to SHOE by a different mechanism. It also acts by multiplying the brightness by 1 plus a function of phase angle, but CBOE multiplies the full function whereas SHOE multiplied only the p(g) term that describes the first scattering. With both, we have

I/F = (w/4) (u0/(u0 + u)) (1 + Bc0 Bc(g)) [(1 + Bs0 Bs(g)) p(g) + H(u0) H(u) -1]

where Bc0 is the amplitude and Bc(g) is the functional form. As given in Hapke (2002; Eq. 33) this is

Bc(g) = (1 + (1 - exp(-(1 / hc) tan(g / 2))) / ((1/hc) tan(g / 2))) / (2 (1 + (1 / hc) tan(g / 2))^2)

where hc is another width parameter that is constant for a given surface. The Hapke (2012) book gives a slightly more elaborate version of the function, but at least one key paper (Sato et al., 2014, Resolved Hapke Parameter Maps of the Moon, JGR, 119, 1775) that says it is following Hapke (2012) gives the above 2002 form in its Appendix of detailed equations, so I think the above is what we need to implement.

Adding CBOE does not change the current implementation of SHOE or its parameters. We need two new ISIS UI parameters for Bc0 and bc. The program should work as before when they are not specified, which means acting like Bc0 = 0 in this situation. The value of hc doesn’t matter in this situation except that if we take the obvious step of defaulting it to 0 we will get a divide by zero error in Bc(g). It’s probably best to put a check for hc=0 in the evaluation of Bc(g). When this is detected, the value Bc(g) can be returned as 0 (the function is infinitely narrow so at any nonzero phase angle it is zero). If that is done, it will be safe to let an absent UI value be treated as the value 0.

Porosity Hapke’s paper 6 in 2008 deals with the effects of porosity and the close packing of scattering particles, which modifies the photometric behavior slightly. There are three places that a porosity parameter K appears. The first is derived in the 2008 paper and the other two are in the 2012 book. The whole expression for I/F is multiplied by K The multiple scattering term H(u0)H(u) becomes H(u0/K)H(u/K) The equation for Bc(g) is modified with factors of 1.42 K in two places

There are also equations relating K to the porosity phi, but I won’t include them at the moment; like the opposition parameters, K can be treated as an empirical quantity rather than being tied to the (unknown) porosity. I am not convinced that we need to add the porosity corrections to the ISIS code, because I believe most “Hakpe fits” in the literature don’t incorporate them. Also, at least the first correction is just an overall multiplier so it won’t affect our empirical fits (for photoclinometry) or normalization of mosaics. The third effect won’t matter to those applications either, because we avoid the low phase angles for which the opposition effects are noticeable.

colindundas commented 1 year ago

Bumping this so it doesn't drop off the list.

github-actions[bot] commented 7 months ago

Thank you for your contribution!

Unfortunately, this issue hasn't received much attention lately, so it is labeled as 'stale.'

If no additional action is taken, this issue will be automatically closed in 180 days.

If you want to participate in our support prioritization meetings or be notified when support sprints are happening, you can sign up the support sprint notification emails here.

Read more about our support processs here

colindundas commented 7 months ago

Commenting again to keep this active.

github-actions[bot] commented 1 month ago

Thank you for your contribution!

Unfortunately, this issue hasn't received much attention lately, so it is labeled as 'stale.'

If no additional action is taken, this issue will be automatically closed in 180 days.

If you want to participate in our support prioritization meetings or be notified when support sprints are happening, you can sign up the support sprint notification emails here.

Read more about our support processs here