8.13. Kaguya Terrain Camera

The Kaguya Terrain Camera (TC) is a push-broom imager, with a spatial resolution of 10 m. The images are acquired from a 100 km altitude above the Moon. It was part of the JAXA Kaguya orbiter.

Kaguya TC has two sensors, named TC1 and TC2, forming a stereo pair. They see roughly the same region on the ground, with a convergence angle of about 30 degrees (Section 8.1). These sensors may have slightly different focal lengths and distortion coefficients.

8.13.1. Fetching the data

Visit the product search page, and enter a small search region.

Fetch the raw data sets for a desired stereo pair, starting with the TC1 and TC2 prefixes (not the DEM or other products). Both the .img and .lbl files are needed.

wget https://darts.isas.jaxa.jp/pub/pds3/sln-l-tc-3-w-level2b0-v1.0/20080605/data/TC1W2B0_01_02936N034E0938.img.gz
wget https://darts.isas.jaxa.jp/pub/pds3/sln-l-tc-3-w-level2b0-v1.0/20080605/data/TC1W2B0_01_02936N034E0938.lbl

wget https://darts.isas.jaxa.jp/pub/pds3/sln-l-tc-3-w-level2b0-v1.0/20080605/data/TC2W2B0_01_02936N036E0938.img.gz
wget https://darts.isas.jaxa.jp/pub/pds3/sln-l-tc-3-w-level2b0-v1.0/20080605/data/TC2W2B0_01_02936N036E0938.lbl

8.13.2. Preparing the data

Unzip the .img.gz files with gunzip.

Ensure that ISIS is installed, and that ISISROOT and ISISDATA are set, per Section 2.3.1. The Kaguya kernels can then be downloaded with the command:

$ISISROOT/bin/downloadIsisData kaguya $ISISDATA

For each image, run commands along the lines of:

$ISISROOT/bin/kaguyatc2isis                     \
  from=TC1W2B0_01_02936N034E0938.lbl            \
  to=TC1W2B0_01_02936N034E0938.cub              \
  setnullrange=NO sethrsrange=NO sethisrange=NO \
  setlrsrange=NO setlisrange=NO

$ISISROOT/bin/spiceinit from=TC1W2B0_01_02936N034E0938.cub \
    web=false attach=TRUE cksmithed=FALSE ckrecon=TRUE     \
    ckpredicted=FALSE cknadir=FALSE spksmithed=true        \
    spkrecon=TRUE spkpredicted=FALSE shape=SYSTEM          \
    startpad=0.0 endpad=0.0

Create CSM cameras (Section 8.11):

$ISISROOT/bin/isd_generate --only_naif_spice \
    TC1W2B0_01_02936N034E0938.cub            \
    -k TC1W2B0_01_02936N034E0938.cub

8.13.3. Bundle adjustment and stereo

Run bundle adjustment (Section 16.5) and stereo (Section 16.52):

bundle_adjust                                                   \
  TC1W2B0_01_02936N034E0938.cub TC2W2B0_01_02936N036E0938.cub   \
  TC1W2B0_01_02936N034E0938.json TC2W2B0_01_02936N036E0938.json \
  --tri-weight 0.1 --camera-weight 0.0                          \
  -o ba/run

parallel_stereo --stereo-algorithm asp_mgm --subpixel-mode 9    \
  TC1W2B0_01_02936N034E0938.cub TC2W2B0_01_02936N036E0938.cub   \
  TC1W2B0_01_02936N034E0938.json TC2W2B0_01_02936N036E0938.json \
  --bundle-adjust-prefix ba/run                                 \
  stereo/run

For datasets with very oblique illumination, --subpixel-mode 2 (Section 17.3) worked better, but is much slower.

Run point2dem (Section 16.57) to get a DEM. Consider using the stereographic projection centered at the region of interest:

point2dem --stereographic --auto-proj-center \
  --tr 10 stereo/run-PC.tif

See Fig. 8.17 for a clip of the produced DEM.

It is suggested to rerun stereo with mapprojected images (Section 6.1.7), to get a higher quality output.

See Section 6 for a discussion about various speed-vs-quality choices when running stereo.

8.13.4. Alignment

The produced DEM can be aligned with pc_align (Section 16.54) to the LOLA RDR product.

8.13.5. Shape-from-shading with Kaguya TC

Here it will be illustrated how to run Shape-from-Shading (Section 16.67) on Kaguya TC images. An overview of SfS and examples for other planets are given in Section 11.1.

First, ensure that the data are fetched and a stereo terrain is created, per Section 8.13. Shape-from-shading expects a DEM with no holes which is also rather smooth. It should be at the same ground resolution as the input images, which in this case is 10 meters per pixel. It is best to have it in a local projection, such as stereographic.

We will modify the DEM creation command from above to use a large search radius to fill any holes:

point2dem --stereographic --auto-proj-center \
  --tr 10 --search-radius-factor 10          \
  stereo/run-PC.tif

(adjust the projection center for your location).

Inspect the produced DEM stereo/run-DEM.tif in stereo_gui in hillshading mode. Any additional holes can be filled with dem_mosaic (Section 16.20.2.9).

It is also suggested to blur it a little, to make it smoother:

dem_mosaic --dem-blur-sigma 2 stereo/run-filled-dem.tif \
  -o stereo/run-blurred-dem.tif

Then crop a region with gdal_translate that has no missing data.

Mapproject (Section 16.42) onto this DEM the left and right images with the corresponding .json camera files, while using the adjustments in ba/run. Overlay the resulting georeferenced images in stereo_gui. This is a very important sanity check to ensure that the cameras are registered correctly.

Run SfS as:

parallel_sfs -i stereo/run-cropped-dem.tif \
  TC1W2B0_01_02936N034E0938.cub            \
  TC2W2B0_01_02936N036E0938.cub            \
  TC1W2B0_01_02936N034E0938.json           \
  TC2W2B0_01_02936N036E0938.json           \
  --bundle-adjust-prefix ba/run            \
  --reflectance-type 1                     \
  --blending-dist 10                       \
  --min-blend-size 50                      \
  --allow-borderline-data                  \
  --threads 4                              \
  --save-sparingly                         \
  --crop-input-images                      \
  --smoothness-weight 40000                \
  --initial-dem-constraint-weight 10       \
  --max-iterations 5                       \
  --shadow-thresholds "120 120"            \
  --tile-size 200                          \
  --padding 50                             \
  --processes 10                           \
  -o sfs/run

If there are artifacts in the produced DEM, increase the smoothness weight. But if it is too large, it may blur the produced DEM too much.

The initial and final DEM can be inspected in stereo_gui. The geodiff (Section 16.26) tool can be used to compare how much the DEM changed.

The initial DEM constraint was set rather high to ensure the DEM does not change much as result of SfS. The shadow threshold depends on the pixel values and can be very different for other images.

See, for comparison, the parameter choices made for LRO NAC (Section 11.10). That example, and that entire chapter, also has the most detailed discussion for how to run SfS, including the essential role of alignment.

SfS with Kaguya TC images

Fig. 8.17 From left to right: the stereo DEM, SfS DEM (hillshaded), and a mapprojected image. Some numerical noise is still seen, which can be removed by increasing the smoothing weight. See below for another example.

Using multiple images with diverse illumination results in more detail and fewer artifacts. For such data, bundle adjustment and pairwise stereo need to be run first, and the produced DEMs and cameras must be aligned to a common reference, such as LOLA (Section 16.54.14). Then the aligned DEMs are inspected and merged with dem_mosaic, a clip is selected, holes are filled, noise is blurred, and SfS is run. The process is explained in detail in Section 11.10.

Here is an example of running SfS with the datasets:

TC{1,2}W2B0_01_02921S050E1100
TC{1,2}W2B0_01_05936S048E1097

All four images were used, though likely the first of each pair would have been sufficient, given that images in each pair have the same illumination.

SfS with Kaguya TC images with different illumination

Fig. 8.18 SfS with Kaguya images with different illumination. From left to right: first pair stereo DEM, second pair stereo DEM, and the SfS DEM (all hillshaded). It can be seen that SfS adds more detail and removes numerical noise.

SfS Kaguya TC ortho images

Fig. 8.19 The images used for SfS (one from each pair). The Sun is in the East and West, respectively.

8.13.6. Refining the camera intrinsics for Kaguya TC

See Section 12.2.2.

8.13.7. Solving for jitter for Kaguya TC

Kaguya TC cameras exhibit some jitter, but its effect is not as strong as the one of lens distortion, which needs to be solved for first, as in Section 12.2.2.

Then, jitter can be corrected as for CTX in Section 16.39.7. The precise commands are below.

Jitter for Kaguya TC

Fig. 8.20 First row: the stereo DEM and orthoimage. Second row: The difference of stereo DEM to LOLA. Third row: the triangulation error (Section 14.6.1). These are before (left) and after (right) solving for jitter. The ranges in the colorbar are in meters.

Here we worked with the stereo pair:

TC1W2B0_01_05324N054E2169
TC2W2B0_01_05324N056E2169

Stereo was run with mapprojected images (Section 6.1.7).

Dense matches were produced from stereo disparity (Section 12.2.4.2). Having on the order of 20,000 dense matches is suggested.

The DEM and cameras were aligned to LOLA, and lens distortion was solved for as in Section 12.2.2 (using additional overlapping images). The resulting optimized cameras were passed in to the jitter solver.

The DEM to constrain against was produced from LOLA, with a command as:

point2dem                              \
  -r moon                              \
  --stereographic                      \
  --auto-proj-center                   \
  --csv-format 2:lon,3:lat,4:radius_km \
  --search-radius-factor 5             \
  --tr 25                              \
  lola.csv

Solving for jitter:

jitter_solve                                           \
  TC1W2B0_01_05324N054E2169.cub                        \
  TC2W2B0_01_05324N056E2169.cub                        \
  ba/run-TC1W2B0_01_05324N054E2169.adjusted_state.json \
  ba/run-TC2W2B0_01_05324N056E2169.adjusted_state.json \
  --max-pairwise-matches 20000                         \
  --num-lines-per-position 300                         \
  --num-lines-per-orientation 300                      \
  --max-initial-reprojection-error 20                  \
  --match-files-prefix dense_matches/run               \
  --heights-from-dem lola-DEM.tif                      \
  --heights-from-dem-uncertainty 10                    \
  --anchor-dem lola-DEM.tif                            \
  --num-anchor-points 5000                             \
  --num-anchor-points-extra-lines 1000                 \
  --anchor-weight 0.01                                 \
  --num-iterations 20                                  \
  -o jitter/run

The value of --anchor-weight can be increased to 0.1 - 0.5, if oscillations are seen at the starting and ending image lines.