McEwenIllumination.compute_photoclinometry_jacobian¶
giant.ray_tracer.illumination
:
- McEwenIllumination.compute_photoclinometry_jacobian(observations, rotation_to_inertial, max_inc=1.2217304763960306, max_emi=1.2217304763960306, max_phase=2.443460952792061, update=False, update_weight=0.005)[source]¶
This computes the Jacobian matrix of the change in the illumination values given a change in the surface normal (represented by a change in the surface slope) and a change in the local albedo values.
Mathematically the jacobian is
\[\mathbf{J}=\frac{\partial I}{\partial\left[\begin{array} {ccc} h_x & h_y & \alpha \end{array}\right]} = \left[\begin{array}{ccc} \frac{\partial I}{\partial h_x} & \frac{\partial I}{\partial h_y} & \frac{\partial I}{\partial\alpha} \end{array}\right]\]where
\[\begin{split}\frac{\partial I}{\partial h_x} = \frac{\partial I}{\partial \hat{\mathbf{n}}} \frac{\partial \hat{\mathbf{n}}}{\partial\mathbf{n}}\frac{\partial \mathbf{n}}{\partial h_x} \\ \frac{\partial I}{\partial h_y} = \frac{\partial I}{\partial \hat{\mathbf{n}}} \frac{\partial \hat{\mathbf{n}}}{\partial\mathbf{n}}\frac{\partial \mathbf{n}}{\partial h_y} \\ \frac{\partial I}{\partial \alpha} = \alpha_0\left(-(1-\beta)\mathbf{n}^T\mathbf{i} + 2\beta\frac{-\mathbf{n}^T\mathbf{i}}{-\mathbf{n}^T\mathbf{i}+\mathbf{n}^T\mathbf{e}}\right) \\ \frac{\partial I}{\partial \hat{\mathbf{n}}} = \frac{\partial I}{\partial \cos(i)} \frac{\partial \cos(i)}{\partial\hat{\mathbf{n}}} + \frac{\partial I}{\partial \cos(e)} \frac{\partial \cos(e)}{\partial\hat{\mathbf{n}}}\\ \frac{\partial I}{\partial \cos(i)} = \alpha_0\alpha(-2\beta\frac{\cos{i}}{(\cos{i}+\cos{e})^2}) \\ \frac{\partial I}{\partial \cos(e)} = \alpha_0\alpha(-2\beta\frac{\cos{i}}{(\cos{i}+\cos{e})^2}) \\ \frac{\partial \cos(i)}{\partial \hat{\mathbf{n}}} = -\mathbf{i}^T \\ \frac{\partial \cos(e)}{\partial \hat{\mathbf{n}}} = \mathbf{e}^T \\ \frac{\partial\hat{\mathbf{n}}}{\partial\mathbf{n}} = \frac{\mathbf{n}\mathbf{n}^T- \mathbf{n}^T\mathbf{n}\mathbf{I}}{(\mathbf{n}^T\mathbf{n})^{1.5}}\end{split}\]\(\cos(i)\) is the cosine of the incidence angle, \(\cos(e)\) is the cosine of the exidence angle, and all else is as defined before.
- Parameters:
observations (ndarray) – The observations as a numpy array with type
ILLUM_DTYPE
.rotation_to_inertial (ndarray) – The rotation that takes the frame the observations are expressed in into the the local frame for the surface (usually the local east north up frame)
max_inc (float) – the maximum incidence angle to consider valid in radians
max_emi (float) – the maximum emission angle to consider valid in radians
max_phase (float) – the maximum phase angle to consider valid in radians
update (bool) – A flag specifying whether to form an update Jacobian
update_weight (float) – The weight of the prior values if doing an update
- Returns:
the jacobian matrix as a n(+3)x3 array (where n is the number of observations) and a boolean array of length n specifying which rows of the jacobian matrix are valid
- Return type:
Tuple[ndarray, ndarray]