Cloud shadow removal software for aerial imaging and photogrammerty

Author: Fyodor Serzhenko

We do have some problems with cloud shadows on captured images in aerial imaging and photogrammetry. Clouds intersect with the sun's rays, casting their shadows onto the landscape below. This is unavoidable, so we often end up with images like this, and we need to remove the shadows to prepare the data for mapping and 3D visualization.

What is the standard method for removing cloud shadows in image processing? Typically, we need to create a mask and apply a filter to a specific area of the image, such as the shadowed region. Alternatively, we need to isolate objects that should not be affected by the filter. That could be done within different layers as well. Still, this is a manual approach and it's very slow and imprecise. Additionally, shadows often lack pronounced boundaries, making it difficult to define the mask and apply it seamlessly to the image later on.

Our approach is based on classic image processing ideas; in our Aerial Clarity algorithm we don't apply any machine learning (ML) or artificial intelligence (AI). This algorithm is particularly suitable for soft shadows where an explicit boundary may not be present. This is common in aerial and photogrammetry images, which often require shadow removal prior to further processing. We expect that parallel computations on the NVIDIA GeForce RTX 4090 would offer performance in the range of 5-7 GPix/s or more for 16-bit RGB images with high resolutions, which is not feasible for any AI-based system.

It's important to note that this algorithm is only applicable to soft cloud shadows. It is not intended to suppress deep shadows. The picture below shows an example of soft shadows and the result of the processing.

 

Aerial Clarity: cloud shadow removal algorithm

Source JPG image is on the left (100 MPix, Phase One camera iXM-100MP), the result of processing with Aerial Clarity algorithm is on the right

Key Issues

  • Automatic cloud shadow removal for aerial images (soft shadows only)
  • No limitation on image resolution, 245.7 MPix (IMX811 with resolution 19,200 × 12,800) is ok
  • High performance due to parallel algorithm implementation on CUDA

Classic vs AI-based Shadow Removal

Unlike machine learning approaches which require training data and often struggle with generalized shadow types, this classic computer vision approach relies solely on pixel-level image characteristics, statistics and deterministic filtering. This results in:

  • Pros:
    • Fast GPU execution, even for very high image resolutions
    • No need for data gathering, annotating and training, no dependency on large labeled datasets
    • Robust for soft and diffuse shadows, which are typical in aerial imagery and photogrammetry
  • Cons:
    • Not applicable to deep shadows
    • Shadow removal may result in the presence of minor traces on the image
    • Less adaptive to complex, varying shadow types compared to AI methods

AI-based shadow removal, while potentially more flexible, often requires extensive training and may struggle to generalize to unseen scenes or shadow types. For large-scale aerial and photogrammetry applications where speed and robustness are critical, classic methods provide an efficient solution.

Software Features

  • Input/output formats: 8-bit JPG or 8/16-bit TIFF
  • Control of shadow suppression parameters
  • Single image and batch processing modes
  • Optional JPEG or JPEG2000 encoding for output images on GPU
  • OS Windows-10/11, Linux Ubuntu and L4T (Jetson Xavier and Orin)
  • Compatibility with NVIDIA GPUs (Jetson, GeForce, Quadro), CUDA-12.6

Performance Benchmarks for Cloud Shadow Removal algorithm

  • Image resolution: 11,664 × 8,750 (100 MPix, PhaseOne camera iXM-100MP), JPG
  • Test description for GPU version: all data in GPU memory, timing includes GPU computations only
  • Cloud Shadow Removal parameters: default
  • Software: OS Windows-11, CUDA-12.6
  • Hardware: CPU AMD Ryzen9 7950X (16 cores, 4.5–5.7 GHz), NVIDIA GeForce RTX 4090
  • Processing time on CPU: 15-20 seconds (no optimization at the moment)
  • Expected processing time on GPU: 15-20 ms

Roadmap

  • Further algorithm development to handle stronger shadows
  • Software optimization both on CPU and on GPU
  • Algorithm integration into RAW-to-RGB processing pipeline on CUDA
  • Compatibility with Phase One IIQ format (Phase One ImageSDK)
  • Integration with third-party software

Contact Form

This form collects your name and email. Check out our Privacy Policy on how we protect and manage your personal data.