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

instrument mechanism / verified-clean

# Panorama Stitching Field-of-View Planner mechanism

The inspectable method record for Panorama Stitching Field-of-View Planner, kept separate from implementation and qualification.

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

## Model scope

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.

- 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.

## Units and conventions

- 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.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "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"
}
````

## Failure boundary

**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.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/panorama-stitching-field-of-view-planner/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/panorama-stitching-field-of-view-planner/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/panorama-stitching-field-of-view-planner/qualification/>)

## Sources and evidence

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

- `VERIFIED_LEDGER.json`

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

- `BOUNDARY_HAZARD_CATALOG.json`
