Skip to main content

Analyzing Visual Evidence for 3D Reconstruction

WORKFLOWCONTEXT
📖16 min read

Introduction

When working with visual evidence such as video footage or images, we approach the material through the specific lens of spatial reconstruction. Rather than viewing the evidence purely as documentation of an event, we analyze it as source material for creating an accurate 3D model of the scene. This reconstruction-focused perspective shapes how we evaluate every element in the footage—from fixed architectural features to dynamic objects and actors.

Our analysis asks: What spatial information does this evidence contain? What can we measure, verify, and model? What additional data sources do we need to fill gaps in our understanding of the three-dimensional space?

This guide uses the example of analyzing footage of an incident in a city square, but the methodology applies to any scenario requiring spatial reconstruction from visual evidence.


Ground Truth

Establish the fixed spatial framework using satellite data and structural measurements.

Key Objects

Identify and analyze dynamic elements like vehicles and people within the scene.

Documentation

Maintain clear records and chain of custody for all identified elements.


Phase 1: Establishing Ground Truth

Ground truth refers to the baseline spatial and structural reality of the scene—the fixed environmental elements that provide the framework for our reconstruction.

Gathering Satellite and Geospatial Data

Begin by collecting all available overhead and geospatial data for the location:

  • Digital Elevation Models (DEMs): Check for available elevation data that provides terrain height information
  • Historical satellite imagery: Use Google Earth's timeline feature to view the location at different dates. This helps identify changes in the built environment over time
  • Temporal analysis: Note the dates of available imagery and compare them to the date of your evidence to identify any discrepancies

Identifying Key Structural Elements

Review your footage carefully and identify which environmental elements are most important for establishing spatial relationships:

  • Buildings and structures: Which buildings appear prominently in the footage? Which ones are essential for understanding spatial relationships and sight lines?
  • Perspective analysis: Look for structures in your evidence that show clear perspective lines—edges of buildings, rooflines, window patterns. These perspective cues are invaluable for photomatching and camera alignment in later reconstruction phases
  • Temporal verification: Have these structures changed over time? Check historical satellite imagery to confirm whether buildings have been renovated, replaced, or demolished between the imagery date and your evidence date
  • Prioritization: Focus on structures that appear in multiple frames or from multiple angles in your evidence

Extracting 3D Data from Google Earth

Google Earth and Google Maps offer varying levels of 3D data depending on the location. Explore what's available for your area of interest:

Photogrammetry-based 3D Models

  • Some locations in Google Maps and Google Earth feature 3D models generated through photogrammetry
  • These models capture the actual geometry of buildings and terrain
  • Check if your location has 3D coverage by switching to 3D view in Google Earth
  • Quality and detail vary significantly by location

Google Earth Pro 3D Buildings

  • For certain major cities and landmarks, Google Earth Pro includes purpose-built 3D models of key buildings
  • These models often have cleaner geometry than photogrammetry-based reconstructions
  • More suitable for architectural analysis and precise measurements

Extracting 3D Models with RenderDoc

  • RenderDoc is a graphics debugging tool that can capture 3D geometry rendered by applications like Google Earth
  • This allows you to extract 3D building models for use in your reconstruction workflow
  • The extracted models retain their spatial relationships and can be imported into 3D software
  • Process: Run Google Earth through RenderDoc, navigate to your location, capture a frame, and extract the mesh geometry

Determining Structural Dimensions

Once you've identified key structures, gather dimensional information through multiple methods:

Width and Depth (Plan View)

  • Use QGIS to export scaled satellite imagery. When imported into Blender, these images maintain real-world scale, providing accurate horizontal measurements
  • Google Earth's ruler tool allows direct measurement of distances and building footprints
  • Cross-reference multiple sources when possible to verify measurements

Height (Elevation)

  • Online resources: Search for building specifications, architectural records, or municipal databases that may list building heights
  • Reference images: Collect additional photographs of the structures from various angles and times
  • Sun analysis: Use tools like SunCalc in conjunction with shadow analysis to estimate heights (detailed in photomatching section)
  • Reference objects: Use objects of known dimensions visible in the footage as measurement references
  • Photomatching techniques: Align camera perspectives with known geometry to derive height information (covered in detail in photomatching documentation)

Note: Ground truth at this stage is primarily structural—we're establishing the fixed architectural and topographical elements that form the spatial framework of our scene.


Phase 2: Key Objects of Interest

Beyond the structural ground truth, we need to identify and analyze dynamic or incident-specific objects that play a central role in the event being documented.

Vehicle Identification and Modeling

If vehicles appear in the footage:

  • Identification: Determine the make, model, and if possible, the year of each vehicle
  • Dimensions: Once identified, standard specifications provide accurate real-world dimensions
  • 3D assets: Search for existing 3D models of the specific vehicle. Many common vehicles have models available in online repositories
  • Blueprint sourcing: If 3D models aren't available, look for technical drawings or blueprints that can serve as reference for modeling
  • Role in incident: Document how each vehicle relates to the incident—positioning, movement, interaction with actors

Human Actors

Document the people involved in the scene:

  • Count and tracking: How many individuals are visible? Can they be tracked across multiple frames?
  • Identification scheme: Establish a consistent naming or numbering system for each actor visible in the evidence (e.g., "Actor 1," "Person A," "Individual in red jacket")
  • Spatial relationships: Note each actor's position relative to fixed structures and other objects of interest
  • Movement patterns: If dealing with video, track actor movements through the scene

Vegetation and Environmental Details

Natural elements can provide additional context and spatial reference:

  • Species identification: If possible, identify the types of trees or plants visible. Different species have characteristic heights and growth patterns
  • Seasonal context: Vegetation appearance can help establish the time of year
  • Growth patterns: Trees and plants can sometimes help date imagery or confirm temporal consistency
  • Spatial markers: Significant trees or plantings serve as additional fixed reference points in your reconstruction

Other Objects of Interest

Catalog any other elements relevant to the incident:

  • Street furniture (benches, lamp posts, signs)
  • Temporary structures (tents, barriers, scaffolding)
  • Ground surface features (pavement patterns, markings, curbs)

For each object, gather the same types of information: identification, dimensions, availability of 3D models or blueprints, and relevance to the incident.


Documentation and Organization

As you gather this information, maintain clear records:

  • Create a database or spreadsheet listing all identified elements
  • Document the source of each measurement or specification
  • Note confidence levels for measurements and identifications
  • Cross-reference objects between different sources of evidence
  • Maintain a clear distinction between verified ground truth elements and objects requiring further validation

Error Propagation (WIP)

Uncertainty quantification — work in progress

This section is under development. It consolidates the draft error-propagation notes for quantifying measurement uncertainty in visual investigation.

Introduction

When measuring physical dimensions from images, you're combining multiple sources of uncertainty. A building's width might come from satellite imagery (±0.5m), camera matching (±0.3m), and texture analysis (±0.2m). There are margins of error, but How do you combine these errors correctly?

Simply averaging errors is mathematically incorrect and will underestimate your true uncertainty. This page explains the two industry-standard methods for combining measurement uncertainties and shows you how to apply them in visual investigation workflows.

Defensible Measurements: Professional investigative work requires defensible measurements. Proper error propagation is the difference between "roughly 12 meters" and "12.4m ± 0.6m with 95% confidence with the ability to explain where this uncertainty is, and why."


How do we get to margins of error?

When you measure something, there are always uncertainties. Small errors that can come from various sources. These uncertainties can be broadly categorized into two types:

  1. Random Errors: These are unpredictable fluctuations that vary each time you measure. They can be caused by things like pixel selection inaccuracies, slight changes in lighting, or human error in clicking points. Random errors can be reduced by taking multiple measurements and averaging them.
  2. Systematic Errors: These are consistent, repeatable errors that occur due to flaws in the measurement system or method. Examples include incorrect reference object sizes, lens distortion, or calibration errors. Systematic errors cannot be reduced by averaging and must be identified and corrected separately.

When combining multiple measurements, each with its own uncertainty, we need a method to calculate the overall uncertainty of the final result. This is where error propagation techniques come into play.

Why You Can't Just Average Errors

Common mistake:

Measurement 1: 12.5m ± 0.5m
Measurement 2: 12.3m ± 0.3m
Measurement 3: 12.7m ± 0.4m

Average: 12.5m ± (0.5 + 0.3 + 0.4)/3 = 12.5m ± 0.4m ❌ WRONG

Why this fails: Independent random errors don't add linearly. When you combine measurements, some errors cancel out while others compound. The mathematical relationship is quadratic, not linear.

Correct approach: Use either RSS (Root Sum of Squares) or Monte Carlo simulation.


Method 1: Root Sum of Squares (RSS / ISO-GUM)

What It Is

The ISO Guide to the Expression of Uncertainty in Measurement (GUM) is the international standard for combining uncertainties. The RSS method uses this formula:

Formula:

Combined Error = √(Error₁² + Error₂² + Error₃² + ... + Errorₙ²)

When to Use RSS

Use RSS when:

  • You have 2-10 independent uncertainty sources
  • Relationships between measurements are approximately linear
  • Uncertainties follow roughly normal (Gaussian) distributions
  • You need quick, transparent calculations
  • Results need to be hand-verifiable

Don't use RSS when:

  • You have strong correlations between measurements (see section below)
  • Non-linear relationships dominate (e.g., trigonometric calculations)
  • Uncertainty distributions are highly skewed
  • You're combining 15+ complex uncertainty sources

For 90% of Blender-based visual investigation work, RSS is appropriate and sufficient.

RSS Workflow

Step 1: Identify All Uncertainty Sources

Document every measurement contributing to your final result:

SourceMeasured ValueUncertaintyType
Google Earth ruler24.73m±0.50mRandom
Camera match (3 photos)24.68m±0.25mRandom
Brick array (18 courses)4.05m (height)±0.08mSystematic
Step 2: Quantify Each Uncertainty

For random errors (measurement precision):

  • Measure the same feature 5+ times
  • Calculate standard deviation: σ = √[Σ(xᵢ - x̄)² / (n-1)]
  • Use this as your uncertainty

For systematic errors (reference objects, manufacturing variance):

  • Research min/max specifications
  • Use range/2 as uncertainty estimate
  • Example: VW Golf (4.24-4.27m) → ±0.015m

For pixel-level matching:

  • Estimate ±1-2 pixels as your fitting error
  • Convert to real-world distance based on your scale
Step 3: Calculate RSS

Example: Building width measurement

Sources:
- Aerial anchor: ±0.50m
- Camera match: ±0.25m
- Texture array: ±0.12m

RSS = √(0.50² + 0.25² + 0.12²)
= √(0.25 + 0.0625 + 0.0144)
= √0.3269
= ±0.57m

Final Result: "Building width: 24.7m ± 0.6m (±2.4%) with 95% confidence"

Step 4: Report Your Uncertainty

Use a format for documentation:

Measurement: [Value] ± [Uncertainty] ([%])
Method: Root Sum of Squares (ISO-GUM)
Confidence Level: 95% (k=2)
Sources: [List primary contributors]

Example:
Measurement: 24.7m ± 0.6m (±2.4%)
Method: Root Sum of Squares (ISO-GUM)
Confidence Level: 95%
Primary Contributors:
- Aerial imagery: 24.73m ± 0.50m (87% of total uncertainty)
- Camera matching: 24.68m ± 0.25m
- Texture verification: 4.05m height ± 0.12m

Practical RSS Calculator Template

You can implement this in a spreadsheet:

SourceValueUncertaintySquared Error
Aerial24.730.500.2500
Camera24.680.250.0625
Texture4.050.120.0144
SUM0.3269
RSS (√SUM)±0.57m

Method 2: Monte Carlo Simulation

What It Is

Instead of using a formula, Monte Carlo simulation runs thousands of virtual "experiments." Each iteration randomly samples from your uncertainty distributions and calculates the result. After 10,000+ iterations, you analyze the distribution of outputs.

Think of it as: Running your measurement 10,000 times with slightly different values each time (within your uncertainty ranges), then seeing what range of answers you get.

When to Use Monte Carlo

Use Monte Carlo when:

  • Complex non-linear relationships (trigonometry, ratios, products)
  • Multiple correlated measurements
  • Non-Gaussian uncertainty distributions (uniform, triangular, skewed)
  • You need to see the full probability distribution, not just ± range
  • You're combining 10+ uncertainty sources

Don't use Monte Carlo when:

  • Simple linear combinations (RSS is faster and more transparent)
  • You need hand-verifiable results
  • No access to programming/spreadsheet tools
  • Teaching fundamental concepts to beginners

Monte Carlo Workflow

Step 1: Define Input Distributions

For each measurement source, specify:

  • Distribution type (Normal, Uniform, Triangular)
  • Central value (mean)
  • Uncertainty range (standard deviation or min/max)

Common distributions in visual investigation:

Source TypeDistributionWhy
Google Earth measurementsNormalMultiple random factors
Reference object (known specs)UniformAny value in range equally likely
Camera focal length estimateTriangularMost likely value known, bounds uncertain
Pixel matchingNormalSymmetric random error
Step 2: Run Simulation

Pseudocode:

For i = 1 to 10,000:
aerial_value = random_normal(24.73, 0.50)
camera_value = random_normal(24.68, 0.25)
texture_value = random_normal(4.05, 0.12)

combined_result[i] = calculate_final_measurement(aerial, camera, texture)

mean = average(combined_result)
std_dev = standard_deviation(combined_result)
confidence_95 = percentile(combined_result, [2.5, 97.5])
Step 3: Analyze Results

Monte Carlo gives you:

  • Mean value (central estimate)
  • Standard deviation (spread of results)
  • 95% confidence interval (2.5th to 97.5th percentile)
  • Full probability distribution (histogram)

Reporting:

Measurement: 24.7m [24.1m - 25.3m] (95% CI)
Method: Monte Carlo simulation (10,000 iterations)
Mean: 24.7m
Std Dev: ±0.61m
95% Confidence Interval: [24.1, 25.3]

Implementing Monte Carlo

Option A: Excel/Google Sheets (Simple)
1. In Column A: Enter your base measurement values
2. In Column B: Enter uncertainty values
3. In Column C: =NORM.INV(RAND(), A1, B1)
This generates random samples from normal distribution
4. Copy formula down 10,000 rows
5. In Column D: Calculate your final result from Column C values
6. Use =PERCENTILE.INC(D:D, 0.025) and 0.975 for confidence interval
Option B: Python (Advanced)
import numpy as np

# Define measurements and uncertainties
aerial = np.random.normal(24.73, 0.50, 10000)
camera = np.random.normal(24.68, 0.25, 10000)
texture = np.random.normal(4.05, 0.12, 10000)

# Calculate combined measurement (example: weighted average)
combined = (aerial * 0.5 + camera * 0.5) # Adjust formula as needed

# Results
mean = np.mean(combined)
std = np.std(combined)
ci_95 = np.percentile(combined, [2.5, 97.5])

print(f"Mean: {mean:.2f}m")
print(f"Std Dev: ±{std:.2f}m")
print(f"95% CI: [{ci_95[0]:.2f}, {ci_95[1]:.2f}]")

RSS vs Monte Carlo: Practical Comparison

Direct Comparison Example

Scenario: Measuring building height from 3 sources

MethodResultCalculation TimeTransparencyWhen to Use
RSS24.7m ± 0.6m30 secondsHigh - formula visibleStandard measurements, linear combinations
Monte Carlo24.7m [24.1-25.3m]2-5 minutesMedium - requires understanding distributionsComplex models, non-linear relationships

Agreement: Studies show RSS and Monte Carlo typically agree within 5-10% for well-behaved problems. RSS slightly overestimates uncertainty (conservative), which is acceptable for investigative work.

Decision Matrix

Use RSS if:

  • ✓ Adding or subtracting measurements
  • ✓ Multiplying by constants
  • ✓ Simple geometric relationships
  • ✓ Need to explain methodology to non-technical audience
  • ✓ Hand verification required

Use Monte Carlo if:

  • ✓ Dividing measurements (ratios)
  • ✓ Trigonometric calculations (angles, triangulation)
  • ✓ Multiple dependent measurements
  • ✓ Want to see probability distribution shape
  • ✓ Non-Gaussian input uncertainties

Special Case: Handling Correlated Errors

The Problem

Correlation means two uncertainties are not independent. When one goes up, the other tends to go up too.

Example of correlation:

  • You measure a building's width in Google Earth: 24.7m
  • You use this measurement to scale your 3D model
  • You then measure a car in the same scaled model
  • Problem: Both measurements depend on the same Google Earth scaling factor

When Correlations Matter

Strong correlation (must account for):

  • Multiple measurements from the same source (same ruler, same satellite image)
  • Derived quantities (if A = B × C, then A is correlated with both B and C)
  • Systematic biases (camera lens distortion affects all measurements from that camera)

Weak correlation (can usually ignore):

  • Measurements from different independent sources
  • Random errors from different processes
  • Different reference objects with independent specifications

How to Handle Correlations

Method 1: Avoid Them (Best Practice)

Use independent verification sources:

  • ✓ Satellite imagery + ground photos + reference objects = independent
  • ✗ Three measurements from same Google Earth session = correlated
Method 2: RSS with Correlation Coefficient

When correlations exist, modify the RSS formula:

Combined Error = √(σ₁² + σ₂² + 2ρσ₁σâ‚‚)

Where:
σ₁, σâ‚‚ = individual uncertainties
ρ = correlation coefficient (-1 to +1)

Correlation coefficients:

  • ρ = 0: No correlation (standard RSS)
  • ρ = +1: Perfectly correlated (errors add linearly)
  • ρ = -1: Perfectly anti-correlated (errors cancel)
  • ρ = 0.5: Moderate positive correlation

Example:

Two measurements from same satellite image:
σ₁ = 0.5m, σâ‚‚ = 0.3m, ρ = 0.7 (same imagery resolution)

Combined = √(0.5² + 0.3² + 2(0.7)(0.5)(0.3))
= √(0.25 + 0.09 + 0.21)
= √0.55
= ±0.74m

Compare to ignoring correlation:
RSS = √(0.25 + 0.09) = ±0.58m

Correlation increases uncertainty by 27%
Method 3: Monte Carlo (Handles Automatically)

Monte Carlo naturally handles correlations if you model them correctly:

# Create correlated measurements
mean = [24.73, 24.68]
cov = [[0.25, 0.15], # Covariance matrix
[0.15, 0.0625]] # Shows correlation

samples = np.random.multivariate_normal(mean, cov, 10000)

This is why Monte Carlo is preferred for complex cases with multiple correlations.


Practical Application: Blender Measurement Scenarios

Scenario 1: Simple Building Dimension (Use RSS)

Task: Measure building width

Sources:

  1. Google Earth: 24.73m ± 0.50m
  2. Camera match (3 photos): 24.68m ± 0.25m
  3. Reference car width: 1.75m → Building = 14× car = 24.5m ± 0.6m

Calculation:

RSS = √(0.50² + 0.25² + 0.60²)
= √0.6125
= ±0.78m

Result: 24.7m ± 0.8m (3.2%)

Verification Table:

MethodValueUncertaintyWeight in Total
Aerial24.73m±0.50m41%
Camera24.68m±0.25m10%
Reference24.50m±0.60m49%
Combined24.70m±0.78m

Scenario 2: Height from Shadow (Use Monte Carlo)

Task: Measure building height using shadow length

Model:

height = shadow_length × tan(sun_elevation_angle)

Uncertainties:

  • Shadow length: 15.3m ± 0.4m (measurement precision)
  • Sun elevation: 42° ± 2° (time uncertainty ±5 minutes)

Why Monte Carlo: The tangent function is non-linear, so RSS would introduce error.

Monte Carlo Implementation:

import numpy as np

shadow = np.random.normal(15.3, 0.4, 10000)
angle = np.random.normal(42, 2, 10000)

height = shadow * np.tan(np.radians(angle))

print(f"Height: {np.mean(height):.1f}m")
print(f"95% CI: [{np.percentile(height, 2.5):.1f}, {np.percentile(height, 97.5):.1f}]")

# Output: Height: 13.8m, 95% CI: [12.6, 15.1]

Result: Building height = 13.8m [12.6m - 15.1m] (95% confidence)


Scenario 3: Camera Triangulation (Use Monte Carlo)

Task: Locate object position from two camera angles

Model: Intersection of two lines of sight (trigonometric)

Why Monte Carlo:

  • Non-linear geometric relationships
  • Multiple correlated measurements (both cameras share same coordinate system)
  • Uncertainty in camera positions, orientations, and focal lengths

Better handled with simulation than attempting analytical RSS.


Quality Assurance Checklist

Before Reporting Measurements

Uncertainty Identification:

  • Listed all contributing uncertainty sources
  • Quantified each source (not just guessed)
  • Checked for correlated measurements
  • Identified systematic vs. random errors

Calculation:

  • Selected appropriate method (RSS vs. Monte Carlo)
  • Applied correct formula or simulation
  • Verified calculation (hand-check or alternative method)
  • Included all significant sources (>10% of total)

Documentation:

  • Stated measurement with uncertainty
  • Specified method used (RSS or Monte Carlo)
  • Listed confidence level (typically 95%)
  • Provided breakdown of major contributors
  • Included assumptions and limitations

Sanity Checks:

  • Does combined uncertainty seem reasonable?
  • Is it larger than the largest individual source? (Should be)
  • Are results consistent across different methods?
  • Would this withstand professional scrutiny?

Common Mistakes to Avoid

1. Adding Uncertainties Linearly

❌ Total = ±0.5m + ±0.3m + ±0.2m = ±1.0m
✓ Total = √(0.5² + 0.3² + 0.2²) = ±0.62m

2. Ignoring Correlations

❌ Measuring three things in the same Google Earth session 
and treating them as independent
✓ Recognize they share common systematic error

3. Using RSS for Non-Linear Models

❌ Using RSS for height = distance / tan(angle)
✓ Use Monte Carlo for trigonometric relationships

4. Reporting False Precision

❌ Result: 24.73421m ± 0.6m (absurd precision)
✓ Result: 24.7m ± 0.6m (uncertainty dictates significant figures)

5. Forgetting to Document

❌ "The building is about 25 meters"
✓ "Building width: 24.7m ± 0.6m (RSS, 95% CI) based on
aerial imagery, camera matching, and reference objects"

Summary

When Measuring in Blender

For most cases (80%+ of work):

  1. Identify 3-5 independent measurement sources
  2. Quantify uncertainty for each
  3. Apply RSS: √(σ₁² + σ₂² + ... + σₙ²)
  4. Report as: Value ± Uncertainty (Method, Confidence Level)

For complex cases:

  1. Identify non-linear relationships or correlations
  2. Implement Monte Carlo simulation (10,000 iterations)
  3. Extract mean and 95% confidence interval
  4. Report full probability distribution

Golden Rule: Your combined uncertainty should always be:

  • Larger than your largest individual source
  • Smaller than the sum of all sources
  • Defensible if challenged

Further Resources

ISO/IEC Standards:

For Beginners:

  • Start with RSS for all linear combinations
  • Move to Monte Carlo only when trigonometry or ratios are involved

For Advanced Users:

  • Consider correlation matrices for systematic errors
  • Use sensitivity analysis to identify dominant uncertainty sources
  • Implement Bayesian updating when new measurements become available

See also:

Reconstructing Scale

Camera Matching

Measurement Verification


Further Resources