Skip to content

Add SETSM and CARS vs ASP comparison documentation for UCSD SpaceNet example#111

Draft
bpurinton wants to merge 22 commits intomainfrom
setsm-comparison
Draft

Add SETSM and CARS vs ASP comparison documentation for UCSD SpaceNet example#111
bpurinton wants to merge 22 commits intomainfrom
setsm-comparison

Conversation

@bpurinton
Copy link
Copy Markdown
Contributor

@bpurinton bpurinton commented Mar 27, 2026

Resolves #109

WIP

It could be valuable for them to run their “best version” of CARS and SETSM on a few of the test cases we’ve identified.

I think some basic comparisons would be good... but want to make sure the motivation is clear and that we are doing fair comparison [in location, quality, and] processing settings.  Would be great to see the output from different CARS processing [modes]. 

It looks like there is an issue with the SETSM output (maybe something about about input image cropping/prep). The PGC image scripts could provide a good reference on how they’re running SETSM on HPC (https://github.com/PolarGeospatialCenter). 

@bpurinton bpurinton changed the title Add SETSM and CARS vs ASP comparison documentation for UCSD and Atlanta example Add SETSM and CARS vs ASP comparison documentation for UCSD SpaceNet example Mar 27, 2026
@bpurinton
Copy link
Copy Markdown
Contributor Author

Opened a question about SETSM cropping: PolarGeospatialCenter/imagery_utils#111

Source Data table now references 1040010007A93700 x 1040010007CA4D00
(the canonical pair from the worldview_spacenet_ucsd_stereo notebook,
convergence 21.2 deg) instead of 1040010007A3D100 x 1040010007A93700
(35.9 deg, used in v1 work). Approach section now documents the
mandatory NTF -> TIFF prep with the gdal_translate command from
section 2.1.4 of the SETSM user manual, and notes that a JP2-capable
GDAL is needed (ASP's bundled gdal_translate ships JP2OpenJPEG).

Run-output values (computation time, peak memory, output dims, std
dev, hillshade comparison) blanked to "pending current run" while
SETSM is reprocessed on the canonical pair.
Reran SETSM with -boundary_* flags on the canonical 21deg_12d pair
(1040010007A93700 x 1040010007CA4D00, convergence 21.2 deg, asymmetry
2.7 deg). Result: 1500x1500 px DEM at 2 m, 20 min runtime, 2.72 GB
peak memory, 98.7% valid pixels.

The hillshade now clearly resolves buildings, streets, and Mount
Soledad topography. The v1 noise-dominated outcome was caused by
running on a 35.9 deg convergence pair, not by any SETSM limitation
on urban scenes; the urban-band-appropriate convergence (15-25 deg)
recovers the geometry.

Doc updated with final metrics table, three-panel hillshade
comparison (COP30 / ASP / SETSM), and corrected assessment paragraph.
ucsd-setsm2m-hillshade.png replaced with the canonical-pair
hillshade.
@bpurinton
Copy link
Copy Markdown
Contributor Author

Opened a question about SETSM cropping: PolarGeospatialCenter/imagery_utils#111

The problem I had with SETSM was two fold:

  1. I missed the boundary crop flag, which made my RPC modification step uneccesary for cropped processing
  2. The originally select ~36 degree convergence angle scenes did not produce reasonable SETSM outputs (notably they worked for ASP and CARS though). Using the re-selected 21 degree scenes (see selection notebook, produced much more reasonable results from SETSM:
image

Source Data table and config.yaml example now reference the canonical
1040010007A93700 x 1040010007CA4D00 pair (convergence 21.2 deg) used
by the worldview_spacenet_ucsd_stereo notebook, instead of the v1
1040010007A3D100 x 1040010007A93700 pair (35.9 deg).

Hillshade comparison block and a new Run Metrics table are blanked
to "pending current run" while CARS is reprocessed on the canonical
pair.
Both PNGs are now reprojected onto the same 1500x1500 UTM 11N grid
as the SETSM canonical-pair hillshade (boundary 476000-479000 E,
3635600-3638600 N), then rendered with matplotlib LightSource at
1422x1344 px to match. Direct apples-to-apples visual comparison
between COP30 / ASP / SETSM (and soon CARS) is now possible by
flipping between the three figures - same extent, same projection,
same lighting.

Source DEMs:
  ASP   - ucsd_stereo_21deg_12d/stereo/run-DEM.tif (2 m, native)
  COP30 - ucsd_stereo_21deg_12d/ref/cop30_ucsd_wgs84_utm.tif
          (30 m, bilinear-upsampled to 2 m for the comparison grid)
Reran CARS on the canonical 21deg_12d pair
(1040010007A93700 x 1040010007CA4D00, convergence 21.2 deg) with the
same ROI and orchestration as v1. Result: 2017x2001 px DSM at 2 m,
EPSG:32611 + EGM96 vertical. Runtime 17 h 18 min on a 16 GB 6-core
laptop, peaking at ~10.3 GB (CARS emits 'RAM available < 500 Mb'
warnings but completes successfully).

Raw DSM has edge blunders (min -321 m, max 1273 m) in the seaward
margin of CARS' ~4 km ROI polygon, but inside the canonical 3 km
comparison crop the dynamic range is in line with the scene
(std 48.7 m) and the hillshade resolves buildings, streets, the I-5
freeway, and Mount Soledad topography -- comparable to ASP.

cars.md updated with final metrics table, commentary on runtime and
memory warnings, and the three-panel hillshade comparison.
ucsd-cars2m-hillshade.png replaced with the canonical-pair
hillshade, rendered on the same 3 km grid as the COP30 / ASP / SETSM
versions (outlier-clipped to 2.5-97.5 percentile so the hillshade
shading is not dominated by the edge blunders).
The prior hillshade rendering clipped the reprojected CARS DSM to
the 2.5-97.5 percentile before shading, which blanked ~27k pixels
in the central frame (tall buildings legitimately above the clip
ceiling). The result was an artificial speckle of voids over the
campus.

Now render from the raw reprojected DSM without any percentile clip
(99% valid). The void-free central area matches what
ucsd_stereo_CARS/output/results/dsm/dsm_hillshade.tif shows in
QGIS directly from the native DSM.
@bpurinton
Copy link
Copy Markdown
Contributor Author

bpurinton commented Apr 23, 2026

@dshean, I was able to get reasonable results out of SETSM, and I refined the CARS processing with better scene selection.

I'm not exactly sure what we ought to do with this work.

On one hand, I do like it as a quick compare / sanity check for the three tools, and it might be useful for others to see how all three produce comparable results. (I had trouble searching online for many published [i.e. blogs or docs] use of CARS / SETSM, and the docs I wrote here include the dockerization steps and run commands, which alone would have been useful to me initially.)

On the other hand, I'm hesitant to do a deep dive on "best case" parameters for all three tools, which might be a bit of a rabbit hole / distraction from my point here: I see this as a quick and dirty example showing that the three tools can all be used. We could include a disclaimer that adjusting processing parameters in all three tools will lead to varying output.

I mostly took these steps out of my own curiosity, having never run SETSM or CARS.

In light of that, we could just let this branch sit here and not include it in the docs.

What do you think?

(You can view the hillshades in the diff here; there's plenty you could say about all three, like the tendency towards interpolation of trees / water in CARS + SETSM vs. gaps left by ASP, but I'm refraining from going much deeper than: "all three produce reasonable surface models given the same WV image pair.")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Test tutorial with additional SpaceNet stereo pairs to improve robustness / Compare to other options

1 participant