Skip to content

Commit

Permalink
Add doc for Pleiades ortho products
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg-alexandrov committed Jan 4, 2025
1 parent c15d9e0 commit dbaa537
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 17 deletions.
24 changes: 22 additions & 2 deletions docs/examples/pleiades.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ Pleiades
--------

ASP supports the 1A/1B and NEO satellites from Airbus Pleiades. For NEO, see
:numref:`pleiades_neo` for additional notes. ASP works only with primary
(non-ortho) images.
:numref:`pleiades_neo` for additional notes. ASP also supports the Pleiades ortho
products, if the projection was done on a surface of constant height (:numref:`pleiades_projected`).

The Airbus Pleiades data have both an exact linescan camera model and an
approximate RPC model (:numref:`rpc`). These are stored in separate files. The
Expand Down Expand Up @@ -122,6 +122,26 @@ Several peculiarities make the Pleiades NEO data different from 1A/1B (:numref:`
- There is no field for standard deviation of the ground locations of pixels projected from the cameras, so error propagation is not possible unless such a value is specified manually (:numref:`error_propagation`).
- The RPC camera models for a stereo triplet can be rather inconsistent with each other, resulting in large triangulation error. It is suggested to use instead the exact linescan camera model.

.. _pleiades_projected:

Pleiades projected images
~~~~~~~~~~~~~~~~~~~~~~~~~

Airbus offers Pleiades ortho images, that are projected onto a surface of constant
height above a datum. These products contain the string ``PRJ`` in the image and
camera names, and have the ``PHR_PROJECTED`` keyword in the XML camera files.

The projection height is stored in the ``DIM*PRJ*.XML`` camera model files,
in the ``Bounding_Polygon`` field, in the ``<H>`` tag. This height is in meters,
above the WGS84 ellipsoid.

To process such data with ASP, use the provided RPC camera models, while passing
the heights for the left and right images as part of the ``--ortho-height`` option,
together with the option ``-t rpc``. See :numref:`mapproj_ortho` for details.

ASP does not support Airbus images that are orthorectified with a 3D terrain
model, as that terrain model is not known.

.. _airbus_tiled:

Pleiades tiled images
Expand Down
15 changes: 9 additions & 6 deletions docs/next_steps.rst
Original file line number Diff line number Diff line change
Expand Up @@ -877,10 +877,11 @@ An example without mapprojected images is shown in :numref:`bathy_reuse_run`.
Stereo with ortho-ready images
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Some vendors offer images that have been mapprojected onto surfaces
of constant height above a datum. An example is Maxar's OR2A product.
Some vendors offer images that have been projected onto surfaces
of constant height above a datum. Examples are Maxar's OR2A product
and the Airbus Pleiades ortho product (:numref:`pleiades_projected`).

The stereo command for such images is::
The stereo command for Maxar (DigitalGlobe) data is::

parallel_stereo \
-t dg \
Expand All @@ -890,12 +891,14 @@ The stereo command for such images is::
left.xml right.xml \
run/run

Here, the values passed in via ``--ortho-heights`` are the heights above the
The values passed in via ``--ortho-heights`` are the heights above the
datum that were used to mapproject the images. The datum is read from the
geoheader of the images.

DEMs with such heights are created in the output directory, then the usual
workflow of stereo with mapprojected images takes place.
For Pleiades data and RPC cameras use instead ``-t rpc``.

Helper DEMs with such heights are created in the output directory, then the
usual workflow of stereo with mapprojected images takes place.

.. _diagnosing_problems:

Expand Down
19 changes: 10 additions & 9 deletions src/asp/Sessions/StereoSession.cc
Original file line number Diff line number Diff line change
Expand Up @@ -225,17 +225,9 @@ namespace asp {
vw::CamPtr & left_map_proj_cam,
vw::CamPtr & right_map_proj_cam) {

// Load the name of the camera model, session, and DEM used in mapprojection
// based on the record in that image. Load the bundle adjust prefix from the
// mapprojected image. It can be empty, when such a prefix was not used in
// mapprojection.
std::string l_adj_prefix, r_adj_prefix, l_image_file, r_image_file,
l_cam_type, r_cam_type, l_cam_file, r_cam_file, l_dem_file, r_dem_file;
read_mapproj_header(left_image_file, left_camera_file, input_dem, session_name,
l_adj_prefix, l_image_file, l_cam_type, l_cam_file, l_dem_file);
read_mapproj_header(right_image_file, right_camera_file, input_dem, session_name,
r_adj_prefix, r_image_file, r_cam_type, r_cam_file, r_dem_file);


vw::Vector2 heights = asp::stereo_settings().ortho_heights;
bool have_heights = (!std::isnan(heights[0]) && !std::isnan(heights[1]));
if (have_heights) {
Expand All @@ -246,6 +238,15 @@ namespace asp {
if (l_adj_prefix != "" || r_adj_prefix != "")
vw_throw(ArgumentErr() << "StereoSession: Expect no bundle adjustment prefix "
<< "in ortho images geoheaders.\n");
} else {
// Load the name of the camera model, session, and DEM used in mapprojection
// based on the record in that image. Load the bundle adjust prefix from the
// mapprojected image. It can be empty, when such a prefix was not used in
// mapprojection.
read_mapproj_header(left_image_file, left_camera_file, input_dem, session_name,
l_adj_prefix, l_image_file, l_cam_type, l_cam_file, l_dem_file);
read_mapproj_header(right_image_file, right_camera_file, input_dem, session_name,
r_adj_prefix, r_image_file, r_cam_type, r_cam_file, r_dem_file);
}

vw_out() << "Mapprojected images bundle adjustment prefixes: "
Expand Down

0 comments on commit dbaa537

Please sign in to comment.