Building practical AI
Deepak Kumar Tiwari

Deepak Kumar Tiwari

Technology & AI Leader · Building practical systems

Multimodal inspection / Guide 85

Mining Survey Change Detection Needs a Shared Datum

Validate mining survey change detection with shared coordinate datums, measured registration uncertainty, common coverage masks, and bounded human review packets.

Illustrative engineering guide. Examples are not client deployments, production-ready integrations, or evidence of measured results. Validate the design with your domain and security owners.

Reference workflow: Survey epoch manifests; Candidate change cells; Datum and grid alignment; Uncertainty and coverage gate; Surveyor review packet.
Reference workflow. Steps identify responsibilities, not necessarily separate agents. Branches and recovery paths are explained below. Open full-size diagram.

A hypothetical mine planning team compares two drone-derived elevation grids and sees a broad apparent rise across a bench. The assistant describes new material accumulation. In fact, the second survey uses a different vertical reference, and a shadowed section contains interpolated values rather than measured surface observations. Subtracting two arrays produced precise numbers without a defensible comparison.

The first engineering task is to decide which cells are comparable. An advisory change packet should preserve survey epochs, reference systems, registration evidence, and unknown regions before summarizing any elevation difference. This system must not provide automated mine safety clearance, slope-stability judgments, access permission, or a conclusion about the cause of observed change. Qualified surveying and operational review remain separate responsibilities.

Establish the Comparison Contract

Each epoch needs a site and survey-area identifier, boundary revision, acquisition start and end times, source image or scan references, processing revision, and control-network reference. Preserve original frame provenance even when the review artifact is an orthomosaic or elevation grid. The time a raster was exported is not the time the terrain was observed.

Define horizontal coordinates in a documented projected system with meter units. Define the vertical datum separately and state whether heights refer to an ellipsoid, a local benchmark, or another established reference. Pixel coordinates begin at the upper-left image corner; grid indexing and physical coordinates are different representations. Record cell size, grid origin, rotation, and resampling method explicitly.

GDAL’s geotransform tutorial documents the six affine coefficients mapping pixel and line coordinates into georeferenced coordinates. Two grids with the same dimensions need not cover the same ground. Checking their shapes without checking their transforms is therefore insufficient. Matching metadata is also only a prerequisite; independent control checks must verify alignment.

Distinguish Observations From Filled Gaps

The candidate stage can mark cells with apparently large elevation differences. A specialist survey-processing stage must first align valid surfaces and identify unsupported areas. Keep observed, interpolated, occluded, and outside-boundary masks distinct. If a cell has a numeric value but lacks acceptable support in either epoch, its change is unknown rather than zero.

Represent both source surveys and the comparison activity with versioned provenance. The W3C PROV overview explains the relationship between entities, activities, and responsible agents. Applying that vocabulary lets a surveyor trace an alarming map region back to the source frames, control solution, masking decision, and comparison parameters that produced it.

Registration uncertainty can dominate small changes. A horizontal offset on sloped ground may appear as vertical change, so a single vertical residual is not a complete error model. NIST’s uncertainty guidance includes systematic effects and covariance. Shared control errors cannot be averaged away by treating thousands of adjacent grid cells as independent measurements.

Test Comparable Cells Before Subtraction

This self-contained Python fixture tests the HARNESS on synthetic structured survey measurements. It does not evaluate a trained vision model, drone, survey engine, or real inspection performance. It is a scalar grid example, not full three-dimensional geometry or collision detection. Bounds and the change margin are illustrative policy assumptions rather than surveying or mining standards.

from math import isfinite

old = dict(site="MINE-A", boundary=2, horizontal="local-grid-m",
           vertical="benchmark-B", grid="one-meter-grid-v3",
           time_s=100, source="synthetic-epoch-A",
           z=[10.0, 10.0, 10.0], observed=[True, True, False], bound_m=0.1)
new = dict(old, time_s=200, source="synthetic-epoch-B",
           z=[10.8, 10.1, 12.0], observed=[True, True, True])

def changes(a, b):
    for k in ("site", "boundary", "horizontal", "vertical", "grid"):
        if a[k] != b[k]:
            return "abstain:reference"
    if (not all(isfinite(m["time_s"]) for m in (a, b))
            or b["time_s"] <= a["time_s"] or not a["source"] or not b["source"]):
        return "abstain:provenance"
    if not len(a["z"]) == len(b["z"]) == len(a["observed"]) == len(b["observed"]):
        return "abstain:shape"
    if not all(isfinite(m["bound_m"]) and m["bound_m"] >= 0 for m in (a, b)):
        return "abstain:uncertainty"
    result = []
    for x, y, va, vb in zip(a["z"], b["z"], a["observed"], b["observed"]):
        if not va or not vb or not isfinite(x) or not isfinite(y):
            result.append("unknown")
        else:
            lower = abs(y - x) - a["bound_m"] - b["bound_m"]
            result.append("review-change" if lower > 0.3 else "inconclusive")
    return result

assert changes(old, new) == ["review-change", "inconclusive", "unknown"]
assert changes(old, dict(new, vertical="ellipsoid")) == "abstain:reference"
assert changes(old, dict(new, grid="shifted-grid")) == "abstain:reference"
assert changes(old, dict(new, time_s=90)) == "abstain:provenance"
assert changes(old, dict(new, bound_m=-1)) == "abstain:uncertainty"
for invalid in (float("nan"), float("inf"), float("-inf")):
    assert changes(dict(old, time_s=invalid), new) == "abstain:provenance"
    assert changes(old, dict(new, time_s=invalid)) == "abstain:provenance"
    assert changes(dict(old, time_s=invalid), dict(new, time_s=invalid)) == "abstain:provenance"
assert changes(old, dict(new, time_s=100)) == "abstain:provenance"
assert changes(old, dict(new, time_s=101)) == ["review-change", "inconclusive", "unknown"]
print("survey comparison harness: synthetic assertions passed")

The third cell looks like the largest change but remains unknown because the earlier epoch did not observe it. The first cell is eligible for review under the supplied interval assumptions. Neither result proves material movement or attributes responsibility. Both epoch timestamps must be finite and strictly ordered before any cell comparison is admitted. A production engine must resolve the actual coordinate reference definitions, inspect control residuals, and validate the uncertainty model rather than trust matching strings.

Scope the Human Action

The packet should contain the common valid footprint, excluded regions, candidate change cells, and the approved survey method. Do not multiply every difference by cell area and label the sum a reliable volume when surfaces are missing or uncertainty is uncharacterized. Volume estimation needs its own boundary, base-surface assumptions, and error treatment, especially near steep faces and occlusions.

A conventional geospatial processing stage plus deterministic validation usually suffices. A language model can explain exclusions in plain language, but it cannot select a convenient datum conversion from context. Specialist automation earns its complexity when it computes and validates an actual transformation or supports surveyor adjudication. Geometry outputs remain conditional measurements, not physical truth by declaration.

Keep site access tenant-scoped and authorize raw survey downloads server-side. Treat map labels, filenames, and embedded instructions as untrusted content. The fixture omits authentication, trusted control registries, persistent approvals, transactional storage, and ticket-provider semantics. Exact site coordinates may be sensitive; ordinary logs should record job references and validation reasons instead of entire point sets.

Approved follow-up requests should ask a surveyor to examine named regions, not direct operations to enter or clear a bench. Use an idempotency key bound to both epochs, boundary, region, and policy revision. After a timeout, reconcile the authoritative ticket before retrying. Construction project coordination covers the broader handoff; pipeline coverage validation shows why traversed distance and observed evidence differ.

Acceptance Tests and Evaluation

  • Compare equal-sized rasters with different origins; block subtraction until an explicit alignment is validated.
  • Change only the vertical datum; require a reviewed transformation rather than accepting apparent site-wide elevation change.
  • Insert interpolated values into an occluded region; keep those cells outside the observed comparison mask.
  • Increase registration uncertainty; reduce the set of defensible change candidates rather than preserving old labels.
  • Reverse epoch order, supply NaN or infinity for either timestamp, or replace the survey boundary; prevent reuse of the previous comparison packet.
  • Repeat an approved review request after a lost response; preserve one ticket with both survey references.

Use surveyor-adjudicated epoch pairs as the evaluation unit. Measure false change flags divided by all adjudicated unchanged comparable cells, and comparable area divided by planned survey area. Report uncertain and unobserved area separately. Evaluate by independent campaigns and terrain types, since neighboring cells share imagery, processing assumptions, and control errors.

Begin with offline comparison on a bounded area and prohibit operational commands. Track datum mismatches caught, reviewer corrections, and time spent resolving exclusions against a naive subtraction baseline. Data engineering services should first deliver the epoch contract and valid-footprint report. Those artifacts prevent a technically correct subtraction from becoming an operationally misleading story.

Sources