Source: https://guthlabs.ai/docs/instruments/panorama-stitching-field-of-view-planner/

instrument / verified-clean

# Panorama Stitching Field-of-View Planner

The current ledger marks this instrument verified clean within the source-bound verification corpus.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/panorama-stitching-field-of-view-planner/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/panorama-stitching-field-of-view-planner/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/panorama-stitching-field-of-view-planner/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/panorama-stitching-field-of-view-planner/qualification/>)

## Ledger state

The current ledger marks this instrument verified clean within the source-bound verification corpus.

**Area**: Audio, Music, Photography & Color

**Tranche**: tranche-5

**Evidence ID**: t5-067

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The instrument cannot honestly be labeled as correct in its current form. Replace the frame formula with max(1, ceil((totalFOV - lensFOV) / (lensFOV * (1 - overlapPercentage / 100))) + 1), define the angular-step output, validate lensFOV > 0, enforce 0 <= overlapPercentage < 100, and explicitly specify a common angular unit.

### Formula and scope findings

- The frame-count formula is incorrect for a target total FOV. Coverage with N frames is lensFOV + (N - 1) * angularStep, so the standard formula is max(1, ceil((totalFOV - lensFOV) / angularStep) + 1), where angularStep = lensFOV * (1 - overlapFraction). The supplied formula ceil(totalFOV / angularStep) + 1 overcounts frames.

- The overlap percentage must be converted to a fraction before use: overlapFraction = overlapPercentage / 100.

- The output angular step per frame is claimed but no formula is provided; it should be angularStep = lensFOV * (1 - overlapFraction).

- The formula does not define behavior when the target FOV is less than or equal to one lens FOV; the planner should return one frame, not fewer or extra frames.

### Unit assumptions

- lensFOV and totalFOV must use the same angular unit, such as both degrees or both radians.

- overlap is interpreted as a percentage from 0 to 100 and converted by dividing by 100.

- The target total FOV is the covered angular width from the first frame's start to the last frame's end.

- Angular step is the rotation between adjacent frame centers or equivalent adjacent-frame starts under the simplified FOV model; real panorama stitching may require additional margin for lens distortion and parallax.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

A 100% overlap input makes the effective angular-step denominator zero and produces a non-finite frame count in JavaScript. Treating the percentage value 20 as a raw fraction also produces a negative angular step and an invalid frame count.

## Errata and corrections

No applied erratum is attached to this unique-name record.

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "lensFOV": 60,
    "totalFOV": 180,
    "overlapPercentage": 25,
    "angleUnit": "degrees"
  },
  "expected_outputs": {
    "framesNeeded": 4,
    "angularStep": 45
  },
  "working": "overlapFraction = 25 / 100 = 0.25\nangularStep = 60 * (1 - 0.25) = 60 * 0.75 = 45 degrees\nadditional coverage needed = 180 - 60 = 120 degrees\nadditional frame intervals = 120 / 45 = 2.666666...\nceil(2.666666...) = 3 intervals\nframesNeeded = 3 + 1 = 4"
}
````

## Related workflows

No source-defined multi-instrument workflow membership is recorded.

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json · VERIFIED_CLEAN`

- `evidence-tranche5/tranche5-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
