From 9b466ec624520c658806ae8f3d2a86c0e83e37c0 Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Fri, 9 Feb 2024 14:39:30 -0700 Subject: [PATCH 01/14] Unfinished draft of sensor-models.md --- docs/concepts/sensor-models/sensor-models.md | 90 ++++++++++++++++++++ mkdocs.yml | 2 + 2 files changed, 92 insertions(+) create mode 100644 docs/concepts/sensor-models/sensor-models.md diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md new file mode 100644 index 0000000..47ba486 --- /dev/null +++ b/docs/concepts/sensor-models/sensor-models.md @@ -0,0 +1,90 @@ +# Sensor Models + +This document is intended to provide information related to sensor models by presenting an introduction to sensor models, a brief explanation of the Community Sensor Model (CSM), and an overview of several ASC software packages that directly relate to the instantiation and exploitation of sensor models. + +## Introduction to Sensor Models + +### Reference Systems and Reference Frames + +Before describing sensor models, it is first necessary for the reader to have an understanding of reference systems and reference frames. + +In order to describe the location of an object, it is necessary to identify a point of reference by which the object can be localized. One might think of the object with respect to their own position, but it is also possible to describe the object as being at a certain location on a grid, or even some angular distance from a known location. Despite the differences in the methods of localizing the object, each of these descriptions produces a valid representation of the object's location with respect to some point of reference. By specifying an origin about which other objects can be oriented, we begin to form the basis of a "reference system," which establishes a coordinate system that can be used to describe positions. In practice, a reference system is required to provide a point of origin, a set of axes (with an associated plane in which angular measurements can be made), and a fixed point about which the reference frame is oriented. Some examples of common photogrammetric reference systems are as follows: + +- Image Reference System: a 2-dimensional (column/row or line/sample) reference system with a defined (0,0) origin, typically at the upper-left of the the frame +- Distorted Focal Plane Reference System: a 2-dimensional (x,y) reference system nominally represented in Cartesian space and measured millimeters. This reference system is used to account for the distortion in an image reference system. +- Sensor Reference System: a 3-dimensional (x,y,z) reference system in which the z axis typically follows the sensor's boresight (if it is an optical sensor) as well as x and y axes that are traditionally parallel to the sensor's x and y axes. +- Spacecraft Reference System: a 3-dimensional (x,y,z) reference system in which the origin is centered on the spacecraft's center of mass. Axes are often represented using 𝜔, 𝜙, 𝜅, which are analogous to yaw, pitch, and roll, but instead of representing axial rotations with respect to onboard navigation, they are expressed with respect to axes of an arbitrary coordinate system. +- Body Centered Body Fixed (BCBF): a 3-dimensional (x,y,z) reference system in which the origin is centered on the target's center of mass. + +It is important to note that a reference system does not provide a description of an object's location, but it instead provides a _means_ for describing locations. When locations are described using a reference system, the result is a "coordinate reference frame," which offers information related to an object's position, orientation, and velocity at a single instant in time. + +!!! INFO "Reference System vs Reference Frame" + A __reference system__ provides an origin, axes / planes, and a fixed point that allows for the description of an object. A __reference frame__ is a description within the context of that reference system, and provides the location of an object at a given moment in time. + +Finally, reference frames often have dependencies on other reference frames, which results in a "frame chain" that must be calculated. For example, consider a common scenario in which a camera is intended to record an image of a planetary body. The camera is mounted on a gimbal, which is mounted on the spacecraft. In order to move from the image plane to a BCBF system, it is necessary to know the location of the camera and the planetary body. However, in order to know the location of the camera, it is necessary to know the extrinsics not only of the camera, but also of the gimbal and the spacecraft to which it is mounted. The dependency chain that is formed is known as a "frame chain," and the entire chain of extrinsics must be calculated in order to accurately model the objects' relative locations. + + +### Sensor Models +Briefly, a sensor model encapsulates a sensor's geometric information. In this context, "geometric information" refers to two classes of information -- interior (intrinsic) and exterior (extrinsic). Intrinsic information describes information that is internal to the sensor, such as focal length, resolution, distortion, etc. Extrinsic information relates to the sensor's physical position, velocity, and orientation, which is to say that extrinsic information may be used answer the question "where is the sensor and where is it pointing." + +@TODO expand this section, include rigorous and rational models, uses of sensor models + +!!! NOTE + The overarching goal of a sensor model is to provide a means for moving between and among a variety of reference frames, which is a necessary step in facilitating geolocation and other geodetic processes. + + +## The Community Sensor Model + +Because the only requirement of a sensor model is that it models a sensor's geometric information, the design and implementation of a sensor model largely remains open-ended. Of particular importance is the sensor's interface, i.e. what information is required to create the model and what information is produced by the model. Without a concrete interface specification, each sensor model may require and provide its own set of information, which makes it incredibly difficult to facilitate interoperability between sensor models. In order to address these concerns about interoperability, the US defense and intelligence community established the Community Sensor Model (CSM) working group, which is responsible for developing and maintaining a set of standards upon which sensor models can be implemented. The resulting CSM standard describes an application programming interface (API) for multiple sensor types. + +Alone, a CSM is of little practical use. The standard defines an interface but does not define where necessary sensor metadata should be sourced, the format of said metadata, or the implementation of the photogrammetric algorithms used by the sensor. Therefore, a CSM exists within a broader ecosystem. First, some external capability or method must be used to generate image support data (ISD) that can be used to parameterize a CSM. Then, the CSM can parse and use the ISD to extract the parameters (interior and exterior orientation) necessary to perform photogrammetric operations (as defined by the CSM API). Finally, a SET is likely used to orchestrate the pieces of the CSM ecosystem and exploits said pieces in order to use the sensor for some desired operation. (@TODO citation) + +!!! INFO "CSM -- Quick Definition" + The CSM is a standard that defines an API for sensor models, thereby providing a common structure that guarantees interoperability of any sensor models that adhere to the standard. + +## The ASC Sensor Model Ecosystem +The Astrogeology Science Center has created and maintains a suite of software packages that provide end-to-end processing for sensor models, including a metadata specification, CSM-compliant sensor model implementation, and tools to leverage those sensor models for scientific processing. + +### USGS Community Sensor Model (USGSCSM) +The USGS Community Sensor Model is a concrete implementation of sensor models according to the standards described in the CSM. Where the CSM is the set of rules and standards that guides the creation of sensor models, the USGSCSM is a library of sensor models that adheres to those rules. The USGSCSM library provides generic instances of sensor models for instantaneous (framing) cameras, time-dependent (line-scan) cameras, push-frame cameras, synthetic aperature radar (SAR), and projected sensor models. Additionally, USGSCSM provides an extensible plugin architecture that allows for additional, interface-compliant sensor models to be dynamically loaded. + +@TODO Introduce ISDs + +Sensor models implemented within USGSCSM are stateful in the sense that their underlying geometries can be modified. Moreover, it is possible to save a model's current state to a _state string_ so that a future model can be instantiated with that exact model state. This is an important capability when performing incremental modifications via a process like bundle adjustment, particularly if the user decides to undo those adjustments or share the modified state with collaborators. + +@TODO is it necessary to discuss reasons for modifying geometries? + + +!!! INFO "USGSCSM -- Quick Definition" + USGSCSM is a software library that provides generic, CSM-compliant sensor model implementations. USGSCSM sensor models can be instantiated via an ISD or a USGSCSM state string. + +### Abstraction Library for Ephemerides (ALE) +The Abstraction Library for Ephemerides (ALE) provides the tools and information necessary to derive and access a sensor's exterior information. ALE provides a suite of instrument-specific drivers that combine information from a variety of metadata formats (image labels), sensor types, and data sources into a single CSM compliant format. It is important to note that ALE is responsible for abstracting away intermediate reference frames between the body-centered, body-fixed frame and the sensor frame. + +@TODO discuss what drivers, sensor types, labels, etc. are available in ALE. Potentially describe future efforts + +!!! INFO "ALE -- Quick Definition" + ALE is a software package that relies on a collection of instrument-specific drivers in order to calculate and provide access to camera extrinsics. This information is output in a standard ISD format that provides all the information required to instantiate a CSM sensor model. + +### Integrated Software for Imagery and Spectrometry (ISIS) +ISIS is a software suite that comprises a variety of imaging analysis tools ranging from traditional tools like contrast, stretch, image algebra, and statistical analysis tools to more complex processes such as mosaicking, photometric modeling, noise reduction, and bundle adjustment. In addition to these analysis tools, ISIS provides a standard format (.cub) for images and their associated metadata as well as a means for converting non-standardized images to the .cub format. + +#### Cub Files and 2Isis Programs + +#### Bundle Adjustment / Jigsaw +ISIS's Jigsaw program provides a bundle adjustment algorithm, which is a full 3-dimensional scene reconstruction algorithm that + +1. estimates the 3 dimensional coordinates of ground points +1. estimates sensor extrinsics +1. minimizes error between the reconstructed scene and observed point locations + +Bundle adjustmnet is a critical part of the sensor model ecosystem in that it can be used to iteratively refine and correct a model's geometry, which allows for more accurate transitions between reference frames, i.e. correctly geolocating a ground point from an image plane. + +@TODO More information related to bundle adjustment can be found at ... + +## Extended Sensor Model Ecosystem +### SOCET Geospatial eXploitation Products (GXP) +### Ames Stereo Pipeline (ASP) + + +@TODO Create a graphic / flowchart / interface diagram of "requires and provides" to illustrate when/where to use each library. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 91b6563..c82093d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -85,6 +85,8 @@ nav: - Autoseed: concepts/control-networks/autoseed.md - Image Registration: concepts/control-networks/image-registration.md - Multi-Instrument Registration: concepts/control-networks/multi-instrument-registration.md + - Sensor Models: + - Sensor Models: concepts/sensor-models/sensor-models.md - Manuals: manuals/index.md extra_css: From 17bd8238245330f6bf5ab995a4b748b43d514833 Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Thu, 15 Feb 2024 18:03:48 -0700 Subject: [PATCH 02/14] Addressed PR feedback and added text --- .../sensor-models/reference-frames.md | 21 +++++ docs/concepts/sensor-models/sensor-models.md | 85 +++++++++---------- mkdocs.yml | 1 + 3 files changed, 61 insertions(+), 46 deletions(-) create mode 100644 docs/concepts/sensor-models/reference-frames.md diff --git a/docs/concepts/sensor-models/reference-frames.md b/docs/concepts/sensor-models/reference-frames.md new file mode 100644 index 0000000..25484a9 --- /dev/null +++ b/docs/concepts/sensor-models/reference-frames.md @@ -0,0 +1,21 @@ +# Reference Systems + +In order to describe the location of an object, it is necessary to identify a point of reference by which the object can be localized. One might think of the object with respect to their own position, but it is also possible to describe the object as being at a certain location on a grid, or even some angular distance from a known location. Despite the differences in the methods of localizing the object, each of these descriptions produces a valid representation of the object's location with respect to some point of reference. By specifying an origin about which other objects can be oriented, we begin to form the basis of a "reference system," which establishes a coordinate system that can be used to describe positions. In practice, a reference system is required to define a datum, which is a known coordinate reference by which unknown points can be identified and a set of axes with an associated plane in which angular measurements can be made. Some examples of common photogrammetric reference systems are as follows: + +- Image Reference System: a 2-dimensional (column/row or line/sample) reference system with a defined (0,0) datum, typically at the upper-left of the the frame +- Distorted Focal Plane Reference System: a 2-dimensional (x,y) reference system nominally represented in Cartesian space and measured millimeters. This reference system is used to account for the distortion in an image reference system. +- Sensor Reference System: a 3-dimensional (x,y,z) reference system in which the z axis typically follows the sensor's boresight (if it is an optical sensor) as well as x and y axes that are traditionally parallel to the sensor's x and y axes. +- Spacecraft Reference System: a 3-dimensional (x,y,z) reference system in which the datum is centered on the spacecraft's center of mass. Axes are often represented using 𝜔, 𝜙, 𝜅, which are analogous to yaw, pitch, and roll, but instead of representing axial rotations with respect to onboard navigation, they are expressed with respect to axes of an arbitrary coordinate system. +- Body Centered Body Fixed (BCBF): a 3-dimensional (x,y,z) reference system in which the datum is centered on the target body's center of mass. + +@TODO create a graphic + +# Reference Frames +It is important to note that a reference system does not provide a description of an object's location, but it instead provides a _means_ for describing locations. When locations are described using a reference system, the result is a "coordinate reference frame," which offers information related to an object's position, orientation, and velocity at a single instant in time. + +!!! INFO "Reference System vs Reference Frame" + A __reference system__ provides an origin, axes / planes, and a fixed point that allows for the description of an object. A __reference frame__ is a description within the context of that reference system, and provides the location of an object at a given moment in time. + +# Frame Chains + +Reference frames often have dependencies on other reference frames, which results in a "frame chain" that must be calculated. For example, consider a common scenario in which a camera is intended to record an image of a planetary body. The camera is mounted on a gimbal, which is mounted on the spacecraft. In order to move from the image plane to a BCBF system, it is necessary to know the location of both the camera and the planetary body. However, in order to know the location of the camera, it is necessary to know the extrinsics not only of the camera, but also of the gimbal and the spacecraft to which it is mounted. The dependency chain that is formed is known as a "frame chain," and the entire chain of extrinsics must be calculated in order to accurately model the objects' relative locations. diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index 47ba486..34c8036 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -2,42 +2,26 @@ This document is intended to provide information related to sensor models by presenting an introduction to sensor models, a brief explanation of the Community Sensor Model (CSM), and an overview of several ASC software packages that directly relate to the instantiation and exploitation of sensor models. -## Introduction to Sensor Models - -### Reference Systems and Reference Frames - -Before describing sensor models, it is first necessary for the reader to have an understanding of reference systems and reference frames. - -In order to describe the location of an object, it is necessary to identify a point of reference by which the object can be localized. One might think of the object with respect to their own position, but it is also possible to describe the object as being at a certain location on a grid, or even some angular distance from a known location. Despite the differences in the methods of localizing the object, each of these descriptions produces a valid representation of the object's location with respect to some point of reference. By specifying an origin about which other objects can be oriented, we begin to form the basis of a "reference system," which establishes a coordinate system that can be used to describe positions. In practice, a reference system is required to provide a point of origin, a set of axes (with an associated plane in which angular measurements can be made), and a fixed point about which the reference frame is oriented. Some examples of common photogrammetric reference systems are as follows: - -- Image Reference System: a 2-dimensional (column/row or line/sample) reference system with a defined (0,0) origin, typically at the upper-left of the the frame -- Distorted Focal Plane Reference System: a 2-dimensional (x,y) reference system nominally represented in Cartesian space and measured millimeters. This reference system is used to account for the distortion in an image reference system. -- Sensor Reference System: a 3-dimensional (x,y,z) reference system in which the z axis typically follows the sensor's boresight (if it is an optical sensor) as well as x and y axes that are traditionally parallel to the sensor's x and y axes. -- Spacecraft Reference System: a 3-dimensional (x,y,z) reference system in which the origin is centered on the spacecraft's center of mass. Axes are often represented using 𝜔, 𝜙, 𝜅, which are analogous to yaw, pitch, and roll, but instead of representing axial rotations with respect to onboard navigation, they are expressed with respect to axes of an arbitrary coordinate system. -- Body Centered Body Fixed (BCBF): a 3-dimensional (x,y,z) reference system in which the origin is centered on the target's center of mass. +!!! NOTE "Prerequisites" + An understanding of sensor models requires familiarity with [reference systems and reference frames](../sensor-models/reference-frames.md). -It is important to note that a reference system does not provide a description of an object's location, but it instead provides a _means_ for describing locations. When locations are described using a reference system, the result is a "coordinate reference frame," which offers information related to an object's position, orientation, and velocity at a single instant in time. - -!!! INFO "Reference System vs Reference Frame" - A __reference system__ provides an origin, axes / planes, and a fixed point that allows for the description of an object. A __reference frame__ is a description within the context of that reference system, and provides the location of an object at a given moment in time. - -Finally, reference frames often have dependencies on other reference frames, which results in a "frame chain" that must be calculated. For example, consider a common scenario in which a camera is intended to record an image of a planetary body. The camera is mounted on a gimbal, which is mounted on the spacecraft. In order to move from the image plane to a BCBF system, it is necessary to know the location of the camera and the planetary body. However, in order to know the location of the camera, it is necessary to know the extrinsics not only of the camera, but also of the gimbal and the spacecraft to which it is mounted. The dependency chain that is formed is known as a "frame chain," and the entire chain of extrinsics must be calculated in order to accurately model the objects' relative locations. +## Introduction to Sensor Models +!!! NOTE + The overarching goal of a sensor model is to provide a means for moving between and among a variety of reference frames, which is a necessary step in facilitating geolocation and other geodetic processes. -### Sensor Models -Briefly, a sensor model encapsulates a sensor's geometric information. In this context, "geometric information" refers to two classes of information -- interior (intrinsic) and exterior (extrinsic). Intrinsic information describes information that is internal to the sensor, such as focal length, resolution, distortion, etc. Extrinsic information relates to the sensor's physical position, velocity, and orientation, which is to say that extrinsic information may be used answer the question "where is the sensor and where is it pointing." +A sensor model provides a mathematical description of the relationship between an object and its representation within the sensor. Within the context of imaging, this sensor model (or camera model) describes the relationship between a 3-dimensional object and its 2-dimensional representation on an imaging plane. As a mathematical model, a sensor model is responsible for capturing the sensor's geometric information, which refers to two classes of information -- interior orientation and exterior orientation. A sensor's interior orientation describes information that is internal to the sensor, such as focal length, resolution, and distortion, and exterior orientation relates to the sensor's physical position, velocity, and pointing information. -@TODO expand this section, include rigorous and rational models, uses of sensor models +It is important to understand that a camera model itself does not capture any information related to an image observation. As a purely mathematical representation, a camera model is responsible for mapping the location of a line/sample on the sensor to a location on the target body, and it is completely agnostic of the wavelength information (DN) that is captured by the sensor. More information related to image observations and digital numbers can be found [here](@TODO). -!!! NOTE - The overarching goal of a sensor model is to provide a means for moving between and among a variety of reference frames, which is a necessary step in facilitating geolocation and other geodetic processes. +Sensor models that support full transformation from the image plane to the BCBF coordinate system fall into two general classes -- rigorous models and rational functional models. Rigorous sensor models function by taking ephemeris information (position, orientation, and velocity; Kidder, 2015) with respect to some reference frame and utilize mathematical models to spatialize the image location onto the target body. (@TODO cite). Rational functional models approximate this information using rational polynomial coefficients without exposing the interior and exterior orientation of the instrument. Within this document (and the ASC sensor model ecosystem), we focus on rigorous models. ## The Community Sensor Model -Because the only requirement of a sensor model is that it models a sensor's geometric information, the design and implementation of a sensor model largely remains open-ended. Of particular importance is the sensor's interface, i.e. what information is required to create the model and what information is produced by the model. Without a concrete interface specification, each sensor model may require and provide its own set of information, which makes it incredibly difficult to facilitate interoperability between sensor models. In order to address these concerns about interoperability, the US defense and intelligence community established the Community Sensor Model (CSM) working group, which is responsible for developing and maintaining a set of standards upon which sensor models can be implemented. The resulting CSM standard describes an application programming interface (API) for multiple sensor types. +Because the only requirement of a sensor model is that it models a sensor's geometric information, the design and implementation of a sensor model largely remains open-ended. Of particular importance is the sensor's interface, i.e. what information is required to create the model and what information is produced by the model. Without a concrete interface specification, each sensor model may require and provide its own set of information, which makes it incredibly difficult to facilitate interoperability between sensor models. In order to address these concerns about interoperability, the US defense and intelligence community established the [Community Sensor Model (CSM) working group](https://gwg.nga.mil/gwg/focus-groups/Community_Sensor_Model_Working_Group_(CSMWG).html) , which is responsible for developing and maintaining a set of standards upon which sensor models can be implemented. The resulting CSM standard describes an application programming interface (API) for multiple sensor types. -Alone, a CSM is of little practical use. The standard defines an interface but does not define where necessary sensor metadata should be sourced, the format of said metadata, or the implementation of the photogrammetric algorithms used by the sensor. Therefore, a CSM exists within a broader ecosystem. First, some external capability or method must be used to generate image support data (ISD) that can be used to parameterize a CSM. Then, the CSM can parse and use the ISD to extract the parameters (interior and exterior orientation) necessary to perform photogrammetric operations (as defined by the CSM API). Finally, a SET is likely used to orchestrate the pieces of the CSM ecosystem and exploits said pieces in order to use the sensor for some desired operation. (@TODO citation) +Alone, a CSM is of little practical use. The standard defines an interface but does not define where necessary sensor metadata should be sourced, the format of said metadata, or the implementation of the photogrammetric algorithms used by the sensor. Therefore, a CSM exists within a broader ecosystem. First, some external capability or method must be used to generate image support data (ISD) that can be used to parameterize a CSM. Then, the CSM can parse and use the ISD to extract the parameters (interior and exterior orientation) necessary to perform photogrammetric operations (as defined by the CSM API). Finally, a SET is likely used to orchestrate the pieces of the CSM ecosystem and exploits said pieces in order to use the sensor for some desired operation [(Laura et al., 2020)](https://doi.org/10.1029/2019EA000713) !!! INFO "CSM -- Quick Definition" The CSM is a standard that defines an API for sensor models, thereby providing a common structure that guarantees interoperability of any sensor models that adhere to the standard. @@ -45,46 +29,55 @@ Alone, a CSM is of little practical use. The standard defines an interface but d ## The ASC Sensor Model Ecosystem The Astrogeology Science Center has created and maintains a suite of software packages that provide end-to-end processing for sensor models, including a metadata specification, CSM-compliant sensor model implementation, and tools to leverage those sensor models for scientific processing. -### USGS Community Sensor Model (USGSCSM) -The USGS Community Sensor Model is a concrete implementation of sensor models according to the standards described in the CSM. Where the CSM is the set of rules and standards that guides the creation of sensor models, the USGSCSM is a library of sensor models that adheres to those rules. The USGSCSM library provides generic instances of sensor models for instantaneous (framing) cameras, time-dependent (line-scan) cameras, push-frame cameras, synthetic aperature radar (SAR), and projected sensor models. Additionally, USGSCSM provides an extensible plugin architecture that allows for additional, interface-compliant sensor models to be dynamically loaded. - -@TODO Introduce ISDs - -Sensor models implemented within USGSCSM are stateful in the sense that their underlying geometries can be modified. Moreover, it is possible to save a model's current state to a _state string_ so that a future model can be instantiated with that exact model state. This is an important capability when performing incremental modifications via a process like bundle adjustment, particularly if the user decides to undo those adjustments or share the modified state with collaborators. - -@TODO is it necessary to discuss reasons for modifying geometries? - - -!!! INFO "USGSCSM -- Quick Definition" - USGSCSM is a software library that provides generic, CSM-compliant sensor model implementations. USGSCSM sensor models can be instantiated via an ISD or a USGSCSM state string. ### Abstraction Library for Ephemerides (ALE) -The Abstraction Library for Ephemerides (ALE) provides the tools and information necessary to derive and access a sensor's exterior information. ALE provides a suite of instrument-specific drivers that combine information from a variety of metadata formats (image labels), sensor types, and data sources into a single CSM compliant format. It is important to note that ALE is responsible for abstracting away intermediate reference frames between the body-centered, body-fixed frame and the sensor frame. +The [Abstraction Library for Ephemerides](https://github.com/DOI-USGS/ale/) (ALE) provides the tools and information necessary to derive and access a sensor's exterior orientation. ALE provides a suite of instrument-specific drivers that combine information from a variety of metadata formats (image labels), sensor types, and data sources into a single CSM compliant format. It is important to note that ALE is responsible for abstracting away intermediate reference frames between the body-centered, body-fixed frame and the sensor frame so that the resulting model can transform directly from the sensor frame to the BCBF frame. -@TODO discuss what drivers, sensor types, labels, etc. are available in ALE. Potentially describe future efforts +ALE uses a collection of drivers and class mixins to provide ISDs for a variety of sensor models. [Drivers](https://github.com/DOI-USGS/ale/tree/main/ale/drivers) for many major missions are available in ALE. Each driver is required to provide support for at least one label type (ISIS or PDS3) and one source of SPICE data (ISIS or NAIF). It is important to note that not all drivers currently support all combinations of labels and SPICE data sources. !!! INFO "ALE -- Quick Definition" - ALE is a software package that relies on a collection of instrument-specific drivers in order to calculate and provide access to camera extrinsics. This information is output in a standard ISD format that provides all the information required to instantiate a CSM sensor model. + ALE is a software package that relies on a collection of instrument-specific drivers in order to calculate and provide access to camera exterior orientations. This information is output in a standard ISD format that provides all the information required to instantiate a CSM sensor model. ### Integrated Software for Imagery and Spectrometry (ISIS) -ISIS is a software suite that comprises a variety of imaging analysis tools ranging from traditional tools like contrast, stretch, image algebra, and statistical analysis tools to more complex processes such as mosaicking, photometric modeling, noise reduction, and bundle adjustment. In addition to these analysis tools, ISIS provides a standard format (.cub) for images and their associated metadata as well as a means for converting non-standardized images to the .cub format. - -#### Cub Files and 2Isis Programs +[ISIS](https://github.com/DOI-USGS/ISIS3) is a software suite that comprises a variety of image analysis tools ranging from traditional tools like contrast, stretch, image algebra, and statistical analysis tools to more complex processes such as mosaicking, photometric modeling, noise reduction, and bundle adjustment. In addition to these analysis tools, ISIS defines the .cub format which can capture 3-dimensional image data (lines, samples, and bands) as well as image metadata in the form of an image label. In addition to capturing image data and metadata, .cub files can be augmented with camera geometry information such that elements of the camera model are captured alongside the data. #### Bundle Adjustment / Jigsaw ISIS's Jigsaw program provides a bundle adjustment algorithm, which is a full 3-dimensional scene reconstruction algorithm that 1. estimates the 3 dimensional coordinates of ground points -1. estimates sensor extrinsics +1. estimates sensor exterior orientations 1. minimizes error between the reconstructed scene and observed point locations Bundle adjustmnet is a critical part of the sensor model ecosystem in that it can be used to iteratively refine and correct a model's geometry, which allows for more accurate transitions between reference frames, i.e. correctly geolocating a ground point from an image plane. -@TODO More information related to bundle adjustment can be found at ... +More information related to bundle adjustment can be found [here](https://isis.astrogeology.usgs.gov/Application/presentation/Tabbed/jigsaw/jigsaw.html) + +#### ISIS Camera Models +Because ISIS predates the CSM, it contains camera models that are not compliant with the CSM API. ISIS contains camera models for framing, pushframe, linescan, radar, point, and rolling shutter cameras. While ISIS's cameras models are authoritative and mathematically correct, they are only usable within the context of ISIS. However, ISIS has also been modified to interoperate with CSM cameras. While ISIS camera models are still actively used, efforts are being taken to replace these proprietary models with CSM compliant models via the USGSCSM library. + +### USGS Community Sensor Model (USGSCSM) +The [USGS Community Sensor Model](https://github.com/DOI-USGS/usgscsm) is a concrete implementation of sensor models according to the standards described in the CSM. Where the CSM is the set of rules and standards that guides the creation of sensor models, the USGSCSM is a library of sensor models that adheres to those rules. The USGSCSM library provides generic instances of sensor models for instantaneous (framing) cameras, time-dependent (line-scan) cameras, push-frame cameras, synthetic aperature radar (SAR), and projected sensor models. Additionally, USGSCSM provides an extensible plugin architecture that allows for additional, interface-compliant sensor models to be dynamically loaded. + +A camera model can be instantiated using image support data (ISD), but the CSM does not describe any particular source or format for that information. USGSCSM allows ISDs to be formatted as [JSON](https://www.json.org/json-en.html), [NITF](https://pro.arcgis.com/en/pro-app/latest/help/data/nitf/introduction-to-nitf-data.htm), or bytestreams. Because an ISD is intended to provide all the information necessary to instantiate a sensor model, it is required to contain both interior and exterior orientation information. + +Sensor models implemented within USGSCSM are stateful in that their underlying geometries can be modified. Moreover, it is possible to save a model's current state to a _state string_ so that a future model can be instantiated with that exact model state. This is an important capability when performing incremental modifications via a process like bundle adjustment, particularly if the user decides to undo those adjustments or share the modified state with collaborators. + + +!!! INFO "USGSCSM -- Quick Definition" + USGSCSM is a software library that provides generic, CSM-compliant sensor model implementations. USGSCSM sensor models can be instantiated via an ISD or a USGSCSM state string. + ## Extended Sensor Model Ecosystem +This section details several packages that are created and maintained outside of the Astrogeology Science Center but that are commonly used in conjunction with elements of the ASC sensor model ecosystem. + ### SOCET Geospatial eXploitation Products (GXP) +[SOCET GXP](https://www.geospatialexploitationproducts.com/content/socet-gxp/) is a software toolkit used to identify and analyze ground features. While it is possible to use a subset of GXP's capability's with simple sensor models, its core capabilities are largely dependent on rigorous sensor models. GXP not only includes its own sensor model implementations, but it also allows for external sensor models via CSM plugin support. By leveraging these sensor models, users can perform photogrammetric operations such as triangulation, mensuration, stereo viewing, automated DTM generation, and orthophoto generation. Unlike ISIS, GXP can be used for both terrestrial and extraterrestrial applications. + ### Ames Stereo Pipeline (ASP) +The NASA [Ames Stereo Pipeline](https://stereopipeline.readthedocs.io/en/latest/introduction.html) (ASP) is an open-source toolkit used to create cartographic products from stereographic images captured by satellites, rovers, aerial cameras, and historical images. ASP is commonly used to create digital elevation models (DEMs), orthographic images, 3D models, and bundle adjusted networks of images. (@TODO cite https://stereopipeline.readthedocs.io/en/latest/introduction.html) + +While there is considerable overlap in the tools provided by ISIS and ASP, ASP specializes in stereographic imagery, and it provides both terrestrial and non-terrestrial imaging capabilites while ISIS focuses solely on non-terrestrial imagery. ASP adopts the USGSCSM camera model implementation and can therefore easily interoperate with ISIS and the ASC ecosystem. + @TODO Create a graphic / flowchart / interface diagram of "requires and provides" to illustrate when/where to use each library. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index c82093d..2be4d29 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -86,6 +86,7 @@ nav: - Image Registration: concepts/control-networks/image-registration.md - Multi-Instrument Registration: concepts/control-networks/multi-instrument-registration.md - Sensor Models: + - Reference Frames: concepts/sensor-models/reference-frames.md - Sensor Models: concepts/sensor-models/sensor-models.md - Manuals: manuals/index.md From e7d0a2cb294e14b4b82d2ea36b08ca5274b06fda Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Thu, 15 Feb 2024 18:05:40 -0700 Subject: [PATCH 03/14] Removed incorrect DN description --- docs/concepts/sensor-models/sensor-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index 34c8036..d56ba48 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -12,7 +12,7 @@ This document is intended to provide information related to sensor models by pre A sensor model provides a mathematical description of the relationship between an object and its representation within the sensor. Within the context of imaging, this sensor model (or camera model) describes the relationship between a 3-dimensional object and its 2-dimensional representation on an imaging plane. As a mathematical model, a sensor model is responsible for capturing the sensor's geometric information, which refers to two classes of information -- interior orientation and exterior orientation. A sensor's interior orientation describes information that is internal to the sensor, such as focal length, resolution, and distortion, and exterior orientation relates to the sensor's physical position, velocity, and pointing information. -It is important to understand that a camera model itself does not capture any information related to an image observation. As a purely mathematical representation, a camera model is responsible for mapping the location of a line/sample on the sensor to a location on the target body, and it is completely agnostic of the wavelength information (DN) that is captured by the sensor. More information related to image observations and digital numbers can be found [here](@TODO). +It is important to understand that a camera model itself does not capture any information related to an image observation. As a purely mathematical representation, a camera model is responsible for mapping the location of a line/sample on the sensor to a location on the target body, and it is completely agnostic of the information that is captured by the sensor. More information related to image observations and digital numbers can be found [here](@TODO). Sensor models that support full transformation from the image plane to the BCBF coordinate system fall into two general classes -- rigorous models and rational functional models. Rigorous sensor models function by taking ephemeris information (position, orientation, and velocity; Kidder, 2015) with respect to some reference frame and utilize mathematical models to spatialize the image location onto the target body. (@TODO cite). Rational functional models approximate this information using rational polynomial coefficients without exposing the interior and exterior orientation of the instrument. Within this document (and the ASC sensor model ecosystem), we focus on rigorous models. From 73215459de56a817d05c55bba58ff495b1691803 Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Thu, 15 Feb 2024 18:16:26 -0700 Subject: [PATCH 04/14] codespell and gramma --- docs/concepts/sensor-models/reference-frames.md | 2 +- docs/concepts/sensor-models/sensor-models.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/concepts/sensor-models/reference-frames.md b/docs/concepts/sensor-models/reference-frames.md index 25484a9..f203548 100644 --- a/docs/concepts/sensor-models/reference-frames.md +++ b/docs/concepts/sensor-models/reference-frames.md @@ -2,7 +2,7 @@ In order to describe the location of an object, it is necessary to identify a point of reference by which the object can be localized. One might think of the object with respect to their own position, but it is also possible to describe the object as being at a certain location on a grid, or even some angular distance from a known location. Despite the differences in the methods of localizing the object, each of these descriptions produces a valid representation of the object's location with respect to some point of reference. By specifying an origin about which other objects can be oriented, we begin to form the basis of a "reference system," which establishes a coordinate system that can be used to describe positions. In practice, a reference system is required to define a datum, which is a known coordinate reference by which unknown points can be identified and a set of axes with an associated plane in which angular measurements can be made. Some examples of common photogrammetric reference systems are as follows: -- Image Reference System: a 2-dimensional (column/row or line/sample) reference system with a defined (0,0) datum, typically at the upper-left of the the frame +- Image Reference System: a 2-dimensional (column/row or line/sample) reference system with a defined (0,0) datum, typically at the upper-left of the frame - Distorted Focal Plane Reference System: a 2-dimensional (x,y) reference system nominally represented in Cartesian space and measured millimeters. This reference system is used to account for the distortion in an image reference system. - Sensor Reference System: a 3-dimensional (x,y,z) reference system in which the z axis typically follows the sensor's boresight (if it is an optical sensor) as well as x and y axes that are traditionally parallel to the sensor's x and y axes. - Spacecraft Reference System: a 3-dimensional (x,y,z) reference system in which the datum is centered on the spacecraft's center of mass. Axes are often represented using 𝜔, 𝜙, 𝜅, which are analogous to yaw, pitch, and roll, but instead of representing axial rotations with respect to onboard navigation, they are expressed with respect to axes of an arbitrary coordinate system. diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index d56ba48..4f8775b 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -44,8 +44,8 @@ ALE uses a collection of drivers and class mixins to provide ISDs for a variety #### Bundle Adjustment / Jigsaw ISIS's Jigsaw program provides a bundle adjustment algorithm, which is a full 3-dimensional scene reconstruction algorithm that -1. estimates the 3 dimensional coordinates of ground points -1. estimates sensor exterior orientations +1. provides estimates of the 3-dimensional coordinates of ground points +1. provides estimates of the sensor's exterior orientations 1. minimizes error between the reconstructed scene and observed point locations Bundle adjustmnet is a critical part of the sensor model ecosystem in that it can be used to iteratively refine and correct a model's geometry, which allows for more accurate transitions between reference frames, i.e. correctly geolocating a ground point from an image plane. @@ -56,7 +56,7 @@ More information related to bundle adjustment can be found [here](https://isis.a Because ISIS predates the CSM, it contains camera models that are not compliant with the CSM API. ISIS contains camera models for framing, pushframe, linescan, radar, point, and rolling shutter cameras. While ISIS's cameras models are authoritative and mathematically correct, they are only usable within the context of ISIS. However, ISIS has also been modified to interoperate with CSM cameras. While ISIS camera models are still actively used, efforts are being taken to replace these proprietary models with CSM compliant models via the USGSCSM library. ### USGS Community Sensor Model (USGSCSM) -The [USGS Community Sensor Model](https://github.com/DOI-USGS/usgscsm) is a concrete implementation of sensor models according to the standards described in the CSM. Where the CSM is the set of rules and standards that guides the creation of sensor models, the USGSCSM is a library of sensor models that adheres to those rules. The USGSCSM library provides generic instances of sensor models for instantaneous (framing) cameras, time-dependent (line-scan) cameras, push-frame cameras, synthetic aperature radar (SAR), and projected sensor models. Additionally, USGSCSM provides an extensible plugin architecture that allows for additional, interface-compliant sensor models to be dynamically loaded. +The [USGS Community Sensor Model](https://github.com/DOI-USGS/usgscsm) is a concrete implementation of sensor models according to the standards described in the CSM. Where the CSM is the set of rules and standards that guides the creation of sensor models, the USGSCSM is a library of sensor models that adheres to those rules. The USGSCSM library provides generic instances of sensor models for instantaneous (framing) cameras, time-dependent (line-scan) cameras, push-frame cameras, synthetic aperture radar (SAR), and projected sensor models. Additionally, USGSCSM provides an extensible plugin architecture that allows for additional, interface-compliant sensor models to be dynamically loaded. A camera model can be instantiated using image support data (ISD), but the CSM does not describe any particular source or format for that information. USGSCSM allows ISDs to be formatted as [JSON](https://www.json.org/json-en.html), [NITF](https://pro.arcgis.com/en/pro-app/latest/help/data/nitf/introduction-to-nitf-data.htm), or bytestreams. Because an ISD is intended to provide all the information necessary to instantiate a sensor model, it is required to contain both interior and exterior orientation information. @@ -68,7 +68,7 @@ Sensor models implemented within USGSCSM are stateful in that their underlying g ## Extended Sensor Model Ecosystem -This section details several packages that are created and maintained outside of the Astrogeology Science Center but that are commonly used in conjunction with elements of the ASC sensor model ecosystem. +This section details several packages that are created and maintained outside the Astrogeology Science Center but are commonly used in conjunction with elements of the ASC sensor model ecosystem. ### SOCET Geospatial eXploitation Products (GXP) [SOCET GXP](https://www.geospatialexploitationproducts.com/content/socet-gxp/) is a software toolkit used to identify and analyze ground features. While it is possible to use a subset of GXP's capability's with simple sensor models, its core capabilities are largely dependent on rigorous sensor models. GXP not only includes its own sensor model implementations, but it also allows for external sensor models via CSM plugin support. By leveraging these sensor models, users can perform photogrammetric operations such as triangulation, mensuration, stereo viewing, automated DTM generation, and orthophoto generation. Unlike ISIS, GXP can be used for both terrestrial and extraterrestrial applications. @@ -77,7 +77,7 @@ This section details several packages that are created and maintained outside of The NASA [Ames Stereo Pipeline](https://stereopipeline.readthedocs.io/en/latest/introduction.html) (ASP) is an open-source toolkit used to create cartographic products from stereographic images captured by satellites, rovers, aerial cameras, and historical images. ASP is commonly used to create digital elevation models (DEMs), orthographic images, 3D models, and bundle adjusted networks of images. (@TODO cite https://stereopipeline.readthedocs.io/en/latest/introduction.html) -While there is considerable overlap in the tools provided by ISIS and ASP, ASP specializes in stereographic imagery, and it provides both terrestrial and non-terrestrial imaging capabilites while ISIS focuses solely on non-terrestrial imagery. ASP adopts the USGSCSM camera model implementation and can therefore easily interoperate with ISIS and the ASC ecosystem. +While there is considerable overlap in the tools provided by ISIS and ASP, ASP specializes in stereographic imagery, and it provides both terrestrial and non-terrestrial imaging capabilities while ISIS focuses solely on non-terrestrial imagery. ASP adopts the USGSCSM camera model implementation and can therefore easily interoperate with ISIS and the ASC ecosystem. @TODO Create a graphic / flowchart / interface diagram of "requires and provides" to illustrate when/where to use each library. \ No newline at end of file From 24f32a773e377827ad22d2d480569503e3398e6c Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Fri, 16 Feb 2024 12:14:30 -0700 Subject: [PATCH 05/14] Mermaid sequence diagram and requiremens setup --- docs/concepts/sensor-models/sensor-models.md | 11 +++++++++-- mkdocs.yml | 7 ++++++- requirements.txt | 1 + 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index 4f8775b..be6cb5a 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -79,5 +79,12 @@ The NASA [Ames Stereo Pipeline](https://stereopipeline.readthedocs.io/en/latest/ While there is considerable overlap in the tools provided by ISIS and ASP, ASP specializes in stereographic imagery, and it provides both terrestrial and non-terrestrial imaging capabilities while ISIS focuses solely on non-terrestrial imagery. ASP adopts the USGSCSM camera model implementation and can therefore easily interoperate with ISIS and the ASC ecosystem. - -@TODO Create a graphic / flowchart / interface diagram of "requires and provides" to illustrate when/where to use each library. \ No newline at end of file +@TODO Create a graphic / flowchart / interface diagram of "requires and provides" to illustrate when/where to use each library. + +``` mermaid +graph TD + A[/ISIS Data/] --> C + B[/PDS Data/] --> C + C[ALE] --> |ISD|D[USGSCSM] + D <--> |Sensor Model|E[ISIS] & F[SOCET GXP] & G[ASP] --> H(Science Ready Data Product) +``` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 2be4d29..0214513 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -103,6 +103,7 @@ extra_javascript: plugins: - search - mknotebooks + - mermaid2 markdown_extensions: - codehilite @@ -127,7 +128,11 @@ markdown_extensions: pygments_lang_class: true - pymdownx.inlinehilite - pymdownx.snippets - - pymdownx.superfences + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.emoji: emoji_index: !!python/name:materialx.emoji.twemoji emoji_generator: !!python/name:materialx.emoji.to_svg diff --git a/requirements.txt b/requirements.txt index adb5028..d91d7a3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ mkdocs mkdocs-material +mkdocs-mermaid2-plugin neoteroi-mkdocs codespell linkchecker From f3a61c465922792e9db8fee1074d0244b90d8bf5 Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Fri, 16 Feb 2024 13:02:23 -0700 Subject: [PATCH 06/14] Added figures and citations --- .../sensor_models/ess2507-fig-0001-m.jpg | Bin 0 -> 125389 bytes .../concepts/sensor-models/reference-frames.md | 6 +++++- docs/concepts/sensor-models/sensor-models.md | 6 ++---- 3 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 docs/assets/sensor_models/ess2507-fig-0001-m.jpg diff --git a/docs/assets/sensor_models/ess2507-fig-0001-m.jpg b/docs/assets/sensor_models/ess2507-fig-0001-m.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e43496e271ef83e9f6eb40b7395556c97b79e06 GIT binary patch literal 125389 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®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 MUiMJ`0P@rS+45lzLI3~& literal 0 HcmV?d00001 diff --git a/docs/concepts/sensor-models/reference-frames.md b/docs/concepts/sensor-models/reference-frames.md index f203548..deb19a4 100644 --- a/docs/concepts/sensor-models/reference-frames.md +++ b/docs/concepts/sensor-models/reference-frames.md @@ -8,7 +8,11 @@ In order to describe the location of an object, it is necessary to identify a po - Spacecraft Reference System: a 3-dimensional (x,y,z) reference system in which the datum is centered on the spacecraft's center of mass. Axes are often represented using 𝜔, 𝜙, 𝜅, which are analogous to yaw, pitch, and roll, but instead of representing axial rotations with respect to onboard navigation, they are expressed with respect to axes of an arbitrary coordinate system. - Body Centered Body Fixed (BCBF): a 3-dimensional (x,y,z) reference system in which the datum is centered on the target body's center of mass. -@TODO create a graphic +
+ ![Reference Systems](../../assets/sensor_models/ess2507-fig-0001-m.jpg) +
Reference Systems: (a) Framing sensor image reference frame with origin in upper left corner of the upper left pixel; (b) distorted focal plane reference frame with the distorted origin again in the upper left; (c) sensor (1), gimbal (2a, 2b illustrating an articulated gimbal), and spacecraft (3) reference frames; (d) spacecraft reference frame in the standard configuration with the x axis being the orbital path; (e) body-centered body-fixed (BCBF) reference frame (Laura et al., 2020).
+
+ # Reference Frames It is important to note that a reference system does not provide a description of an object's location, but it instead provides a _means_ for describing locations. When locations are described using a reference system, the result is a "coordinate reference frame," which offers information related to an object's position, orientation, and velocity at a single instant in time. diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index be6cb5a..30a0e82 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -14,7 +14,7 @@ A sensor model provides a mathematical description of the relationship between a It is important to understand that a camera model itself does not capture any information related to an image observation. As a purely mathematical representation, a camera model is responsible for mapping the location of a line/sample on the sensor to a location on the target body, and it is completely agnostic of the information that is captured by the sensor. More information related to image observations and digital numbers can be found [here](@TODO). -Sensor models that support full transformation from the image plane to the BCBF coordinate system fall into two general classes -- rigorous models and rational functional models. Rigorous sensor models function by taking ephemeris information (position, orientation, and velocity; Kidder, 2015) with respect to some reference frame and utilize mathematical models to spatialize the image location onto the target body. (@TODO cite). Rational functional models approximate this information using rational polynomial coefficients without exposing the interior and exterior orientation of the instrument. Within this document (and the ASC sensor model ecosystem), we focus on rigorous models. +Sensor models that support full transformation from the image plane to the BCBF coordinate system fall into two general classes -- rigorous models and rational functional models. Rigorous sensor models function by taking ephemeris information (position, orientation, and velocity) with respect to some reference frame and utilize mathematical models to spatialize the image location onto the target body [(Laura et al., 2020)](https://doi.org/10.1029/2019EA000713). Rational functional models approximate this information using rational polynomial coefficients without exposing the interior and exterior orientation of the instrument. Within this document (and the ASC sensor model ecosystem), we focus on rigorous models due to the availability of interior and exterior orientation information. ## The Community Sensor Model @@ -75,12 +75,10 @@ This section details several packages that are created and maintained outside th ### Ames Stereo Pipeline (ASP) -The NASA [Ames Stereo Pipeline](https://stereopipeline.readthedocs.io/en/latest/introduction.html) (ASP) is an open-source toolkit used to create cartographic products from stereographic images captured by satellites, rovers, aerial cameras, and historical images. ASP is commonly used to create digital elevation models (DEMs), orthographic images, 3D models, and bundle adjusted networks of images. (@TODO cite https://stereopipeline.readthedocs.io/en/latest/introduction.html) +The NASA [Ames Stereo Pipeline](https://stereopipeline.readthedocs.io/en/latest/introduction.html) (ASP) is an open-source toolkit used to create cartographic products from stereographic images captured by satellites, rovers, aerial cameras, and historical images. ASP is commonly used to create digital elevation models (DEMs), orthographic images, 3D models, and bundle adjusted networks of images ([Beyer, Ross A., Oleg Alexandrov, and Scott McMichael. 2018](https://doi.org/10.1029/2018EA000409)). While there is considerable overlap in the tools provided by ISIS and ASP, ASP specializes in stereographic imagery, and it provides both terrestrial and non-terrestrial imaging capabilities while ISIS focuses solely on non-terrestrial imagery. ASP adopts the USGSCSM camera model implementation and can therefore easily interoperate with ISIS and the ASC ecosystem. -@TODO Create a graphic / flowchart / interface diagram of "requires and provides" to illustrate when/where to use each library. - ``` mermaid graph TD A[/ISIS Data/] --> C From f688a770a0814d71adee367ece8c5762ae3a9ce6 Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Sun, 18 Feb 2024 18:17:39 -0700 Subject: [PATCH 07/14] Updated glossary to include ISD --- definitions.md | 3 ++- docs/concepts/glossary.md | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/definitions.md b/definitions.md index f4e2aab..9c002b6 100644 --- a/definitions.md +++ b/definitions.md @@ -32,4 +32,5 @@ *[PVL]: Parameter Value Language (PVL) is used extensively by ISIS as a standard keyword value type language for naming and expressing data values. PVL format in ISIS is compatible with syntax used by the Planetary Data System. *[MAP]: A representation of a three dimensional target such as a sphere, ellipsoid or an irregular shaped body onto a plane *[IAU]: The International Astronomical Union -*[Scale]: The map resolution measured in pixels per degree \ No newline at end of file +*[Scale]: The map resolution measured in pixels per degree +*[ISD]: Image Support Data. The interior and exterior orientation data used to instantiate a camera model. \ No newline at end of file diff --git a/docs/concepts/glossary.md b/docs/concepts/glossary.md index 2cc63ae..6938d08 100644 --- a/docs/concepts/glossary.md +++ b/docs/concepts/glossary.md @@ -197,4 +197,8 @@ ###Camera Coordinate System A camera coordinate system is used to determine positions and directions of objects and vectors with respect to a sensor (i.e. camera). The origin is at the center of the sensor and the axes rotate and move through space with the sensor. These systems are non-inertial, meaning the velocity of the origin is non-constant. The location of the center of a spacecraft and its instruments at a given time are defined in NAIF SPK files. Generally, one or more frames are associated with a particular instrument. ###J2000 Coordinate System - The J2000 coordinate system (also known as EME2000) is based on the earth mean equator and dynamical equinox at midnight January 1, 2000. The origin is at the solar system barycenter. This system is inertial, since it does not rotate with respect to stars and the origin is not accelerating (i.e it has a constant velocity). This coordinate system is the root reference for NAIF's SPICE files and software. \ No newline at end of file + The J2000 coordinate system (also known as EME2000) is based on the earth mean equator and dynamical equinox at midnight January 1, 2000. The origin is at the solar system barycenter. This system is inertial, since it does not rotate with respect to stars and the origin is not accelerating (i.e it has a constant velocity). This coordinate system is the root reference for NAIF's SPICE files and software. +###ISD + Image Support Data. The interior and exterior orientation data used to instantiate a camera model. +###Image Support Data + The interior and exterior orientation data used to instantiate a camera model. \ No newline at end of file From 44d3e9cc6e61504ea3c1cf63d2d412c79bba58c6 Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Sun, 18 Feb 2024 18:18:36 -0700 Subject: [PATCH 08/14] Moved all quick definitions to top of sections, reworded some sections --- docs/concepts/sensor-models/sensor-models.md | 27 ++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index 30a0e82..7c82ab5 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -19,24 +19,25 @@ Sensor models that support full transformation from the image plane to the BCBF ## The Community Sensor Model +!!! INFO "CSM -- Quick Definition" + The CSM is a standard that defines an API for sensor models, thereby providing a common structure that guarantees interoperability of any sensor models that adhere to the standard. + Because the only requirement of a sensor model is that it models a sensor's geometric information, the design and implementation of a sensor model largely remains open-ended. Of particular importance is the sensor's interface, i.e. what information is required to create the model and what information is produced by the model. Without a concrete interface specification, each sensor model may require and provide its own set of information, which makes it incredibly difficult to facilitate interoperability between sensor models. In order to address these concerns about interoperability, the US defense and intelligence community established the [Community Sensor Model (CSM) working group](https://gwg.nga.mil/gwg/focus-groups/Community_Sensor_Model_Working_Group_(CSMWG).html) , which is responsible for developing and maintaining a set of standards upon which sensor models can be implemented. The resulting CSM standard describes an application programming interface (API) for multiple sensor types. -Alone, a CSM is of little practical use. The standard defines an interface but does not define where necessary sensor metadata should be sourced, the format of said metadata, or the implementation of the photogrammetric algorithms used by the sensor. Therefore, a CSM exists within a broader ecosystem. First, some external capability or method must be used to generate image support data (ISD) that can be used to parameterize a CSM. Then, the CSM can parse and use the ISD to extract the parameters (interior and exterior orientation) necessary to perform photogrammetric operations (as defined by the CSM API). Finally, a SET is likely used to orchestrate the pieces of the CSM ecosystem and exploits said pieces in order to use the sensor for some desired operation [(Laura et al., 2020)](https://doi.org/10.1029/2019EA000713) +Alone, a CSM is of little practical use. The standard defines an interface but does not define where necessary sensor metadata should be sourced, the format of said metadata, or the implementation of the photogrammetric algorithms used by the sensor. Therefore, a CSM exists within a broader ecosystem. First, some external capability or method must be used to generate the inputs (interior and exterior orientations) to the sensor model. Within the CSM, these inputs are known as image support data (ISD). Then, the CSM can parse and use the ISD to extract the parameters (interior and exterior orientation) necessary to perform photogrammetric operations (as defined by the CSM API). Finally, a SET is likely used to orchestrate the pieces of the CSM ecosystem and exploits said pieces in order to use the sensor for some desired operation [(Laura et al., 2020)](https://doi.org/10.1029/2019EA000713) -!!! INFO "CSM -- Quick Definition" - The CSM is a standard that defines an API for sensor models, thereby providing a common structure that guarantees interoperability of any sensor models that adhere to the standard. ## The ASC Sensor Model Ecosystem The Astrogeology Science Center has created and maintains a suite of software packages that provide end-to-end processing for sensor models, including a metadata specification, CSM-compliant sensor model implementation, and tools to leverage those sensor models for scientific processing. ### Abstraction Library for Ephemerides (ALE) -The [Abstraction Library for Ephemerides](https://github.com/DOI-USGS/ale/) (ALE) provides the tools and information necessary to derive and access a sensor's exterior orientation. ALE provides a suite of instrument-specific drivers that combine information from a variety of metadata formats (image labels), sensor types, and data sources into a single CSM compliant format. It is important to note that ALE is responsible for abstracting away intermediate reference frames between the body-centered, body-fixed frame and the sensor frame so that the resulting model can transform directly from the sensor frame to the BCBF frame. +!!! INFO "ALE -- Quick Definition" + ALE is a software package that relies on a collection of instrument-specific drivers in order to calculate and provide access to a camera's interior and exterior orientations. This information is output in a standard ISD format that provides all the information required to instantiate a CSM sensor model. -ALE uses a collection of drivers and class mixins to provide ISDs for a variety of sensor models. [Drivers](https://github.com/DOI-USGS/ale/tree/main/ale/drivers) for many major missions are available in ALE. Each driver is required to provide support for at least one label type (ISIS or PDS3) and one source of SPICE data (ISIS or NAIF). It is important to note that not all drivers currently support all combinations of labels and SPICE data sources. +The [Abstraction Library for Ephemerides](https://github.com/DOI-USGS/ale/) (ALE) provides the tools and information necessary to derive and access a sensor's interior and exterior orientation. ALE provides a suite of instrument-specific drivers that combine information from a variety of metadata formats (image labels), sensor types, and data sources into a single CSM compliant format. It is important to note that ALE is responsible for abstracting away intermediate reference frames between the body-centered, body-fixed frame and the sensor frame so that the resulting model can transform directly from the sensor frame to the BCBF frame. -!!! INFO "ALE -- Quick Definition" - ALE is a software package that relies on a collection of instrument-specific drivers in order to calculate and provide access to camera exterior orientations. This information is output in a standard ISD format that provides all the information required to instantiate a CSM sensor model. +ALE uses a collection of drivers and class mixins to provide an ISD for a variety of sensor models. [Drivers](https://github.com/DOI-USGS/ale/tree/main/ale/drivers) for many major missions are available in ALE. Each driver is required to provide support for at least one label type (ISIS or PDS3) and one source of SPICE data (ISIS or NAIF). It is important to note that not every supported mission provides a driver for all combinations of label types and SPICE data sources. ### Integrated Software for Imagery and Spectrometry (ISIS) [ISIS](https://github.com/DOI-USGS/ISIS3) is a software suite that comprises a variety of image analysis tools ranging from traditional tools like contrast, stretch, image algebra, and statistical analysis tools to more complex processes such as mosaicking, photometric modeling, noise reduction, and bundle adjustment. In addition to these analysis tools, ISIS defines the .cub format which can capture 3-dimensional image data (lines, samples, and bands) as well as image metadata in the form of an image label. In addition to capturing image data and metadata, .cub files can be augmented with camera geometry information such that elements of the camera model are captured alongside the data. @@ -56,6 +57,10 @@ More information related to bundle adjustment can be found [here](https://isis.a Because ISIS predates the CSM, it contains camera models that are not compliant with the CSM API. ISIS contains camera models for framing, pushframe, linescan, radar, point, and rolling shutter cameras. While ISIS's cameras models are authoritative and mathematically correct, they are only usable within the context of ISIS. However, ISIS has also been modified to interoperate with CSM cameras. While ISIS camera models are still actively used, efforts are being taken to replace these proprietary models with CSM compliant models via the USGSCSM library. ### USGS Community Sensor Model (USGSCSM) + +!!! INFO "USGSCSM -- Quick Definition" + USGSCSM is a software library that provides generic, CSM-compliant sensor model implementations. USGSCSM sensor models can be instantiated via an ISD or a USGSCSM state string. + The [USGS Community Sensor Model](https://github.com/DOI-USGS/usgscsm) is a concrete implementation of sensor models according to the standards described in the CSM. Where the CSM is the set of rules and standards that guides the creation of sensor models, the USGSCSM is a library of sensor models that adheres to those rules. The USGSCSM library provides generic instances of sensor models for instantaneous (framing) cameras, time-dependent (line-scan) cameras, push-frame cameras, synthetic aperture radar (SAR), and projected sensor models. Additionally, USGSCSM provides an extensible plugin architecture that allows for additional, interface-compliant sensor models to be dynamically loaded. A camera model can be instantiated using image support data (ISD), but the CSM does not describe any particular source or format for that information. USGSCSM allows ISDs to be formatted as [JSON](https://www.json.org/json-en.html), [NITF](https://pro.arcgis.com/en/pro-app/latest/help/data/nitf/introduction-to-nitf-data.htm), or bytestreams. Because an ISD is intended to provide all the information necessary to instantiate a sensor model, it is required to contain both interior and exterior orientation information. @@ -63,10 +68,6 @@ A camera model can be instantiated using image support data (ISD), but the CSM d Sensor models implemented within USGSCSM are stateful in that their underlying geometries can be modified. Moreover, it is possible to save a model's current state to a _state string_ so that a future model can be instantiated with that exact model state. This is an important capability when performing incremental modifications via a process like bundle adjustment, particularly if the user decides to undo those adjustments or share the modified state with collaborators. -!!! INFO "USGSCSM -- Quick Definition" - USGSCSM is a software library that provides generic, CSM-compliant sensor model implementations. USGSCSM sensor models can be instantiated via an ISD or a USGSCSM state string. - - ## Extended Sensor Model Ecosystem This section details several packages that are created and maintained outside the Astrogeology Science Center but are commonly used in conjunction with elements of the ASC sensor model ecosystem. @@ -81,8 +82,8 @@ While there is considerable overlap in the tools provided by ISIS and ASP, ASP s ``` mermaid graph TD - A[/ISIS Data/] --> C - B[/PDS Data/] --> C + A[/Interior Orientation e.g., SPICE instrument kernel/] --> C + B[/Exterior Orientation e.g., SPICE ephemeris/] --> C C[ALE] --> |ISD|D[USGSCSM] D <--> |Sensor Model|E[ISIS] & F[SOCET GXP] & G[ASP] --> H(Science Ready Data Product) ``` \ No newline at end of file From 182e1a5571e0a08e04dfb273c344ddb57de6093f Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Sun, 18 Feb 2024 19:11:25 -0700 Subject: [PATCH 09/14] Address doc PR feedback --- docs/concepts/sensor-models/sensor-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index 7c82ab5..d131290 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -65,7 +65,7 @@ The [USGS Community Sensor Model](https://github.com/DOI-USGS/usgscsm) is a conc A camera model can be instantiated using image support data (ISD), but the CSM does not describe any particular source or format for that information. USGSCSM allows ISDs to be formatted as [JSON](https://www.json.org/json-en.html), [NITF](https://pro.arcgis.com/en/pro-app/latest/help/data/nitf/introduction-to-nitf-data.htm), or bytestreams. Because an ISD is intended to provide all the information necessary to instantiate a sensor model, it is required to contain both interior and exterior orientation information. -Sensor models implemented within USGSCSM are stateful in that their underlying geometries can be modified. Moreover, it is possible to save a model's current state to a _state string_ so that a future model can be instantiated with that exact model state. This is an important capability when performing incremental modifications via a process like bundle adjustment, particularly if the user decides to undo those adjustments or share the modified state with collaborators. +Sensor models implemented within USGSCSM are stateful in that their underlying geometries can be modified. Moreover, it is possible to save a model's current state to a _state string_ so that a future model can be instantiated with that exact model state. This is an important capability when performing incremental modifications via a process like bundle adjustment or [performing alignment](https://stereopipeline.readthedocs.io/en/latest/tools/pc_align.html) between digital terrain models and reference DTMs or point clouds, particularly if the user decides to undo those adjustments or share the modified state with collaborators. ## Extended Sensor Model Ecosystem From 0f4e538cca95df0a874b0340d3c60fd3445cdc05 Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Sun, 18 Feb 2024 19:39:38 -0700 Subject: [PATCH 10/14] Split ecosystem docs into separate file --- .../sensor-models/sensor-model-software.md | 63 ++++++++++++++++++ docs/concepts/sensor-models/sensor-models.md | 64 +------------------ mkdocs.yml | 1 + 3 files changed, 67 insertions(+), 61 deletions(-) create mode 100644 docs/concepts/sensor-models/sensor-model-software.md diff --git a/docs/concepts/sensor-models/sensor-model-software.md b/docs/concepts/sensor-models/sensor-model-software.md new file mode 100644 index 0000000..ab6bee3 --- /dev/null +++ b/docs/concepts/sensor-models/sensor-model-software.md @@ -0,0 +1,63 @@ +# Sensor Model Software +This document provides a list of several software packages that implement, manage, or interact with sensor models. This is not a complete list, and it is only intended to provide examples of how software packages can be used to create or interact with sensor models. + +## The ASC Sensor Model Ecosystem +The Astrogeology Science Center has created and maintains a suite of software packages to manage the creation and exploitation of sensor models. These tools provide an end-to-end pipeline for the creation, management, and exploitation of sensor models, including including a metadata specification, a CSM-compliant sensor model implementation, and tools to leverage those sensor models for scientific processing. + + +### Abstraction Library for Ephemerides (ALE) +!!! INFO "ALE -- Quick Definition" + ALE is a software package that relies on a collection of instrument-specific drivers in order to calculate and provide access to a camera's interior and exterior orientations. This information is output in a standard ISD format that provides all the information required to instantiate a CSM sensor model. + +The [Abstraction Library for Ephemerides](https://github.com/DOI-USGS/ale/) (ALE) provides the tools and information necessary to derive and access a sensor's interior and exterior orientation. ALE provides a suite of instrument-specific drivers that combine information from a variety of metadata formats (image labels), sensor types, and data sources into a single CSM compliant format. It is important to note that ALE is responsible for abstracting away intermediate reference frames between the body-centered, body-fixed frame and the sensor frame so that the resulting model can transform directly from the sensor frame to the BCBF frame. + +ALE uses a collection of drivers and class mixins to provide an ISD for a variety of sensor models. [Drivers](https://github.com/DOI-USGS/ale/tree/main/ale/drivers) for many major missions are available in ALE. Each driver is required to provide support for at least one label type (ISIS or PDS3) and one source of SPICE data (ISIS or NAIF). It is important to note that not every supported mission provides a driver for all combinations of label types and SPICE data sources. + +### Integrated Software for Imagery and Spectrometry (ISIS) +[ISIS](https://github.com/DOI-USGS/ISIS3) is a software suite that comprises a variety of image analysis tools ranging from traditional tools like contrast, stretch, image algebra, and statistical analysis tools to more complex processes such as mosaicking, photometric modeling, noise reduction, and bundle adjustment. In addition to these analysis tools, ISIS defines the .cub format which can capture 3-dimensional image data (lines, samples, and bands) as well as image metadata in the form of an image label. In addition to capturing image data and metadata, .cub files can be augmented with camera geometry information such that elements of the camera model are captured alongside the data. + +#### Bundle Adjustment / Jigsaw +ISIS's Jigsaw program provides a bundle adjustment algorithm, which is a full 3-dimensional scene reconstruction algorithm that + +1. provides estimates of the 3-dimensional coordinates of ground points +1. provides estimates of the sensor's exterior orientations +1. minimizes error between the reconstructed scene and observed point locations + +Bundle adjustmnet is a critical part of the sensor model ecosystem in that it can be used to iteratively refine and correct a model's geometry, which allows for more accurate transitions between reference frames, i.e. correctly geolocating a ground point from an image plane. + +More information related to bundle adjustment can be found [here](https://isis.astrogeology.usgs.gov/Application/presentation/Tabbed/jigsaw/jigsaw.html) + +#### ISIS Camera Models +Because ISIS predates the CSM, it contains camera models that are not compliant with the CSM API. ISIS contains camera models for framing, pushframe, linescan, radar, point, and rolling shutter cameras. While ISIS's cameras models are authoritative and mathematically correct, they are only usable within the context of ISIS. However, ISIS has also been modified to interoperate with CSM cameras. While ISIS camera models are still actively used, efforts are being taken to replace these proprietary models with CSM compliant models via the USGSCSM library. + +### USGS Community Sensor Model (USGSCSM) + +!!! INFO "USGSCSM -- Quick Definition" + USGSCSM is a software library that provides generic, CSM-compliant sensor model implementations. USGSCSM sensor models can be instantiated via an ISD or a USGSCSM state string. + +The [USGS Community Sensor Model](https://github.com/DOI-USGS/usgscsm) is a concrete implementation of sensor models according to the standards described in the CSM. Where the CSM is the set of rules and standards that guides the creation of sensor models, the USGSCSM is a library of sensor models that adheres to those rules. The USGSCSM library provides generic instances of sensor models for instantaneous (framing) cameras, time-dependent (line-scan) cameras, push-frame cameras, synthetic aperture radar (SAR), and projected sensor models. Additionally, USGSCSM provides an extensible plugin architecture that allows for additional, interface-compliant sensor models to be dynamically loaded. + +A camera model can be instantiated using image support data (ISD), but the CSM does not describe any particular source or format for that information. USGSCSM allows ISDs to be formatted as [JSON](https://www.json.org/json-en.html), [NITF](https://pro.arcgis.com/en/pro-app/latest/help/data/nitf/introduction-to-nitf-data.htm), or bytestreams. Because an ISD is intended to provide all the information necessary to instantiate a sensor model, it is required to contain both interior and exterior orientation information. + +Sensor models implemented within USGSCSM are stateful in that their underlying geometries can be modified. Moreover, it is possible to save a model's current state to a _state string_ so that a future model can be instantiated with that exact model state. This is an important capability when performing incremental modifications via a process like bundle adjustment or [performing alignment](https://stereopipeline.readthedocs.io/en/latest/tools/pc_align.html) between digital terrain models and reference DTMs or point clouds, particularly if the user decides to undo those adjustments or share the modified state with collaborators. + + +## Extended Sensor Model Ecosystem +This section details several packages that are created and maintained outside the Astrogeology Science Center but are commonly used in conjunction with elements of the ASC sensor model ecosystem. + +### SOCET Geospatial eXploitation Products (GXP) +[SOCET GXP](https://www.geospatialexploitationproducts.com/content/socet-gxp/) is a software toolkit used to identify and analyze ground features. While it is possible to use a subset of GXP's capability's with simple sensor models, its core capabilities are largely dependent on rigorous sensor models. GXP not only includes its own sensor model implementations, but it also allows for external sensor models via CSM plugin support. By leveraging these sensor models, users can perform photogrammetric operations such as triangulation, mensuration, stereo viewing, automated DTM generation, and orthophoto generation. Unlike ISIS, GXP can be used for both terrestrial and extraterrestrial applications. + +### Ames Stereo Pipeline (ASP) + +The NASA [Ames Stereo Pipeline](https://stereopipeline.readthedocs.io/en/latest/introduction.html) (ASP) is an open-source toolkit used to create cartographic products from stereographic images captured by satellites, rovers, aerial cameras, and historical images. ASP is commonly used to create digital elevation models (DEMs), orthographic images, 3D models, and bundle adjusted networks of images ([Beyer, Ross A., Oleg Alexandrov, and Scott McMichael. 2018](https://doi.org/10.1029/2018EA000409)). + +While there is considerable overlap in the tools provided by ISIS and ASP, ASP specializes in stereographic imagery, and it provides both terrestrial and non-terrestrial imaging capabilities while ISIS focuses solely on non-terrestrial imagery. ASP adopts the USGSCSM camera model implementation and can therefore easily interoperate with ISIS and the ASC ecosystem. + +``` mermaid +graph TD + A[/Interior Orientation e.g., SPICE instrument kernel/] --> C + B[/Exterior Orientation e.g., SPICE ephemeris/] --> C + C[ALE] --> |ISD|D[USGSCSM] + D <--> |Sensor Model|E[ISIS] & F[SOCET GXP] & G[ASP] --> H(Science Ready Data Product) +``` \ No newline at end of file diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index d131290..1ad624b 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -7,7 +7,7 @@ This document is intended to provide information related to sensor models by pre ## Introduction to Sensor Models -!!! NOTE +!!! NOTE "The Purpose of Sensor Models" The overarching goal of a sensor model is to provide a means for moving between and among a variety of reference frames, which is a necessary step in facilitating geolocation and other geodetic processes. A sensor model provides a mathematical description of the relationship between an object and its representation within the sensor. Within the context of imaging, this sensor model (or camera model) describes the relationship between a 3-dimensional object and its 2-dimensional representation on an imaging plane. As a mathematical model, a sensor model is responsible for capturing the sensor's geometric information, which refers to two classes of information -- interior orientation and exterior orientation. A sensor's interior orientation describes information that is internal to the sensor, such as focal length, resolution, and distortion, and exterior orientation relates to the sensor's physical position, velocity, and pointing information. @@ -27,63 +27,5 @@ Because the only requirement of a sensor model is that it models a sensor's geom Alone, a CSM is of little practical use. The standard defines an interface but does not define where necessary sensor metadata should be sourced, the format of said metadata, or the implementation of the photogrammetric algorithms used by the sensor. Therefore, a CSM exists within a broader ecosystem. First, some external capability or method must be used to generate the inputs (interior and exterior orientations) to the sensor model. Within the CSM, these inputs are known as image support data (ISD). Then, the CSM can parse and use the ISD to extract the parameters (interior and exterior orientation) necessary to perform photogrammetric operations (as defined by the CSM API). Finally, a SET is likely used to orchestrate the pieces of the CSM ecosystem and exploits said pieces in order to use the sensor for some desired operation [(Laura et al., 2020)](https://doi.org/10.1029/2019EA000713) -## The ASC Sensor Model Ecosystem -The Astrogeology Science Center has created and maintains a suite of software packages that provide end-to-end processing for sensor models, including a metadata specification, CSM-compliant sensor model implementation, and tools to leverage those sensor models for scientific processing. - - -### Abstraction Library for Ephemerides (ALE) -!!! INFO "ALE -- Quick Definition" - ALE is a software package that relies on a collection of instrument-specific drivers in order to calculate and provide access to a camera's interior and exterior orientations. This information is output in a standard ISD format that provides all the information required to instantiate a CSM sensor model. - -The [Abstraction Library for Ephemerides](https://github.com/DOI-USGS/ale/) (ALE) provides the tools and information necessary to derive and access a sensor's interior and exterior orientation. ALE provides a suite of instrument-specific drivers that combine information from a variety of metadata formats (image labels), sensor types, and data sources into a single CSM compliant format. It is important to note that ALE is responsible for abstracting away intermediate reference frames between the body-centered, body-fixed frame and the sensor frame so that the resulting model can transform directly from the sensor frame to the BCBF frame. - -ALE uses a collection of drivers and class mixins to provide an ISD for a variety of sensor models. [Drivers](https://github.com/DOI-USGS/ale/tree/main/ale/drivers) for many major missions are available in ALE. Each driver is required to provide support for at least one label type (ISIS or PDS3) and one source of SPICE data (ISIS or NAIF). It is important to note that not every supported mission provides a driver for all combinations of label types and SPICE data sources. - -### Integrated Software for Imagery and Spectrometry (ISIS) -[ISIS](https://github.com/DOI-USGS/ISIS3) is a software suite that comprises a variety of image analysis tools ranging from traditional tools like contrast, stretch, image algebra, and statistical analysis tools to more complex processes such as mosaicking, photometric modeling, noise reduction, and bundle adjustment. In addition to these analysis tools, ISIS defines the .cub format which can capture 3-dimensional image data (lines, samples, and bands) as well as image metadata in the form of an image label. In addition to capturing image data and metadata, .cub files can be augmented with camera geometry information such that elements of the camera model are captured alongside the data. - -#### Bundle Adjustment / Jigsaw -ISIS's Jigsaw program provides a bundle adjustment algorithm, which is a full 3-dimensional scene reconstruction algorithm that - -1. provides estimates of the 3-dimensional coordinates of ground points -1. provides estimates of the sensor's exterior orientations -1. minimizes error between the reconstructed scene and observed point locations - -Bundle adjustmnet is a critical part of the sensor model ecosystem in that it can be used to iteratively refine and correct a model's geometry, which allows for more accurate transitions between reference frames, i.e. correctly geolocating a ground point from an image plane. - -More information related to bundle adjustment can be found [here](https://isis.astrogeology.usgs.gov/Application/presentation/Tabbed/jigsaw/jigsaw.html) - -#### ISIS Camera Models -Because ISIS predates the CSM, it contains camera models that are not compliant with the CSM API. ISIS contains camera models for framing, pushframe, linescan, radar, point, and rolling shutter cameras. While ISIS's cameras models are authoritative and mathematically correct, they are only usable within the context of ISIS. However, ISIS has also been modified to interoperate with CSM cameras. While ISIS camera models are still actively used, efforts are being taken to replace these proprietary models with CSM compliant models via the USGSCSM library. - -### USGS Community Sensor Model (USGSCSM) - -!!! INFO "USGSCSM -- Quick Definition" - USGSCSM is a software library that provides generic, CSM-compliant sensor model implementations. USGSCSM sensor models can be instantiated via an ISD or a USGSCSM state string. - -The [USGS Community Sensor Model](https://github.com/DOI-USGS/usgscsm) is a concrete implementation of sensor models according to the standards described in the CSM. Where the CSM is the set of rules and standards that guides the creation of sensor models, the USGSCSM is a library of sensor models that adheres to those rules. The USGSCSM library provides generic instances of sensor models for instantaneous (framing) cameras, time-dependent (line-scan) cameras, push-frame cameras, synthetic aperture radar (SAR), and projected sensor models. Additionally, USGSCSM provides an extensible plugin architecture that allows for additional, interface-compliant sensor models to be dynamically loaded. - -A camera model can be instantiated using image support data (ISD), but the CSM does not describe any particular source or format for that information. USGSCSM allows ISDs to be formatted as [JSON](https://www.json.org/json-en.html), [NITF](https://pro.arcgis.com/en/pro-app/latest/help/data/nitf/introduction-to-nitf-data.htm), or bytestreams. Because an ISD is intended to provide all the information necessary to instantiate a sensor model, it is required to contain both interior and exterior orientation information. - -Sensor models implemented within USGSCSM are stateful in that their underlying geometries can be modified. Moreover, it is possible to save a model's current state to a _state string_ so that a future model can be instantiated with that exact model state. This is an important capability when performing incremental modifications via a process like bundle adjustment or [performing alignment](https://stereopipeline.readthedocs.io/en/latest/tools/pc_align.html) between digital terrain models and reference DTMs or point clouds, particularly if the user decides to undo those adjustments or share the modified state with collaborators. - - -## Extended Sensor Model Ecosystem -This section details several packages that are created and maintained outside the Astrogeology Science Center but are commonly used in conjunction with elements of the ASC sensor model ecosystem. - -### SOCET Geospatial eXploitation Products (GXP) -[SOCET GXP](https://www.geospatialexploitationproducts.com/content/socet-gxp/) is a software toolkit used to identify and analyze ground features. While it is possible to use a subset of GXP's capability's with simple sensor models, its core capabilities are largely dependent on rigorous sensor models. GXP not only includes its own sensor model implementations, but it also allows for external sensor models via CSM plugin support. By leveraging these sensor models, users can perform photogrammetric operations such as triangulation, mensuration, stereo viewing, automated DTM generation, and orthophoto generation. Unlike ISIS, GXP can be used for both terrestrial and extraterrestrial applications. - -### Ames Stereo Pipeline (ASP) - -The NASA [Ames Stereo Pipeline](https://stereopipeline.readthedocs.io/en/latest/introduction.html) (ASP) is an open-source toolkit used to create cartographic products from stereographic images captured by satellites, rovers, aerial cameras, and historical images. ASP is commonly used to create digital elevation models (DEMs), orthographic images, 3D models, and bundle adjusted networks of images ([Beyer, Ross A., Oleg Alexandrov, and Scott McMichael. 2018](https://doi.org/10.1029/2018EA000409)). - -While there is considerable overlap in the tools provided by ISIS and ASP, ASP specializes in stereographic imagery, and it provides both terrestrial and non-terrestrial imaging capabilities while ISIS focuses solely on non-terrestrial imagery. ASP adopts the USGSCSM camera model implementation and can therefore easily interoperate with ISIS and the ASC ecosystem. - -``` mermaid -graph TD - A[/Interior Orientation e.g., SPICE instrument kernel/] --> C - B[/Exterior Orientation e.g., SPICE ephemeris/] --> C - C[ALE] --> |ISD|D[USGSCSM] - D <--> |Sensor Model|E[ISIS] & F[SOCET GXP] & G[ASP] --> H(Science Ready Data Product) -``` \ No newline at end of file +!!! INFO "Sensor Model Software" + While it is _possible_ to represent sensor models without using software, manually representing and interacting with sensor models is prohibitively difficult. Instead, there are numerous [software packages](../sensor-models/sensor-model-software.md) that allow for the convenient instantiation, management, and exploitation of those software models. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 0214513..6224538 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -88,6 +88,7 @@ nav: - Sensor Models: - Reference Frames: concepts/sensor-models/reference-frames.md - Sensor Models: concepts/sensor-models/sensor-models.md + - Sensor Model Software: concepts/sensor-models/sensor-model-software.md - Manuals: manuals/index.md extra_css: From ed77222f5ad53912a9d7a0b2369f907d30114e1d Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Sun, 18 Feb 2024 19:41:42 -0700 Subject: [PATCH 11/14] gramma and codespell --- docs/concepts/sensor-models/sensor-model-software.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/sensor-models/sensor-model-software.md b/docs/concepts/sensor-models/sensor-model-software.md index ab6bee3..39fa2eb 100644 --- a/docs/concepts/sensor-models/sensor-model-software.md +++ b/docs/concepts/sensor-models/sensor-model-software.md @@ -2,7 +2,7 @@ This document provides a list of several software packages that implement, manage, or interact with sensor models. This is not a complete list, and it is only intended to provide examples of how software packages can be used to create or interact with sensor models. ## The ASC Sensor Model Ecosystem -The Astrogeology Science Center has created and maintains a suite of software packages to manage the creation and exploitation of sensor models. These tools provide an end-to-end pipeline for the creation, management, and exploitation of sensor models, including including a metadata specification, a CSM-compliant sensor model implementation, and tools to leverage those sensor models for scientific processing. +The Astrogeology Science Center has created and maintains a suite of software packages to manage the creation and exploitation of sensor models. These tools provide an end-to-end pipeline for the creation, management, and exploitation of sensor models, including a metadata specification, a CSM-compliant sensor model implementation, and tools to leverage those sensor models for scientific processing. ### Abstraction Library for Ephemerides (ALE) From 852f1584a5c782c2edde8b451acc7a2d4a1e4f6a Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Tue, 20 Feb 2024 16:09:27 -0700 Subject: [PATCH 12/14] Updated software link description --- docs/concepts/sensor-models/sensor-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index 1ad624b..c47c22f 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -28,4 +28,4 @@ Alone, a CSM is of little practical use. The standard defines an interface but d !!! INFO "Sensor Model Software" - While it is _possible_ to represent sensor models without using software, manually representing and interacting with sensor models is prohibitively difficult. Instead, there are numerous [software packages](../sensor-models/sensor-model-software.md) that allow for the convenient instantiation, management, and exploitation of those software models. \ No newline at end of file + There are numerous [software packages](../sensor-models/sensor-model-software.md) that allow for the convenient instantiation, management, and exploitation of those software models. \ No newline at end of file From 7d27df73065eae5f62495d379d0993dd65ed09ca Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Mon, 26 Feb 2024 21:14:26 -0700 Subject: [PATCH 13/14] Replaced todo with 'further docs' message --- docs/concepts/sensor-models/sensor-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/sensor-models/sensor-models.md b/docs/concepts/sensor-models/sensor-models.md index c47c22f..6091eb7 100644 --- a/docs/concepts/sensor-models/sensor-models.md +++ b/docs/concepts/sensor-models/sensor-models.md @@ -12,7 +12,7 @@ This document is intended to provide information related to sensor models by pre A sensor model provides a mathematical description of the relationship between an object and its representation within the sensor. Within the context of imaging, this sensor model (or camera model) describes the relationship between a 3-dimensional object and its 2-dimensional representation on an imaging plane. As a mathematical model, a sensor model is responsible for capturing the sensor's geometric information, which refers to two classes of information -- interior orientation and exterior orientation. A sensor's interior orientation describes information that is internal to the sensor, such as focal length, resolution, and distortion, and exterior orientation relates to the sensor's physical position, velocity, and pointing information. -It is important to understand that a camera model itself does not capture any information related to an image observation. As a purely mathematical representation, a camera model is responsible for mapping the location of a line/sample on the sensor to a location on the target body, and it is completely agnostic of the information that is captured by the sensor. More information related to image observations and digital numbers can be found [here](@TODO). +It is important to understand that a camera model itself does not capture any information related to an image observation. As a purely mathematical representation, a camera model is responsible for mapping the location of a line/sample on the sensor to a location on the target body, and it is completely agnostic of the information that is captured by the sensor. More information related to image observations and digital numbers will be provided in further documentation. Sensor models that support full transformation from the image plane to the BCBF coordinate system fall into two general classes -- rigorous models and rational functional models. Rigorous sensor models function by taking ephemeris information (position, orientation, and velocity) with respect to some reference frame and utilize mathematical models to spatialize the image location onto the target body [(Laura et al., 2020)](https://doi.org/10.1029/2019EA000713). Rational functional models approximate this information using rational polynomial coefficients without exposing the interior and exterior orientation of the instrument. Within this document (and the ASC sensor model ecosystem), we focus on rigorous models due to the availability of interior and exterior orientation information. From 42e6f9ca734416d06ec5b03d276513e6e578efb5 Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Tue, 27 Feb 2024 13:54:06 -0700 Subject: [PATCH 14/14] Checkout glossary.md --- docs/concepts/glossary.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/concepts/glossary.md b/docs/concepts/glossary.md index 6938d08..2cc63ae 100644 --- a/docs/concepts/glossary.md +++ b/docs/concepts/glossary.md @@ -197,8 +197,4 @@ ###Camera Coordinate System A camera coordinate system is used to determine positions and directions of objects and vectors with respect to a sensor (i.e. camera). The origin is at the center of the sensor and the axes rotate and move through space with the sensor. These systems are non-inertial, meaning the velocity of the origin is non-constant. The location of the center of a spacecraft and its instruments at a given time are defined in NAIF SPK files. Generally, one or more frames are associated with a particular instrument. ###J2000 Coordinate System - The J2000 coordinate system (also known as EME2000) is based on the earth mean equator and dynamical equinox at midnight January 1, 2000. The origin is at the solar system barycenter. This system is inertial, since it does not rotate with respect to stars and the origin is not accelerating (i.e it has a constant velocity). This coordinate system is the root reference for NAIF's SPICE files and software. -###ISD - Image Support Data. The interior and exterior orientation data used to instantiate a camera model. -###Image Support Data - The interior and exterior orientation data used to instantiate a camera model. \ No newline at end of file + The J2000 coordinate system (also known as EME2000) is based on the earth mean equator and dynamical equinox at midnight January 1, 2000. The origin is at the solar system barycenter. This system is inertial, since it does not rotate with respect to stars and the origin is not accelerating (i.e it has a constant velocity). This coordinate system is the root reference for NAIF's SPICE files and software. \ No newline at end of file