Skip to content

Surface multicomp

source module isofit.surface.surface_multicomp

Classes

  • MultiComponentSurface A model of the surface based on a collection of multivariate Gaussians, with one or more equiprobable components and full covariance matrices.

source class MultiComponentSurface(full_config: Config)

Bases : Surface

A model of the surface based on a collection of multivariate Gaussians, with one or more equiprobable components and full covariance matrices.

To evaluate the probability of a new spectrum, we calculate the distance to each component cluster.

.

Methods

  • component We pick a surface model component using a distance metric.

  • xa Mean of prior distribution, calculated at state x. We find the covariance in a normalized space (normalizing by z) and then un- normalize the result for the calling function. This always uses the Lambertian (non-specular) version of the surface reflectance.

  • Sa Covariance of prior distribution, calculated at state x. We find the covariance in a normalized space (normalizing by z) and then un- normalize the result for the calling function.

  • fit_params Given a reflectance estimate, fit a state vector.

  • calc_rfl Non-Lambertian reflectance.

  • calc_lamb Lambertian reflectance.

  • drfl_dsurface Partial derivative of reflectance with respect to state vector, calculated at x_surface.

  • dlamb_dsurface Partial derivative of Lambertian reflectance with respect to state vector, calculated at x_surface.

  • drdn_drfl Partial derivative of radiance with respect to surface reflectance

  • calc_Ls Emission of surface, as a radiance.

  • dLs_dsurface Partial derivative of surface emission with respect to state vector, calculated at x_surface.

  • drdn_dLs Partial derivative of radiance with respect to surface emission

  • drdn_dsurface Derivative of radiance with respect to full surface vector

  • analytical_model Linearization of the surface reflectance terms to use in the AOE inner loop (see Susiluoto, 2025). We set the quadratic spherical albedo term to a constant background, which simplifies the linearization background = s * rho_bg

  • summarize Summary of state vector.

  • euclidean_distance

  • spectral_angle_distance

  • spectral_gradient_angle

source method MultiComponentSurface.component(x, geom)

We pick a surface model component using a distance metric.

This always uses the Lambertian (non-specular) version of the surface reflectance. If the forward model initialize via heuristic (i.e. algebraic inversion), the component is only calculated once based on that first solution. That state is preserved in the geometry object.

Raises

  • ValueError

source method MultiComponentSurface.xa(x_surface, geom)

Mean of prior distribution, calculated at state x. We find the covariance in a normalized space (normalizing by z) and then un- normalize the result for the calling function. This always uses the Lambertian (non-specular) version of the surface reflectance.

source method MultiComponentSurface.Sa(x_surface, geom)

Covariance of prior distribution, calculated at state x. We find the covariance in a normalized space (normalizing by z) and then un- normalize the result for the calling function.

source method MultiComponentSurface.fit_params(rfl_meas, geom, *args)

Given a reflectance estimate, fit a state vector.

Raises

  • ValueError

source method MultiComponentSurface.calc_rfl(x_surface, geom)

Non-Lambertian reflectance.

Inputs

x_surface : np.ndarray Surface portion of the statevector element geom : Geometry Isofit geometry object

Outputs

rho_dir_dir : np.ndarray Reflectance quantity for downward direct photon paths rho_dif_dir : np.ndarray Reflectance quantity for downward diffuse photon paths

NOTE

We do not handle direct and diffuse photon path reflectance quantities differently for the multicomponent surface model. This is why we return the same quantity for both outputs.

source method MultiComponentSurface.calc_lamb(x_surface, geom)

Lambertian reflectance.

source method MultiComponentSurface.drfl_dsurface(x_surface, geom)

Partial derivative of reflectance with respect to state vector, calculated at x_surface.

source method MultiComponentSurface.dlamb_dsurface(x_surface, geom)

Partial derivative of Lambertian reflectance with respect to state vector, calculated at x_surface.

source method MultiComponentSurface.drdn_drfl(L_tot, s_alb, rho_dif_dir)

Partial derivative of radiance with respect to surface reflectance

source method MultiComponentSurface.calc_Ls(x_surface, geom)

Emission of surface, as a radiance.

source method MultiComponentSurface.dLs_dsurface(x_surface, geom)

Partial derivative of surface emission with respect to state vector, calculated at x_surface.

source method MultiComponentSurface.drdn_dLs(t_total_up)

Partial derivative of radiance with respect to surface emission

source method MultiComponentSurface.drdn_dsurface(rho_dif_dir, drfl_dsurface, dLs_dsurface, s_alb, t_total_up, L_tot, L_dir_dir=None, L_dir_dif=None, L_dif_dir=None, L_dif_dif=None)

Derivative of radiance with respect to full surface vector

source method MultiComponentSurface.analytical_model(background, L_tot, geom, L_dir_dir=None, L_dir_dif=None, L_dif_dir=None, L_dif_dif=None)

Linearization of the surface reflectance terms to use in the AOE inner loop (see Susiluoto, 2025). We set the quadratic spherical albedo term to a constant background, which simplifies the linearization background = s * rho_bg

source method MultiComponentSurface.summarize(x_surface, geom)

Summary of state vector.

source staticmethod MultiComponentSurface.euclidean_distance(lamb_ref, mus)

source staticmethod MultiComponentSurface.spectral_angle_distance(lamb_ref, mus)

source method MultiComponentSurface.spectral_gradient_angle(lamb_ref, mus)