@photivra/engine 0.5.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +674 -0
- package/CHANGELOG.md +218 -0
- package/CITATION.cff +1 -1
- package/CONTRIBUTING.md +76 -0
- package/DCO +33 -0
- package/NODE_SUPPORT.md +37 -0
- package/NOTICE +2 -0
- package/README.md +157 -56
- package/SECURITY.md +55 -0
- package/THIRD_PARTY.md +63 -0
- package/dist/camera/equivalent-focal-length.d.ts +9 -0
- package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
- package/dist/camera/equivalent-focal-length.js +9 -0
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +13 -0
- package/dist/camera/field-of-view.d.ts.map +1 -1
- package/dist/camera/field-of-view.js +13 -0
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/projected-object-size.d.ts +8 -0
- package/dist/camera/projected-object-size.d.ts.map +1 -1
- package/dist/camera/projected-object-size.js +8 -0
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +60 -0
- package/dist/capture/capture-export-metadata.d.ts.map +1 -0
- package/dist/capture/capture-export-metadata.js +62 -0
- package/dist/capture/capture-export-metadata.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +55 -0
- package/dist/capture/environment-raw-producer.d.ts.map +1 -0
- package/dist/capture/environment-raw-producer.js +88 -0
- package/dist/capture/environment-raw-producer.js.map +1 -0
- package/dist/capture/export-jpeg.d.ts +12 -0
- package/dist/capture/export-jpeg.d.ts.map +1 -0
- package/dist/capture/export-jpeg.js +126 -0
- package/dist/capture/export-jpeg.js.map +1 -0
- package/dist/capture/export-tiff.d.ts +45 -0
- package/dist/capture/export-tiff.d.ts.map +1 -0
- package/dist/capture/export-tiff.js +129 -0
- package/dist/capture/export-tiff.js.map +1 -0
- package/dist/capture/focus-control.d.ts +210 -0
- package/dist/capture/focus-control.d.ts.map +1 -0
- package/dist/capture/focus-control.js +664 -0
- package/dist/capture/focus-control.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +59 -0
- package/dist/capture/linear-encoding.d.ts.map +1 -0
- package/dist/capture/linear-encoding.js +98 -0
- package/dist/capture/linear-encoding.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +135 -0
- package/dist/capture/photographic-export.d.ts.map +1 -0
- package/dist/capture/photographic-export.js +273 -0
- package/dist/capture/photographic-export.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +12 -0
- package/dist/capture/raw-frame-limits.d.ts.map +1 -0
- package/dist/capture/raw-frame-limits.js +13 -0
- package/dist/capture/raw-frame-limits.js.map +1 -0
- package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
- package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
- package/dist/capture/raw-frame-reconstruction.js +146 -0
- package/dist/capture/raw-frame-reconstruction.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +120 -0
- package/dist/capture/release-sequence.d.ts.map +1 -0
- package/dist/capture/release-sequence.js +446 -0
- package/dist/capture/release-sequence.js.map +1 -0
- package/dist/capture/sensor-raw-frame.d.ts +34 -0
- package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
- package/dist/capture/sensor-raw-frame.js +106 -0
- package/dist/capture/sensor-raw-frame.js.map +1 -0
- package/dist/capture/sensor-raw-producer.d.ts +51 -0
- package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
- package/dist/capture/sensor-raw-producer.js +235 -0
- package/dist/capture/sensor-raw-producer.js.map +1 -0
- package/dist/capture/simulated-capture.d.ts +125 -0
- package/dist/capture/simulated-capture.d.ts.map +1 -0
- package/dist/capture/simulated-capture.js +248 -0
- package/dist/capture/simulated-capture.js.map +1 -0
- package/dist/color/capture-color.d.ts +73 -0
- package/dist/color/capture-color.d.ts.map +1 -0
- package/dist/color/capture-color.js +145 -0
- package/dist/color/capture-color.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +23 -0
- package/dist/color/sensor-color-development.d.ts.map +1 -0
- package/dist/color/sensor-color-development.js +56 -0
- package/dist/color/sensor-color-development.js.map +1 -0
- package/dist/color/white-balance.d.ts +175 -0
- package/dist/color/white-balance.d.ts.map +1 -0
- package/dist/color/white-balance.js +606 -0
- package/dist/color/white-balance.js.map +1 -0
- package/dist/composition/image-formation-plan.d.ts +481 -0
- package/dist/composition/image-formation-plan.d.ts.map +1 -0
- package/dist/composition/image-formation-plan.js +2499 -0
- package/dist/composition/image-formation-plan.js.map +1 -0
- package/dist/composition/plan-consumer.d.ts +53 -0
- package/dist/composition/plan-consumer.d.ts.map +1 -0
- package/dist/composition/plan-consumer.js +119 -0
- package/dist/composition/plan-consumer.js.map +1 -0
- package/dist/core/calculation-result.d.ts.map +1 -1
- package/dist/core/calculation-result.js +6 -0
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +18 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +44 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/configuration-error.d.ts +6 -0
- package/dist/core/configuration-error.d.ts.map +1 -1
- package/dist/core/configuration-error.js +6 -0
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +6 -0
- package/dist/core/evidence-provenance.d.ts.map +1 -1
- package/dist/core/evidence-provenance.js +7 -0
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +9 -3
- package/dist/core/image-formation.d.ts.map +1 -1
- package/dist/core/image-formation.js +29 -5
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +25 -0
- package/dist/core/owned-data.d.ts.map +1 -0
- package/dist/core/owned-data.js +34 -0
- package/dist/core/owned-data.js.map +1 -0
- package/dist/core/record-validation.d.ts +17 -0
- package/dist/core/record-validation.d.ts.map +1 -0
- package/dist/core/record-validation.js +44 -0
- package/dist/core/record-validation.js.map +1 -0
- package/dist/core/scientific-assurance.d.ts +101 -0
- package/dist/core/scientific-assurance.d.ts.map +1 -0
- package/dist/core/scientific-assurance.js +301 -0
- package/dist/core/scientific-assurance.js.map +1 -0
- package/dist/core/spectral-composition.d.ts +106 -0
- package/dist/core/spectral-composition.d.ts.map +1 -0
- package/dist/core/spectral-composition.js +334 -0
- package/dist/core/spectral-composition.js.map +1 -0
- package/dist/core/spectral.d.ts +34 -0
- package/dist/core/spectral.d.ts.map +1 -0
- package/dist/core/spectral.js +57 -0
- package/dist/core/spectral.js.map +1 -0
- package/dist/core/validation.d.ts +6 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +6 -0
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +14 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +15 -0
- package/dist/core/version.js.map +1 -0
- package/dist/equipment/exposure-capabilities.d.ts +125 -0
- package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
- package/dist/equipment/exposure-capabilities.js +391 -0
- package/dist/equipment/exposure-capabilities.js.map +1 -0
- package/dist/equipment/generic-tier-assets.d.ts +82 -0
- package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-assets.js +119 -0
- package/dist/equipment/generic-tier-assets.js.map +1 -0
- package/dist/equipment/generic-tier-presets.d.ts +57 -0
- package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-presets.js +122 -0
- package/dist/equipment/generic-tier-presets.js.map +1 -0
- package/dist/equipment/iso-capabilities.d.ts +143 -0
- package/dist/equipment/iso-capabilities.d.ts.map +1 -0
- package/dist/equipment/iso-capabilities.js +578 -0
- package/dist/equipment/iso-capabilities.js.map +1 -0
- package/dist/equipment/metering-capabilities.d.ts +58 -0
- package/dist/equipment/metering-capabilities.d.ts.map +1 -0
- package/dist/equipment/metering-capabilities.js +151 -0
- package/dist/equipment/metering-capabilities.js.map +1 -0
- package/dist/equipment/release-capabilities.d.ts +33 -0
- package/dist/equipment/release-capabilities.d.ts.map +1 -0
- package/dist/equipment/release-capabilities.js +176 -0
- package/dist/equipment/release-capabilities.js.map +1 -0
- package/dist/exposure/exposure-duration-control.d.ts +72 -0
- package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
- package/dist/exposure/exposure-duration-control.js +161 -0
- package/dist/exposure/exposure-duration-control.js.map +1 -0
- package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
- package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
- package/dist/exposure/exposure-mode-resolver.js +1905 -0
- package/dist/exposure/exposure-mode-resolver.js.map +1 -0
- package/dist/exposure/exposure.d.ts +8 -0
- package/dist/exposure/exposure.d.ts.map +1 -1
- package/dist/exposure/exposure.js +8 -0
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash.d.ts +179 -0
- package/dist/exposure/flash.d.ts.map +1 -0
- package/dist/exposure/flash.js +644 -0
- package/dist/exposure/flash.js.map +1 -0
- package/dist/exposure/metering-scene-radiance.d.ts +72 -0
- package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
- package/dist/exposure/metering-scene-radiance.js +222 -0
- package/dist/exposure/metering-scene-radiance.js.map +1 -0
- package/dist/exposure/metering-target.d.ts +67 -0
- package/dist/exposure/metering-target.d.ts.map +1 -0
- package/dist/exposure/metering-target.js +265 -0
- package/dist/exposure/metering-target.js.map +1 -0
- package/dist/exposure/metering-temporal.d.ts +76 -0
- package/dist/exposure/metering-temporal.d.ts.map +1 -0
- package/dist/exposure/metering-temporal.js +210 -0
- package/dist/exposure/metering-temporal.js.map +1 -0
- package/dist/exposure/metering.d.ts +124 -0
- package/dist/exposure/metering.d.ts.map +1 -0
- package/dist/exposure/metering.js +422 -0
- package/dist/exposure/metering.js.map +1 -0
- package/dist/exposure/program-line.d.ts +29 -0
- package/dist/exposure/program-line.d.ts.map +1 -0
- package/dist/exposure/program-line.js +126 -0
- package/dist/exposure/program-line.js.map +1 -0
- package/dist/index.d.ts +101 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -7
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +76 -0
- package/dist/motion/camera-rotation.d.ts.map +1 -1
- package/dist/motion/camera-rotation.js +111 -0
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +113 -0
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -0
- package/dist/motion/capture-rotation-inverse-mapping.js +184 -0
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +104 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js +131 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -0
- package/dist/motion/capture-rotation-trajectory.d.ts +113 -0
- package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -0
- package/dist/motion/capture-rotation-trajectory.js +168 -0
- package/dist/motion/capture-rotation-trajectory.js.map +1 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
- package/dist/motion/extended-object-projection.d.ts +175 -0
- package/dist/motion/extended-object-projection.d.ts.map +1 -0
- package/dist/motion/extended-object-projection.js +402 -0
- package/dist/motion/extended-object-projection.js.map +1 -0
- package/dist/motion/projected-motion.d.ts +11 -0
- package/dist/motion/projected-motion.d.ts.map +1 -1
- package/dist/motion/projected-motion.js +11 -0
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/optics/aperture.d.ts +9 -0
- package/dist/optics/aperture.d.ts.map +1 -1
- package/dist/optics/aperture.js +9 -0
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/circle-of-confusion.d.ts +8 -0
- package/dist/optics/circle-of-confusion.d.ts.map +1 -1
- package/dist/optics/circle-of-confusion.js +8 -0
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +128 -0
- package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
- package/dist/optics/complex-pupil-psf.js +462 -0
- package/dist/optics/complex-pupil-psf.js.map +1 -0
- package/dist/optics/depth-of-field.d.ts +18 -0
- package/dist/optics/depth-of-field.d.ts.map +1 -1
- package/dist/optics/depth-of-field.js +29 -4
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +8 -0
- package/dist/optics/diffraction.d.ts.map +1 -1
- package/dist/optics/diffraction.js +8 -0
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +13 -0
- package/dist/optics/focus-breathing.d.ts.map +1 -1
- package/dist/optics/focus-breathing.js +13 -0
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +47 -0
- package/dist/optics/focus-state.d.ts.map +1 -0
- package/dist/optics/focus-state.js +78 -0
- package/dist/optics/focus-state.js.map +1 -0
- package/dist/optics/front-of-lens-filter.d.ts +114 -0
- package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
- package/dist/optics/front-of-lens-filter.js +468 -0
- package/dist/optics/front-of-lens-filter.js.map +1 -0
- package/dist/optics/illumination-vignetting.d.ts +9 -0
- package/dist/optics/illumination-vignetting.d.ts.map +1 -1
- package/dist/optics/illumination-vignetting.js +9 -0
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.js +23 -4
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-profile.d.ts +217 -0
- package/dist/optics/lens-psf-profile.d.ts.map +1 -0
- package/dist/optics/lens-psf-profile.js +823 -0
- package/dist/optics/lens-psf-profile.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +67 -0
- package/dist/optics/polygon-diffraction.d.ts.map +1 -0
- package/dist/optics/polygon-diffraction.js +145 -0
- package/dist/optics/polygon-diffraction.js.map +1 -0
- package/dist/optics/profile-contract.d.ts +42 -0
- package/dist/optics/profile-contract.d.ts.map +1 -0
- package/dist/optics/profile-contract.js +92 -0
- package/dist/optics/profile-contract.js.map +1 -0
- package/dist/optics/psf-foundation.d.ts +16 -3
- package/dist/optics/psf-foundation.d.ts.map +1 -1
- package/dist/optics/psf-foundation.js +28 -15
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/radial-distortion.d.ts +22 -2
- package/dist/optics/radial-distortion.d.ts.map +1 -1
- package/dist/optics/radial-distortion.js +101 -23
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-irradiance.js +662 -0
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.js +82 -0
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
- package/dist/optics/sensor-environment-query.d.ts +60 -0
- package/dist/optics/sensor-environment-query.d.ts.map +1 -0
- package/dist/optics/sensor-environment-query.js +50 -0
- package/dist/optics/sensor-environment-query.js.map +1 -0
- package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
- package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
- package/dist/optics/sensor-psf-quadrature.js +101 -0
- package/dist/optics/sensor-psf-quadrature.js.map +1 -0
- package/dist/optics/sensor-psf-support.d.ts +20 -0
- package/dist/optics/sensor-psf-support.d.ts.map +1 -0
- package/dist/optics/sensor-psf-support.js +13 -0
- package/dist/optics/sensor-psf-support.js.map +1 -0
- package/dist/optics/stray-light.d.ts +91 -0
- package/dist/optics/stray-light.d.ts.map +1 -0
- package/dist/optics/stray-light.js +110 -0
- package/dist/optics/stray-light.js.map +1 -0
- package/dist/optics/thin-lens.d.ts +8 -0
- package/dist/optics/thin-lens.d.ts.map +1 -1
- package/dist/optics/thin-lens.js +8 -0
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/output/capture-corrected-sdr.d.ts +49 -0
- package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
- package/dist/output/capture-corrected-sdr.js +149 -0
- package/dist/output/capture-corrected-sdr.js.map +1 -0
- package/dist/output/capture-geometry.d.ts.map +1 -1
- package/dist/output/capture-geometry.js +32 -11
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +49 -0
- package/dist/output/capture-sdr.d.ts.map +1 -0
- package/dist/output/capture-sdr.js +90 -0
- package/dist/output/capture-sdr.js.map +1 -0
- package/dist/output/crop.d.ts +6 -0
- package/dist/output/crop.d.ts.map +1 -1
- package/dist/output/crop.js +6 -0
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +137 -0
- package/dist/output/geometric-transforms.d.ts.map +1 -0
- package/dist/output/geometric-transforms.js +225 -0
- package/dist/output/geometric-transforms.js.map +1 -0
- package/dist/output/lens-corrections.d.ts +121 -0
- package/dist/output/lens-corrections.d.ts.map +1 -0
- package/dist/output/lens-corrections.js +210 -0
- package/dist/output/lens-corrections.js.map +1 -0
- package/dist/output/sdr-rendering.d.ts +81 -0
- package/dist/output/sdr-rendering.d.ts.map +1 -0
- package/dist/output/sdr-rendering.js +106 -0
- package/dist/output/sdr-rendering.js.map +1 -0
- package/dist/output/subject-framing-crop.d.ts +8 -0
- package/dist/output/subject-framing-crop.d.ts.map +1 -1
- package/dist/output/subject-framing-crop.js +8 -0
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/schema/camera.d.ts +6 -0
- package/dist/schema/camera.d.ts.map +1 -1
- package/dist/schema/illumination-spectral.d.ts +51 -0
- package/dist/schema/illumination-spectral.d.ts.map +1 -0
- package/dist/schema/illumination-spectral.js +132 -0
- package/dist/schema/illumination-spectral.js.map +1 -0
- package/dist/schema/illumination-temporal.d.ts +156 -0
- package/dist/schema/illumination-temporal.d.ts.map +1 -0
- package/dist/schema/illumination-temporal.js +554 -0
- package/dist/schema/illumination-temporal.js.map +1 -0
- package/dist/schema/illumination.d.ts +138 -0
- package/dist/schema/illumination.d.ts.map +1 -0
- package/dist/schema/illumination.js +483 -0
- package/dist/schema/illumination.js.map +1 -0
- package/dist/schema/scene-radiance-temporal.d.ts +107 -0
- package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
- package/dist/schema/scene-radiance-temporal.js +259 -0
- package/dist/schema/scene-radiance-temporal.js.map +1 -0
- package/dist/schema/scene-radiance.d.ts +185 -0
- package/dist/schema/scene-radiance.d.ts.map +1 -0
- package/dist/schema/scene-radiance.js +535 -0
- package/dist/schema/scene-radiance.js.map +1 -0
- package/dist/schema/scene.d.ts +7 -0
- package/dist/schema/scene.d.ts.map +1 -1
- package/dist/schema/validation.d.ts.map +1 -1
- package/dist/schema/validation.js +7 -0
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +199 -0
- package/dist/sensor/accumulated-charge.d.ts.map +1 -0
- package/dist/sensor/accumulated-charge.js +450 -0
- package/dist/sensor/accumulated-charge.js.map +1 -0
- package/dist/sensor/architecture.d.ts +48 -13
- package/dist/sensor/architecture.d.ts.map +1 -1
- package/dist/sensor/architecture.js +58 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
- package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
- package/dist/sensor/camera-saturation-capacity.js +356 -0
- package/dist/sensor/camera-saturation-capacity.js.map +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts +212 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -0
- package/dist/sensor/capture-color-sampling-binding.js +437 -0
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -0
- package/dist/sensor/capture-mode-timing.d.ts +63 -0
- package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
- package/dist/sensor/capture-mode-timing.js +270 -0
- package/dist/sensor/capture-mode-timing.js.map +1 -0
- package/dist/sensor/capture-mode.d.ts +157 -0
- package/dist/sensor/capture-mode.d.ts.map +1 -0
- package/dist/sensor/capture-mode.js +447 -0
- package/dist/sensor/capture-mode.js.map +1 -0
- package/dist/sensor/color-sampling.d.ts +133 -0
- package/dist/sensor/color-sampling.d.ts.map +1 -0
- package/dist/sensor/color-sampling.js +245 -0
- package/dist/sensor/color-sampling.js.map +1 -0
- package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
- package/dist/sensor/constant-rate-temporal-integration.js +382 -0
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
- package/dist/sensor/dark-current.d.ts +169 -0
- package/dist/sensor/dark-current.d.ts.map +1 -0
- package/dist/sensor/dark-current.js +427 -0
- package/dist/sensor/dark-current.js.map +1 -0
- package/dist/sensor/environment-photo-signal.d.ts +123 -0
- package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
- package/dist/sensor/environment-photo-signal.js +186 -0
- package/dist/sensor/environment-photo-signal.js.map +1 -0
- package/dist/sensor/eqe-electron-rate.d.ts +107 -0
- package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
- package/dist/sensor/eqe-electron-rate.js +561 -0
- package/dist/sensor/eqe-electron-rate.js.map +1 -0
- package/dist/sensor/eqe-local-exposure.d.ts +65 -0
- package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-local-exposure.js +84 -0
- package/dist/sensor/eqe-local-exposure.js.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.js +62 -0
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/exposure-window.d.ts +117 -0
- package/dist/sensor/exposure-window.d.ts.map +1 -0
- package/dist/sensor/exposure-window.js +305 -0
- package/dist/sensor/exposure-window.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +148 -0
- package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
- package/dist/sensor/iso-signal-chain.js +411 -0
- package/dist/sensor/iso-signal-chain.js.map +1 -0
- package/dist/sensor/local-exposure-binding.d.ts +87 -0
- package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
- package/dist/sensor/local-exposure-binding.js +214 -0
- package/dist/sensor/local-exposure-binding.js.map +1 -0
- package/dist/sensor/optical-stack.d.ts +132 -0
- package/dist/sensor/optical-stack.d.ts.map +1 -0
- package/dist/sensor/optical-stack.js +303 -0
- package/dist/sensor/optical-stack.js.map +1 -0
- package/dist/sensor/photon-energy.d.ts +97 -0
- package/dist/sensor/photon-energy.d.ts.map +1 -0
- package/dist/sensor/photon-energy.js +390 -0
- package/dist/sensor/photon-energy.js.map +1 -0
- package/dist/sensor/physical-charge-capacity.d.ts +130 -0
- package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
- package/dist/sensor/physical-charge-capacity.js +345 -0
- package/dist/sensor/physical-charge-capacity.js.map +1 -0
- package/dist/sensor/pixel-pitch.d.ts +6 -0
- package/dist/sensor/pixel-pitch.d.ts.map +1 -1
- package/dist/sensor/pixel-pitch.js +6 -0
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +10 -0
- package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
- package/dist/sensor/radiometry-readiness.js +10 -0
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +314 -0
- package/dist/sensor/raw-readout.d.ts.map +1 -0
- package/dist/sensor/raw-readout.js +914 -0
- package/dist/sensor/raw-readout.js.map +1 -0
- package/dist/sensor/raw-reconstruction.d.ts +170 -0
- package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
- package/dist/sensor/raw-reconstruction.js +424 -0
- package/dist/sensor/raw-reconstruction.js.map +1 -0
- package/dist/sensor/readout-exposure-linkage.d.ts +123 -0
- package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -0
- package/dist/sensor/readout-exposure-linkage.js +222 -0
- package/dist/sensor/readout-exposure-linkage.js.map +1 -0
- package/dist/sensor/readout-timing.d.ts +137 -0
- package/dist/sensor/readout-timing.d.ts.map +1 -0
- package/dist/sensor/readout-timing.js +243 -0
- package/dist/sensor/readout-timing.js.map +1 -0
- package/dist/sensor/response-application-compatibility.d.ts +136 -0
- package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
- package/dist/sensor/response-application-compatibility.js +408 -0
- package/dist/sensor/response-application-compatibility.js.map +1 -0
- package/dist/sensor/response-operating-range.d.ts +173 -0
- package/dist/sensor/response-operating-range.d.ts.map +1 -0
- package/dist/sensor/response-operating-range.js +672 -0
- package/dist/sensor/response-operating-range.js.map +1 -0
- package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
- package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
- package/dist/sensor/responsivity-photocurrent.js +644 -0
- package/dist/sensor/responsivity-photocurrent.js.map +1 -0
- package/dist/sensor/sampling-aperture.d.ts +154 -0
- package/dist/sensor/sampling-aperture.d.ts.map +1 -0
- package/dist/sensor/sampling-aperture.js +388 -0
- package/dist/sensor/sampling-aperture.js.map +1 -0
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/sensor-geometry.d.ts +12 -0
- package/dist/sensor/sensor-geometry.d.ts.map +1 -1
- package/dist/sensor/sensor-geometry.js +12 -0
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +10 -0
- package/dist/sensor/signal-noise.d.ts.map +1 -1
- package/dist/sensor/signal-noise.js +10 -0
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +171 -0
- package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -0
- package/dist/sensor/spatial-sample-reduction.js +345 -0
- package/dist/sensor/spatial-sample-reduction.js.map +1 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts +179 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -0
- package/dist/sensor/spatial-sampling-quadrature.js +224 -0
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -0
- package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
- package/dist/sensor/spatio-spectral-reduction.js +373 -0
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
- package/dist/sensor/spectral-coverage.d.ts +24 -0
- package/dist/sensor/spectral-coverage.d.ts.map +1 -0
- package/dist/sensor/spectral-coverage.js +86 -0
- package/dist/sensor/spectral-coverage.js.map +1 -0
- package/dist/sensor/spectral-quadrature.d.ts +169 -0
- package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
- package/dist/sensor/spectral-quadrature.js +542 -0
- package/dist/sensor/spectral-quadrature.js.map +1 -0
- package/dist/sensor/spectral-response.d.ts +192 -0
- package/dist/sensor/spectral-response.d.ts.map +1 -0
- package/dist/sensor/spectral-response.js +664 -0
- package/dist/sensor/spectral-response.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
- package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
- package/dist/sensor/temporal-eqe-sum.js +30 -0
- package/dist/sensor/temporal-eqe-sum.js.map +1 -0
- package/dist/sensor/temporal-photo-signal.d.ts +38 -0
- package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
- package/dist/sensor/temporal-photo-signal.js +110 -0
- package/dist/sensor/temporal-photo-signal.js.map +1 -0
- package/dist/sensor/temporal-sample-binding.d.ts +6 -0
- package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
- package/dist/sensor/temporal-sample-binding.js +32 -0
- package/dist/sensor/temporal-sample-binding.js.map +1 -0
- package/dist/simulation/poc-simulation.d.ts.map +1 -1
- package/dist/simulation/poc-simulation.js +34 -11
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +11 -0
- package/dist/stabilization/camera-shake.d.ts.map +1 -1
- package/dist/stabilization/camera-shake.js +11 -0
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +218 -0
- package/dist/stabilization/system.d.ts.map +1 -0
- package/dist/stabilization/system.js +695 -0
- package/dist/stabilization/system.js.map +1 -0
- package/docs/API_REFERENCE.md +2017 -0
- package/docs/API_STYLE.md +132 -0
- package/docs/ARCHITECTURE.md +150 -23
- package/docs/AUTOMATION_COORDINATION.md +190 -0
- package/docs/CAPTURE_COLOR.md +25 -0
- package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
- package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
- package/docs/CAPTURE_SDR.md +20 -0
- package/docs/DEVELOPERS.md +60 -0
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
- package/docs/EXPORT_ACCEPTANCE.md +133 -0
- package/docs/GENERIC_TIER_PRESETS.md +269 -0
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
- package/docs/IMAGE_FORMATION.md +105 -9
- package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
- package/docs/MOTION_AND_SIGNAL.md +145 -1
- package/docs/NUMERICAL_CORRECTNESS.md +191 -0
- package/docs/PERFORMANCE_BASELINE.md +56 -0
- package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
- package/docs/PHYSICS_FOUNDATION.md +152 -5
- package/docs/POC_API.md +2 -0
- package/docs/POC_PROJECTION_REUSE.md +124 -0
- package/docs/PROCESSED_OUTPUT.md +157 -0
- package/docs/PRODUCTION_COMPOSITION.md +373 -0
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
- package/docs/PROVENANCE.md +4 -0
- package/docs/PSF_FOUNDATION.md +110 -88
- package/docs/RAW_FRAME_ENVELOPE.md +56 -0
- package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
- package/docs/RELEASE_1_0.md +65 -0
- package/docs/RELEASE_AUDIT.md +38 -0
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
- package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
- package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
- package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
- package/docs/SDR_RENDERING.md +33 -0
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
- package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
- package/docs/SENSOR_RAW_FRAME.md +20 -0
- package/docs/SENSOR_RAW_PRODUCER.md +77 -0
- package/docs/SIGNAL_CONFORMANCE.md +23 -0
- package/docs/SIMULATED_CAPTURE.md +65 -0
- package/docs/STABILIZATION.md +160 -17
- package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
- package/docs/TIER_ACCEPTANCE.md +129 -0
- package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
- package/docs/USAGE.md +5604 -331
- package/docs/V1_COMPOSITION_MAP.md +123 -0
- package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
- package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
- package/docs/api/camera-equivalent-focal-length.md +53 -0
- package/docs/api/camera-field-of-view.md +119 -0
- package/docs/api/camera-projected-object-size.md +54 -0
- package/docs/api/capture-capture-export-metadata.md +107 -0
- package/docs/api/capture-environment-raw-producer.md +56 -0
- package/docs/api/capture-focus-control.md +419 -0
- package/docs/api/capture-linear-encoding.md +99 -0
- package/docs/api/capture-photographic-export.md +172 -0
- package/docs/api/capture-raw-frame-reconstruction.md +87 -0
- package/docs/api/capture-release-sequence.md +252 -0
- package/docs/api/capture-sensor-raw-frame.md +66 -0
- package/docs/api/capture-sensor-raw-producer.md +98 -0
- package/docs/api/capture-simulated-capture.md +179 -0
- package/docs/api/color-capture-color.md +122 -0
- package/docs/api/color-white-balance.md +386 -0
- package/docs/api/composition-image-formation-plan.md +825 -0
- package/docs/api/composition-plan-consumer.md +98 -0
- package/docs/api/core-calculation-result.md +220 -0
- package/docs/api/core-configuration-error.md +19 -0
- package/docs/api/core-image-formation.md +204 -0
- package/docs/api/core-scientific-assurance.md +214 -0
- package/docs/api/core-spectral-composition.md +268 -0
- package/docs/api/core-spectral.md +78 -0
- package/docs/api/core-validation.md +34 -0
- package/docs/api/core-version.md +14 -0
- package/docs/api/equipment-exposure-capabilities.md +270 -0
- package/docs/api/equipment-generic-tier-assets.md +82 -0
- package/docs/api/equipment-generic-tier-presets.md +103 -0
- package/docs/api/equipment-iso-capabilities.md +295 -0
- package/docs/api/equipment-metering-capabilities.md +126 -0
- package/docs/api/equipment-release-capabilities.md +91 -0
- package/docs/api/exports.json +5656 -0
- package/docs/api/exposure-exposure-duration-control.md +115 -0
- package/docs/api/exposure-exposure-mode-resolver.md +966 -0
- package/docs/api/exposure-exposure.md +150 -0
- package/docs/api/exposure-flash.md +327 -0
- package/docs/api/exposure-metering-scene-radiance.md +154 -0
- package/docs/api/exposure-metering-target.md +134 -0
- package/docs/api/exposure-metering-temporal.md +77 -0
- package/docs/api/exposure-metering.md +172 -0
- package/docs/api/exposure-program-line.md +64 -0
- package/docs/api/motion-camera-rotation.md +215 -0
- package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
- package/docs/api/motion-capture-rotation-trajectory.md +132 -0
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
- package/docs/api/motion-extended-object-projection.md +312 -0
- package/docs/api/motion-projected-motion.md +60 -0
- package/docs/api/optics-aperture.md +69 -0
- package/docs/api/optics-circle-of-confusion.md +46 -0
- package/docs/api/optics-complex-pupil-psf.md +193 -0
- package/docs/api/optics-depth-of-field.md +92 -0
- package/docs/api/optics-diffraction.md +46 -0
- package/docs/api/optics-focus-breathing.md +119 -0
- package/docs/api/optics-focus-state.md +64 -0
- package/docs/api/optics-front-of-lens-filter.md +263 -0
- package/docs/api/optics-illumination-vignetting.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
- package/docs/api/optics-lens-psf-profile.md +380 -0
- package/docs/api/optics-polygon-diffraction.md +68 -0
- package/docs/api/optics-profile-contract.md +47 -0
- package/docs/api/optics-psf-foundation.md +181 -0
- package/docs/api/optics-radial-distortion.md +194 -0
- package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
- package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
- package/docs/api/optics-sensor-environment-query.md +58 -0
- package/docs/api/optics-sensor-psf-quadrature.md +81 -0
- package/docs/api/optics-stray-light.md +109 -0
- package/docs/api/optics-thin-lens.md +53 -0
- package/docs/api/output-capture-corrected-sdr.md +71 -0
- package/docs/api/output-capture-geometry.md +500 -0
- package/docs/api/output-capture-sdr.md +69 -0
- package/docs/api/output-crop.md +47 -0
- package/docs/api/output-geometric-transforms.md +199 -0
- package/docs/api/output-lens-corrections.md +162 -0
- package/docs/api/output-sdr-rendering.md +122 -0
- package/docs/api/output-subject-framing-crop.md +59 -0
- package/docs/api/schema-camera.md +84 -0
- package/docs/api/schema-illumination-spectral.md +77 -0
- package/docs/api/schema-illumination-temporal.md +289 -0
- package/docs/api/schema-illumination.md +246 -0
- package/docs/api/schema-scene-radiance-temporal.md +215 -0
- package/docs/api/schema-scene-radiance.md +415 -0
- package/docs/api/schema-scene.md +105 -0
- package/docs/api/schema-validation.md +25 -0
- package/docs/api/sensor-accumulated-charge.md +273 -0
- package/docs/api/sensor-architecture.md +155 -0
- package/docs/api/sensor-camera-saturation-capacity.md +215 -0
- package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
- package/docs/api/sensor-capture-mode-timing.md +123 -0
- package/docs/api/sensor-capture-mode.md +321 -0
- package/docs/api/sensor-color-sampling.md +228 -0
- package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
- package/docs/api/sensor-dark-current.md +227 -0
- package/docs/api/sensor-environment-photo-signal.md +77 -0
- package/docs/api/sensor-eqe-electron-rate.md +166 -0
- package/docs/api/sensor-eqe-local-exposure.md +68 -0
- package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
- package/docs/api/sensor-exposure-window.md +183 -0
- package/docs/api/sensor-iso-signal-chain.md +264 -0
- package/docs/api/sensor-local-exposure-binding.md +126 -0
- package/docs/api/sensor-optical-stack.md +211 -0
- package/docs/api/sensor-photon-energy.md +149 -0
- package/docs/api/sensor-physical-charge-capacity.md +196 -0
- package/docs/api/sensor-pixel-pitch.md +41 -0
- package/docs/api/sensor-radiometry-readiness.md +240 -0
- package/docs/api/sensor-raw-readout.md +499 -0
- package/docs/api/sensor-raw-reconstruction.md +260 -0
- package/docs/api/sensor-readout-exposure-linkage.md +172 -0
- package/docs/api/sensor-readout-timing.md +209 -0
- package/docs/api/sensor-response-application-compatibility.md +256 -0
- package/docs/api/sensor-response-operating-range.md +293 -0
- package/docs/api/sensor-responsivity-photocurrent.md +245 -0
- package/docs/api/sensor-sampling-aperture.md +221 -0
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
- package/docs/api/sensor-sensor-geometry.md +143 -0
- package/docs/api/sensor-signal-noise.md +75 -0
- package/docs/api/sensor-spatial-sample-reduction.md +186 -0
- package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
- package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
- package/docs/api/sensor-spectral-coverage.md +33 -0
- package/docs/api/sensor-spectral-quadrature.md +183 -0
- package/docs/api/sensor-spectral-response.md +291 -0
- package/docs/api/sensor-temporal-photo-signal.md +62 -0
- package/docs/api/simulation-poc-simulation.md +364 -0
- package/docs/api/stabilization-camera-shake.md +71 -0
- package/docs/api/stabilization-system.md +442 -0
- package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
- package/docs/examples/production-capture.mjs +34 -0
- package/docs/examples/production-request.json +4613 -0
- package/docs/examples/quick-start.mjs +12 -0
- package/docs/validation/documentation-fragments.json +212 -0
- package/docs/validation/release-audit-inventory.json +1306 -0
- package/docs/validation/tier-acceptance-report-v1.json +2538 -0
- package/package.json +18 -4
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Builds deterministic temporal quadrature nodes for pure-camera-rotation capture geometry over each
|
|
5
|
+
* destination point's local exposure interval. The first model uses an equal-width midpoint rule.
|
|
6
|
+
* Every node reuses calculateCaptureRotationInverseMappings(), so the instantaneous geometry has one
|
|
7
|
+
* authoritative implementation. No radiance is evaluated here. normalizedTimeWeight is suitable for a
|
|
8
|
+
* downstream time-average under a uniform temporal-response assumption, while timeMeasureSeconds is
|
|
9
|
+
* the local dt measure for a downstream time integral. Neither weight includes shutter transmission,
|
|
10
|
+
* scene flicker, sensor response, radiometric calibration or any other throughput term. The function
|
|
11
|
+
* intentionally reports no numerical integration error estimate: geometry alone cannot determine the
|
|
12
|
+
* error in a scene-radiance integral. Downstream renderers may compare increasing temporal sample
|
|
13
|
+
* counts in their own radiance domain when convergence evidence is required.
|
|
14
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
15
|
+
* limits.
|
|
16
|
+
*/
|
|
17
|
+
import { approximationResult } from "../core/calculation-result.js";
|
|
18
|
+
import { InvalidScientificInputError, requirePositiveInteger } from "../core/validation.js";
|
|
19
|
+
import { calculateCaptureRotationInverseMappings } from "./capture-rotation-inverse-mapping.js";
|
|
20
|
+
function midpointPhase(index, sampleCount) {
|
|
21
|
+
return (index + 0.5) / sampleCount;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Builds deterministic temporal quadrature nodes for pure-camera-rotation
|
|
25
|
+
* capture geometry over each destination point's local exposure interval.
|
|
26
|
+
*
|
|
27
|
+
* The first model uses an equal-width midpoint rule. Every node reuses
|
|
28
|
+
* calculateCaptureRotationInverseMappings(), so the instantaneous geometry has
|
|
29
|
+
* one authoritative implementation.
|
|
30
|
+
*
|
|
31
|
+
* No radiance is evaluated here. normalizedTimeWeight is suitable for a
|
|
32
|
+
* downstream time-average under a uniform temporal-response assumption, while
|
|
33
|
+
* timeMeasureSeconds is the local dt measure for a downstream time integral.
|
|
34
|
+
* Neither weight includes shutter transmission, scene flicker, sensor
|
|
35
|
+
* response, radiometric calibration or any other throughput term.
|
|
36
|
+
*
|
|
37
|
+
* The function intentionally reports no numerical integration error estimate:
|
|
38
|
+
* geometry alone cannot determine the error in a scene-radiance integral.
|
|
39
|
+
* Downstream renderers may compare increasing temporal sample counts in their
|
|
40
|
+
* own radiance domain when convergence evidence is required.
|
|
41
|
+
*/
|
|
42
|
+
export function calculateCaptureRotationTemporalQuadrature(input) {
|
|
43
|
+
requirePositiveInteger("temporalSampleCount", input.temporalSampleCount);
|
|
44
|
+
if (!Array.isArray(input.samplePointsNative) ||
|
|
45
|
+
input.samplePointsNative.length === 0) {
|
|
46
|
+
throw new InvalidScientificInputError("samplePointsNative must be a non-empty array.");
|
|
47
|
+
}
|
|
48
|
+
const totalNodeCount = input.temporalSampleCount * input.samplePointsNative.length;
|
|
49
|
+
if (!Number.isSafeInteger(totalNodeCount)) {
|
|
50
|
+
throw new InvalidScientificInputError("temporalSampleCount × samplePointsNative.length must be a safe integer.");
|
|
51
|
+
}
|
|
52
|
+
const { temporalSampleCount, ...instantaneousInput } = input;
|
|
53
|
+
const phaseResults = Array.from({ length: temporalSampleCount }, (_, temporalSampleIndex) => {
|
|
54
|
+
const localExposurePhase = midpointPhase(temporalSampleIndex, temporalSampleCount);
|
|
55
|
+
return calculateCaptureRotationInverseMappings({
|
|
56
|
+
...instantaneousInput,
|
|
57
|
+
localExposurePhase
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
const firstResult = phaseResults[0];
|
|
61
|
+
if (firstResult === undefined) {
|
|
62
|
+
throw new InvalidScientificInputError("At least one temporal quadrature node is required.");
|
|
63
|
+
}
|
|
64
|
+
const normalizedTimeWeight = 1 / temporalSampleCount;
|
|
65
|
+
const points = firstResult.value.samples.map((firstSample, pointIndex) => {
|
|
66
|
+
const durationSeconds = firstSample.localExposureWindow.durationSeconds;
|
|
67
|
+
const timeMeasureSeconds = durationSeconds / temporalSampleCount;
|
|
68
|
+
const nodes = phaseResults.map((phaseResult, temporalSampleIndex) => {
|
|
69
|
+
const sample = phaseResult.value.samples[pointIndex];
|
|
70
|
+
if (sample === undefined) {
|
|
71
|
+
throw new InvalidScientificInputError("Instantaneous inverse-mapping sample alignment failed.");
|
|
72
|
+
}
|
|
73
|
+
const localExposurePhase = midpointPhase(temporalSampleIndex, temporalSampleCount);
|
|
74
|
+
return {
|
|
75
|
+
temporalSampleIndex,
|
|
76
|
+
localExposurePhase,
|
|
77
|
+
captureTimeSecondsFromReference: sample.captureTimeSecondsFromReference,
|
|
78
|
+
normalizedTimeWeight,
|
|
79
|
+
timeMeasureSeconds,
|
|
80
|
+
referenceImagePointMm: {
|
|
81
|
+
...sample.referenceImagePointMm
|
|
82
|
+
},
|
|
83
|
+
inverseDisplacementImagePlaneMm: {
|
|
84
|
+
...sample.inverseDisplacementImagePlaneMm
|
|
85
|
+
},
|
|
86
|
+
inverseDisplacementNativeSamples: {
|
|
87
|
+
...sample.inverseDisplacementNativeSamples
|
|
88
|
+
},
|
|
89
|
+
inverseDisplacementOrientedSamples: {
|
|
90
|
+
...sample.inverseDisplacementOrientedSamples
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
return {
|
|
95
|
+
destinationPointNative: {
|
|
96
|
+
...firstSample.destinationPointNative
|
|
97
|
+
},
|
|
98
|
+
destinationImagePointMm: {
|
|
99
|
+
...firstSample.destinationImagePointMm
|
|
100
|
+
},
|
|
101
|
+
localExposureWindow: {
|
|
102
|
+
...firstSample.localExposureWindow
|
|
103
|
+
},
|
|
104
|
+
nodes
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
return approximationResult({
|
|
108
|
+
timeReference: "first-opening-boundary-phase",
|
|
109
|
+
quadratureScheme: "uniform-midpoint",
|
|
110
|
+
temporalResponseModel: "uniform-over-local-exposure",
|
|
111
|
+
temporalSampleCount,
|
|
112
|
+
outputMeaning: "temporal-geometry-quadrature-nodes",
|
|
113
|
+
points,
|
|
114
|
+
componentProvenance: {
|
|
115
|
+
instantaneousInverseMapping: firstResult.provenance
|
|
116
|
+
}
|
|
117
|
+
}, "capture-rotation-temporal-quadrature", "1.0.0", [
|
|
118
|
+
"Each destination native point retains its own validated local exposure interval.",
|
|
119
|
+
"Temporal nodes use a deterministic equal-width midpoint rule with phases (i + 0.5) / N and therefore do not sample the exact opening/closing boundaries.",
|
|
120
|
+
"Normalized temporal weights sum approximately to one and represent a uniform time-average measure only.",
|
|
121
|
+
"Seconds-valued temporal measures sum approximately to the local exposure duration and represent dt only.",
|
|
122
|
+
"Uniform temporal response is an explicit approximation; shutter transmission ramps, scene flicker, sensor response and radiometric throughput are not included.",
|
|
123
|
+
"Every node delegates instantaneous geometry to calculateCaptureRotationInverseMappings(); no second camera-motion equation is introduced.",
|
|
124
|
+
"Sensor data-readout timing and readout/exposure linkage metadata do not alter the exposure integral unless a future explicit image-formation model consumes them.",
|
|
125
|
+
"Reference rays may leave the active source frame under motion and are not clamped.",
|
|
126
|
+
"No radiance, photon count, blur kernel, PSF, source resampling or output pixel value is calculated.",
|
|
127
|
+
"No geometry-only convergence/error estimate is reported because temporal integration error depends on the downstream radiance/visibility function as well as motion.",
|
|
128
|
+
"Camera translation, scene-depth parallax, subject motion/deformation, occlusion changes, flash/flicker, shutter shock and non-uniform temporal response remain separate future work."
|
|
129
|
+
]);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=capture-rotation-temporal-quadrature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-rotation-temporal-quadrature.js","sourceRoot":"","sources":["../../src/motion/capture-rotation-temporal-quadrature.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Evaluates pure-camera-rotation trajectories for stationary reference rays over each point's local
|
|
4
|
+
* exposure window. This is a temporal-geometry bridge, not a finished rolling-shutter image mapping.
|
|
5
|
+
* The native sample point defines where a stationary world ray would land in the reference
|
|
6
|
+
* global-shutter image at the first opening-boundary phase. The existing camera-rotation model is then
|
|
7
|
+
* evaluated at that point's local exposure start and end. Sensor data-readout timing is intentionally
|
|
8
|
+
* absent. A camera/mode-specific relationship between sensor readout and exposure boundaries requires
|
|
9
|
+
* a separate explicit contract; this function never assumes one. A later renderer-facing
|
|
10
|
+
* rolling-shutter warp must solve the image mapping consistently with capture-location-dependent time
|
|
11
|
+
* and integrate over the local exposure interval. The endpoint chord returned here must not be treated
|
|
12
|
+
* as a blur kernel or as an inverse destination-to-source sampling map.
|
|
13
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
14
|
+
* limits.
|
|
15
|
+
*/
|
|
16
|
+
import { type CalculationProvenance, type CalculationResult } from "../core/calculation-result.js";
|
|
17
|
+
import { type RasterPoint } from "../output/capture-geometry.js";
|
|
18
|
+
import { type CalculateCaptureExposureWindowsInput } from "../sensor/exposure-window.js";
|
|
19
|
+
import type { SensorImagingArea } from "../sensor/sensor-geometry.js";
|
|
20
|
+
import { type CameraAngularVelocityRadPerSec, type ImagePlanePointMm } from "./camera-rotation.js";
|
|
21
|
+
export interface CalculateCaptureRotationTrajectoriesInput extends CalculateCaptureExposureWindowsInput {
|
|
22
|
+
/**
|
|
23
|
+
* Physical photosensitive imaging area associated with nativeRaster.
|
|
24
|
+
*/
|
|
25
|
+
imagingArea: SensorImagingArea;
|
|
26
|
+
/** Physical focal length in millimetres. */
|
|
27
|
+
focalLengthMm: number;
|
|
28
|
+
/** Optional focus distance in metres for focus-aware projection distance. */
|
|
29
|
+
focusDistanceM?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Constant physical camera angular velocity resolved in camera axes at the
|
|
32
|
+
* first opening-boundary phase.
|
|
33
|
+
*/
|
|
34
|
+
angularVelocityRadPerSec: CameraAngularVelocityRadPerSec;
|
|
35
|
+
/**
|
|
36
|
+
* Native points whose stationary-reference-ray trajectories should be
|
|
37
|
+
* evaluated. Required and non-empty for this trajectory API.
|
|
38
|
+
*/
|
|
39
|
+
samplePointsNative: readonly RasterPoint[];
|
|
40
|
+
}
|
|
41
|
+
export interface CaptureRotationTrajectoryEndpoint {
|
|
42
|
+
timeSecondsFromCaptureReference: number;
|
|
43
|
+
mappedImagePointMm: ImagePlanePointMm;
|
|
44
|
+
deltaFromReferenceMm: {
|
|
45
|
+
x: number;
|
|
46
|
+
y: number;
|
|
47
|
+
distance: number;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export interface CaptureRotationTrajectorySample {
|
|
51
|
+
pointNative: RasterPoint;
|
|
52
|
+
/**
|
|
53
|
+
* Image-plane position of the stationary world ray at the capture reference
|
|
54
|
+
* time (the first opening-boundary phase).
|
|
55
|
+
*/
|
|
56
|
+
referenceImagePointMm: ImagePlanePointMm;
|
|
57
|
+
localExposureWindow: {
|
|
58
|
+
startSecondsFromCaptureReference: number;
|
|
59
|
+
endSecondsFromCaptureReference: number;
|
|
60
|
+
durationSeconds: number;
|
|
61
|
+
openingNormalizedScanPosition: number | null;
|
|
62
|
+
closingNormalizedScanPosition: number | null;
|
|
63
|
+
};
|
|
64
|
+
atLocalExposureStart: CaptureRotationTrajectoryEndpoint;
|
|
65
|
+
atLocalExposureEnd: CaptureRotationTrajectoryEndpoint;
|
|
66
|
+
/**
|
|
67
|
+
* Chord between the two trajectory endpoints.
|
|
68
|
+
*
|
|
69
|
+
* This is not a blur kernel, integrated exposure, or rolling-shutter warp.
|
|
70
|
+
*/
|
|
71
|
+
localExposureTrajectoryEndpointDeltaMm: {
|
|
72
|
+
x: number;
|
|
73
|
+
y: number;
|
|
74
|
+
distance: number;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export interface CaptureRotationTrajectories {
|
|
78
|
+
timeReference: "first-opening-boundary-phase";
|
|
79
|
+
trajectoryMeaning: "forward-stationary-reference-ray";
|
|
80
|
+
imagingArea: SensorImagingArea;
|
|
81
|
+
activeCaptureRect: {
|
|
82
|
+
x: number;
|
|
83
|
+
y: number;
|
|
84
|
+
width: number;
|
|
85
|
+
height: number;
|
|
86
|
+
};
|
|
87
|
+
samples: readonly CaptureRotationTrajectorySample[];
|
|
88
|
+
componentProvenance: {
|
|
89
|
+
exposureWindows: CalculationProvenance;
|
|
90
|
+
cameraRotation: CalculationProvenance;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Evaluates pure-camera-rotation trajectories for stationary reference rays
|
|
95
|
+
* over each point's local exposure window.
|
|
96
|
+
*
|
|
97
|
+
* This is a temporal-geometry bridge, not a finished rolling-shutter image
|
|
98
|
+
* mapping. The native sample point defines where a stationary world ray would
|
|
99
|
+
* land in the reference global-shutter image at the first opening-boundary
|
|
100
|
+
* phase. The existing camera-rotation model is then evaluated at that point's
|
|
101
|
+
* local exposure start and end.
|
|
102
|
+
*
|
|
103
|
+
* Sensor data-readout timing is intentionally absent. A camera/mode-specific
|
|
104
|
+
* relationship between sensor readout and exposure boundaries requires a
|
|
105
|
+
* separate explicit contract; this function never assumes one.
|
|
106
|
+
*
|
|
107
|
+
* A later renderer-facing rolling-shutter warp must solve the image mapping
|
|
108
|
+
* consistently with capture-location-dependent time and integrate over the
|
|
109
|
+
* local exposure interval. The endpoint chord returned here must not be treated
|
|
110
|
+
* as a blur kernel or as an inverse destination-to-source sampling map.
|
|
111
|
+
*/
|
|
112
|
+
export declare function calculateCaptureRotationTrajectories(input: CalculateCaptureRotationTrajectoriesInput): CalculationResult<CaptureRotationTrajectories>;
|
|
113
|
+
//# sourceMappingURL=capture-rotation-trajectory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-rotation-trajectory.d.ts","sourceRoot":"","sources":["../../src/motion/capture-rotation-trajectory.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,oCAAoC,EAE1C,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAEL,KAAK,8BAA8B,EAEnC,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,yCACf,SAAQ,oCAAoC;IAC5C;;OAEG;IACH,WAAW,EAAE,iBAAiB,CAAC;IAC/B,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,wBAAwB,EAAE,8BAA8B,CAAC;IACzD;;;OAGG;IACH,kBAAkB,EAAE,SAAS,WAAW,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,iCAAiC;IAChD,+BAA+B,EAAE,MAAM,CAAC;IACxC,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,oBAAoB,EAAE;QACpB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,qBAAqB,EAAE,iBAAiB,CAAC;IACzC,mBAAmB,EAAE;QACnB,gCAAgC,EAAE,MAAM,CAAC;QACzC,8BAA8B,EAAE,MAAM,CAAC;QACvC,eAAe,EAAE,MAAM,CAAC;QACxB,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7C,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9C,CAAC;IACF,oBAAoB,EAAE,iCAAiC,CAAC;IACxD,kBAAkB,EAAE,iCAAiC,CAAC;IACtD;;;;OAIG;IACH,sCAAsC,EAAE;QACtC,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,8BAA8B,CAAC;IAC9C,iBAAiB,EAAE,kCAAkC,CAAC;IACtD,WAAW,EAAE,iBAAiB,CAAC;IAC/B,iBAAiB,EAAE;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,SAAS,+BAA+B,EAAE,CAAC;IACpD,mBAAmB,EAAE;QACnB,eAAe,EAAE,qBAAqB,CAAC;QACvC,cAAc,EAAE,qBAAqB,CAAC;KACvC,CAAC;CACH;AAgHD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,yCAAyC,GAC/C,iBAAiB,CAAC,2BAA2B,CAAC,CAyFhD"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Evaluates pure-camera-rotation trajectories for stationary reference rays over each point's local
|
|
5
|
+
* exposure window. This is a temporal-geometry bridge, not a finished rolling-shutter image mapping.
|
|
6
|
+
* The native sample point defines where a stationary world ray would land in the reference
|
|
7
|
+
* global-shutter image at the first opening-boundary phase. The existing camera-rotation model is then
|
|
8
|
+
* evaluated at that point's local exposure start and end. Sensor data-readout timing is intentionally
|
|
9
|
+
* absent. A camera/mode-specific relationship between sensor readout and exposure boundaries requires
|
|
10
|
+
* a separate explicit contract; this function never assumes one. A later renderer-facing
|
|
11
|
+
* rolling-shutter warp must solve the image mapping consistently with capture-location-dependent time
|
|
12
|
+
* and integrate over the local exposure interval. The endpoint chord returned here must not be treated
|
|
13
|
+
* as a blur kernel or as an inverse destination-to-source sampling map.
|
|
14
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
15
|
+
* limits.
|
|
16
|
+
*/
|
|
17
|
+
import { approximationResult } from "../core/calculation-result.js";
|
|
18
|
+
import { InvalidScientificInputError, requirePositiveFinite } from "../core/validation.js";
|
|
19
|
+
import { mapOrientedPhysicalUvToImagePlanePoint, resolveCaptureGeometry } from "../output/capture-geometry.js";
|
|
20
|
+
import { calculateCaptureExposureWindows } from "../sensor/exposure-window.js";
|
|
21
|
+
import { calculateCameraRotationImageMapping } from "./camera-rotation.js";
|
|
22
|
+
function requireNonEmptySamples(samplePointsNative) {
|
|
23
|
+
if (!Array.isArray(samplePointsNative) || samplePointsNative.length === 0) {
|
|
24
|
+
throw new InvalidScientificInputError("samplePointsNative must be a non-empty array.");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function nativePointToReferenceImagePlane(point, activeCaptureRect, activePhysicalBoundsFromOpticalAxisMm) {
|
|
28
|
+
const u = (point.x - activeCaptureRect.x) / activeCaptureRect.width;
|
|
29
|
+
const v = (point.y - activeCaptureRect.y) / activeCaptureRect.height;
|
|
30
|
+
return mapOrientedPhysicalUvToImagePlanePoint({
|
|
31
|
+
uv: { u, v },
|
|
32
|
+
orientedPhysicalBoundsFromOpticalAxisMm: activePhysicalBoundsFromOpticalAxisMm,
|
|
33
|
+
orientation: "landscape"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function endpointFromMapping(mapping) {
|
|
37
|
+
return {
|
|
38
|
+
timeSecondsFromCaptureReference: mapping.timeSecondsFromExposureStart,
|
|
39
|
+
mappedImagePointMm: { ...mapping.mappedImagePointMm },
|
|
40
|
+
deltaFromReferenceMm: { ...mapping.deltaMm }
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function trajectorySample(point, exposure, referenceImagePointMm, input) {
|
|
44
|
+
const common = {
|
|
45
|
+
focalLengthMm: input.focalLengthMm,
|
|
46
|
+
imagePointMm: referenceImagePointMm,
|
|
47
|
+
angularVelocityRadPerSec: input.angularVelocityRadPerSec,
|
|
48
|
+
...(input.focusDistanceM === undefined
|
|
49
|
+
? {}
|
|
50
|
+
: { focusDistanceM: input.focusDistanceM })
|
|
51
|
+
};
|
|
52
|
+
const start = calculateCameraRotationImageMapping({
|
|
53
|
+
...common,
|
|
54
|
+
timeSecondsFromExposureStart: exposure.startOffsetSecondsFromOpeningReference
|
|
55
|
+
});
|
|
56
|
+
const end = calculateCameraRotationImageMapping({
|
|
57
|
+
...common,
|
|
58
|
+
timeSecondsFromExposureStart: exposure.endOffsetSecondsFromOpeningReference
|
|
59
|
+
});
|
|
60
|
+
const endpointDeltaX = end.value.mappedImagePointMm.x -
|
|
61
|
+
start.value.mappedImagePointMm.x;
|
|
62
|
+
const endpointDeltaY = end.value.mappedImagePointMm.y -
|
|
63
|
+
start.value.mappedImagePointMm.y;
|
|
64
|
+
return {
|
|
65
|
+
sample: {
|
|
66
|
+
pointNative: { ...point },
|
|
67
|
+
referenceImagePointMm: { ...referenceImagePointMm },
|
|
68
|
+
localExposureWindow: {
|
|
69
|
+
startSecondsFromCaptureReference: exposure.startOffsetSecondsFromOpeningReference,
|
|
70
|
+
endSecondsFromCaptureReference: exposure.endOffsetSecondsFromOpeningReference,
|
|
71
|
+
durationSeconds: exposure.localExposureDurationSeconds,
|
|
72
|
+
openingNormalizedScanPosition: exposure.openingNormalizedScanPosition,
|
|
73
|
+
closingNormalizedScanPosition: exposure.closingNormalizedScanPosition
|
|
74
|
+
},
|
|
75
|
+
atLocalExposureStart: endpointFromMapping(start.value),
|
|
76
|
+
atLocalExposureEnd: endpointFromMapping(end.value),
|
|
77
|
+
localExposureTrajectoryEndpointDeltaMm: {
|
|
78
|
+
x: endpointDeltaX,
|
|
79
|
+
y: endpointDeltaY,
|
|
80
|
+
distance: Math.hypot(endpointDeltaX, endpointDeltaY)
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
rotationProvenance: start.provenance
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Evaluates pure-camera-rotation trajectories for stationary reference rays
|
|
88
|
+
* over each point's local exposure window.
|
|
89
|
+
*
|
|
90
|
+
* This is a temporal-geometry bridge, not a finished rolling-shutter image
|
|
91
|
+
* mapping. The native sample point defines where a stationary world ray would
|
|
92
|
+
* land in the reference global-shutter image at the first opening-boundary
|
|
93
|
+
* phase. The existing camera-rotation model is then evaluated at that point's
|
|
94
|
+
* local exposure start and end.
|
|
95
|
+
*
|
|
96
|
+
* Sensor data-readout timing is intentionally absent. A camera/mode-specific
|
|
97
|
+
* relationship between sensor readout and exposure boundaries requires a
|
|
98
|
+
* separate explicit contract; this function never assumes one.
|
|
99
|
+
*
|
|
100
|
+
* A later renderer-facing rolling-shutter warp must solve the image mapping
|
|
101
|
+
* consistently with capture-location-dependent time and integrate over the
|
|
102
|
+
* local exposure interval. The endpoint chord returned here must not be treated
|
|
103
|
+
* as a blur kernel or as an inverse destination-to-source sampling map.
|
|
104
|
+
*/
|
|
105
|
+
export function calculateCaptureRotationTrajectories(input) {
|
|
106
|
+
requirePositiveFinite("imagingArea.widthMm", input.imagingArea.widthMm);
|
|
107
|
+
requirePositiveFinite("imagingArea.heightMm", input.imagingArea.heightMm);
|
|
108
|
+
requirePositiveFinite("focalLengthMm", input.focalLengthMm);
|
|
109
|
+
requireNonEmptySamples(input.samplePointsNative);
|
|
110
|
+
const exposureWindows = calculateCaptureExposureWindows({
|
|
111
|
+
nativeRaster: input.nativeRaster,
|
|
112
|
+
...(input.activeCaptureRect === undefined
|
|
113
|
+
? {}
|
|
114
|
+
: { activeCaptureRect: input.activeCaptureRect }),
|
|
115
|
+
shutterMechanism: input.shutterMechanism,
|
|
116
|
+
nominalExposureDurationSeconds: input.nominalExposureDurationSeconds,
|
|
117
|
+
opening: input.opening,
|
|
118
|
+
closing: input.closing,
|
|
119
|
+
samplePointsNative: input.samplePointsNative
|
|
120
|
+
});
|
|
121
|
+
const geometry = resolveCaptureGeometry({
|
|
122
|
+
imagingArea: input.imagingArea,
|
|
123
|
+
nativeRaster: input.nativeRaster,
|
|
124
|
+
orientation: "landscape",
|
|
125
|
+
activeCaptureRect: exposureWindows.value.activeCaptureRect
|
|
126
|
+
}).value;
|
|
127
|
+
const exposureByPoint = exposureWindows.value.samples;
|
|
128
|
+
const samples = [];
|
|
129
|
+
let rotationProvenance;
|
|
130
|
+
input.samplePointsNative.forEach((point, index) => {
|
|
131
|
+
const exposure = exposureByPoint[index];
|
|
132
|
+
if (exposure === undefined) {
|
|
133
|
+
throw new InvalidScientificInputError("Exposure-window sample alignment failed.");
|
|
134
|
+
}
|
|
135
|
+
const referenceImagePointMm = nativePointToReferenceImagePlane(point, geometry.activeCapture.nativeRect, geometry.activeCapture.physicalBoundsFromOpticalAxisMm);
|
|
136
|
+
const resolved = trajectorySample(point, exposure, referenceImagePointMm, input);
|
|
137
|
+
samples.push(resolved.sample);
|
|
138
|
+
rotationProvenance ??= resolved.rotationProvenance;
|
|
139
|
+
});
|
|
140
|
+
if (rotationProvenance === undefined) {
|
|
141
|
+
throw new InvalidScientificInputError("At least one rotation trajectory sample is required.");
|
|
142
|
+
}
|
|
143
|
+
return approximationResult({
|
|
144
|
+
timeReference: "first-opening-boundary-phase",
|
|
145
|
+
trajectoryMeaning: "forward-stationary-reference-ray",
|
|
146
|
+
imagingArea: { ...input.imagingArea },
|
|
147
|
+
activeCaptureRect: {
|
|
148
|
+
...exposureWindows.value.activeCaptureRect
|
|
149
|
+
},
|
|
150
|
+
samples,
|
|
151
|
+
componentProvenance: {
|
|
152
|
+
exposureWindows: exposureWindows.provenance,
|
|
153
|
+
cameraRotation: rotationProvenance
|
|
154
|
+
}
|
|
155
|
+
}, "capture-rotation-exposure-trajectory", "1.0.0", [
|
|
156
|
+
"The first opening-boundary phase is explicitly bound to t=0 of the low-level camera-rotation model for this composition only.",
|
|
157
|
+
"Each native point identifies a stationary world ray by its reference image-plane location at the capture reference time.",
|
|
158
|
+
"Local exposure start/end times come only from the capture exposure-window contract.",
|
|
159
|
+
"Sensor data-readout timing does not participate and is never assumed to equal an exposure boundary.",
|
|
160
|
+
"Camera angular velocity is constant and resolved in camera axes at the first opening-boundary phase.",
|
|
161
|
+
"Only pure camera rotation is modeled; camera translation, scene depth parallax, subject motion, deformation and occlusion changes are excluded.",
|
|
162
|
+
"The returned start/end mappings are a forward stationary-ray trajectory, not a rolling-shutter image warp.",
|
|
163
|
+
"The trajectory endpoint chord is not an integrated blur kernel and may not represent the curved path between endpoints.",
|
|
164
|
+
"A later inverse renderer warp must solve capture-location-dependent timing consistently rather than evaluating one forward displacement at the destination coordinate.",
|
|
165
|
+
"Exposure integration over the full local interval remains future work."
|
|
166
|
+
]);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=capture-rotation-trajectory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-rotation-trajectory.js","sourceRoot":"","sources":["../../src/motion/capture-rotation-trajectory.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,mBAAmB,EAGpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sCAAsC,EACtC,sBAAsB,EAEvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,+BAA+B,EAGhC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mCAAmC,EAIpC,MAAM,sBAAsB,CAAC;AA+E9B,SAAS,sBAAsB,CAC7B,kBAA0C;IAE1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,2BAA2B,CACnC,+CAA+C,CAChD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CACvC,KAAkB,EAClB,iBAKC,EACD,qCAKC;IAED,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC;IACpE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAErE,OAAO,sCAAsC,CAAC;QAC5C,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;QACZ,uCAAuC,EACrC,qCAAqC;QACvC,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAmC;IAEnC,OAAO;QACL,+BAA+B,EAC7B,OAAO,CAAC,4BAA4B;QACtC,kBAAkB,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE;QACrD,oBAAoB,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAkB,EAClB,QAAqC,EACrC,qBAAwC,EACxC,KAAgD;IAKhD,MAAM,MAAM,GAAG;QACb,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,YAAY,EAAE,qBAAqB;QACnC,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;QACxD,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;KAC9C,CAAC;IAEF,MAAM,KAAK,GAAG,mCAAmC,CAAC;QAChD,GAAG,MAAM;QACT,4BAA4B,EAC1B,QAAQ,CAAC,sCAAsC;KAClD,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,mCAAmC,CAAC;QAC9C,GAAG,MAAM;QACT,4BAA4B,EAC1B,QAAQ,CAAC,oCAAoC;KAChD,CAAC,CAAC;IAEH,MAAM,cAAc,GAClB,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC9B,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnC,MAAM,cAAc,GAClB,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC9B,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEnC,OAAO;QACL,MAAM,EAAE;YACN,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE;YACzB,qBAAqB,EAAE,EAAE,GAAG,qBAAqB,EAAE;YACnD,mBAAmB,EAAE;gBACnB,gCAAgC,EAC9B,QAAQ,CAAC,sCAAsC;gBACjD,8BAA8B,EAC5B,QAAQ,CAAC,oCAAoC;gBAC/C,eAAe,EAAE,QAAQ,CAAC,4BAA4B;gBACtD,6BAA6B,EAC3B,QAAQ,CAAC,6BAA6B;gBACxC,6BAA6B,EAC3B,QAAQ,CAAC,6BAA6B;aACzC;YACD,oBAAoB,EAAE,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC;YACtD,kBAAkB,EAAE,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;YAClD,sCAAsC,EAAE;gBACtC,CAAC,EAAE,cAAc;gBACjB,CAAC,EAAE,cAAc;gBACjB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,CAAC;aACrD;SACF;QACD,kBAAkB,EAAE,KAAK,CAAC,UAAU;KACrC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oCAAoC,CAClD,KAAgD;IAEhD,qBAAqB,CAAC,qBAAqB,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACxE,qBAAqB,CAAC,sBAAsB,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1E,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5D,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEjD,MAAM,eAAe,GAAG,+BAA+B,CAAC;QACtD,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACnD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,8BAA8B,EAC5B,KAAK,CAAC,8BAA8B;QACtC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,sBAAsB,CAAC;QACtC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,WAAW;QACxB,iBAAiB,EAAE,eAAe,CAAC,KAAK,CAAC,iBAAiB;KAC3D,CAAC,CAAC,KAAK,CAAC;IAET,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;IACtD,MAAM,OAAO,GAAsC,EAAE,CAAC;IACtD,IAAI,kBAAqD,CAAC;IAE1D,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,2BAA2B,CACnC,0CAA0C,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,qBAAqB,GAAG,gCAAgC,CAC5D,KAAK,EACL,QAAQ,CAAC,aAAa,CAAC,UAAU,EACjC,QAAQ,CAAC,aAAa,CAAC,+BAA+B,CACvD,CAAC;QAEF,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,KAAK,EACL,QAAQ,EACR,qBAAqB,EACrB,KAAK,CACN,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,kBAAkB,KAAK,QAAQ,CAAC,kBAAkB,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,2BAA2B,CACnC,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,mBAAmB,CACxB;QACE,aAAa,EAAE,8BAA8B;QAC7C,iBAAiB,EAAE,kCAAkC;QACrD,WAAW,EAAE,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE;QACrC,iBAAiB,EAAE;YACjB,GAAG,eAAe,CAAC,KAAK,CAAC,iBAAiB;SAC3C;QACD,OAAO;QACP,mBAAmB,EAAE;YACnB,eAAe,EAAE,eAAe,CAAC,UAAU;YAC3C,cAAc,EAAE,kBAAkB;SACnC;KACF,EACD,sCAAsC,EACtC,OAAO,EACP;QACE,+HAA+H;QAC/H,0HAA0H;QAC1H,qFAAqF;QACrF,qGAAqG;QACrG,sGAAsG;QACtG,iJAAiJ;QACjJ,4GAA4G;QAC5G,yHAAyH;QACzH,wKAAwK;QACxK,wEAAwE;KACzE,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Evaluates depth-dependent translational parallax at deterministic midpoint nodes over each scene
|
|
4
|
+
* point's authoritative local exposure window. The model is deliberately per point. Camera translation
|
|
5
|
+
* and optional subject translation coexist through relative linear motion; neither is redefined as the
|
|
6
|
+
* other. Camera rotation and visibility/occlusion remain separate models.
|
|
7
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
8
|
+
* limits.
|
|
9
|
+
*/
|
|
10
|
+
import { type CalculationResult } from "../core/calculation-result.js";
|
|
11
|
+
import { type CaptureOrientation, type RasterPoint } from "../output/capture-geometry.js";
|
|
12
|
+
import type { Vector3 } from "../schema/scene.js";
|
|
13
|
+
import type { ResolvedCaptureModeTiming } from "../sensor/capture-mode-timing.js";
|
|
14
|
+
import type { SensorImagingArea } from "../sensor/sensor-geometry.js";
|
|
15
|
+
export interface CaptureTranslationParallaxSceneSample {
|
|
16
|
+
sampleId: string;
|
|
17
|
+
/**
|
|
18
|
+
* Native destination point whose authoritative local exposure window applies
|
|
19
|
+
* to this scene sample.
|
|
20
|
+
*/
|
|
21
|
+
destinationPointNative: RasterPoint;
|
|
22
|
+
/**
|
|
23
|
+
* Metric point position in the camera axes at the first-opening-boundary
|
|
24
|
+
* phase. +X right, +Y up, +Z forward/away from the camera.
|
|
25
|
+
*/
|
|
26
|
+
positionCameraM: Vector3;
|
|
27
|
+
/**
|
|
28
|
+
* Optional constant subject/world-point velocity in the same initial camera
|
|
29
|
+
* axes. Omitted means stationary world point.
|
|
30
|
+
*/
|
|
31
|
+
subjectVelocityMps?: Vector3;
|
|
32
|
+
}
|
|
33
|
+
export interface CalculateCaptureTranslationParallaxTemporalQuadratureInput {
|
|
34
|
+
timing: ResolvedCaptureModeTiming;
|
|
35
|
+
imagingArea: SensorImagingArea;
|
|
36
|
+
focalLengthMm: number;
|
|
37
|
+
focusDistanceM?: number;
|
|
38
|
+
orientation: CaptureOrientation;
|
|
39
|
+
/**
|
|
40
|
+
* Constant physical camera-center translation in camera axes at the capture
|
|
41
|
+
* reference phase. Rotation is intentionally separate.
|
|
42
|
+
*/
|
|
43
|
+
cameraTranslationVelocityMps: Vector3;
|
|
44
|
+
temporalSampleCount: number;
|
|
45
|
+
sceneSamples: readonly CaptureTranslationParallaxSceneSample[];
|
|
46
|
+
}
|
|
47
|
+
export interface CaptureTranslationParallaxTemporalNode {
|
|
48
|
+
temporalSampleIndex: number;
|
|
49
|
+
localExposurePhase: number;
|
|
50
|
+
captureTimeSecondsFromReference: number;
|
|
51
|
+
normalizedTimeWeight: number;
|
|
52
|
+
timeMeasureSeconds: number;
|
|
53
|
+
relativePositionCameraM: Vector3;
|
|
54
|
+
mappedImagePointMm: {
|
|
55
|
+
x: number;
|
|
56
|
+
y: number;
|
|
57
|
+
};
|
|
58
|
+
deltaFromReferenceImagePlaneMm: {
|
|
59
|
+
x: number;
|
|
60
|
+
y: number;
|
|
61
|
+
distance: number;
|
|
62
|
+
};
|
|
63
|
+
deltaNativeSamples: {
|
|
64
|
+
x: number;
|
|
65
|
+
y: number;
|
|
66
|
+
distance: number;
|
|
67
|
+
};
|
|
68
|
+
deltaOrientedSamples: {
|
|
69
|
+
x: number;
|
|
70
|
+
y: number;
|
|
71
|
+
distance: number;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface CaptureTranslationParallaxTemporalSample {
|
|
75
|
+
sampleId: string;
|
|
76
|
+
destinationPointNative: RasterPoint;
|
|
77
|
+
referencePositionCameraM: Vector3;
|
|
78
|
+
subjectVelocityMps: Vector3;
|
|
79
|
+
localExposureWindow: {
|
|
80
|
+
startSecondsFromCaptureReference: number;
|
|
81
|
+
endSecondsFromCaptureReference: number;
|
|
82
|
+
durationSeconds: number;
|
|
83
|
+
};
|
|
84
|
+
referenceImagePointMm: {
|
|
85
|
+
x: number;
|
|
86
|
+
y: number;
|
|
87
|
+
};
|
|
88
|
+
nodes: readonly CaptureTranslationParallaxTemporalNode[];
|
|
89
|
+
}
|
|
90
|
+
export interface CaptureTranslationParallaxTemporalQuadrature {
|
|
91
|
+
timeReference: "first-opening-boundary-phase";
|
|
92
|
+
timingProfileIdentity: {
|
|
93
|
+
profileId: string;
|
|
94
|
+
profileVersion: string;
|
|
95
|
+
captureModeId: string;
|
|
96
|
+
};
|
|
97
|
+
orientation: CaptureOrientation;
|
|
98
|
+
projectionDistanceMm: number;
|
|
99
|
+
temporalSampleCount: number;
|
|
100
|
+
cameraTranslationVelocityMps: Vector3;
|
|
101
|
+
samples: readonly CaptureTranslationParallaxTemporalSample[];
|
|
102
|
+
geometryModel: "metric-depth-dependent-constant-linear-translation";
|
|
103
|
+
relativeMotionComposition: "subject-minus-camera-translation";
|
|
104
|
+
metricSceneDepthRequired: true;
|
|
105
|
+
oneGlobalHomographyAuthorized: false;
|
|
106
|
+
cameraRotationComposed: false;
|
|
107
|
+
visibilityOcclusionModeled: false;
|
|
108
|
+
sensorReadoutTimingUsedAsExposureTiming: false;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Evaluates depth-dependent translational parallax at deterministic midpoint
|
|
112
|
+
* nodes over each scene point's authoritative local exposure window.
|
|
113
|
+
*
|
|
114
|
+
* The model is deliberately per point. Camera translation and optional subject
|
|
115
|
+
* translation coexist through relative linear motion; neither is redefined as
|
|
116
|
+
* the other. Camera rotation and visibility/occlusion remain separate models.
|
|
117
|
+
*/
|
|
118
|
+
export declare function calculateCaptureTranslationParallaxTemporalQuadrature(input: CalculateCaptureTranslationParallaxTemporalQuadratureInput): CalculationResult<CaptureTranslationParallaxTemporalQuadrature>;
|
|
119
|
+
//# sourceMappingURL=capture-translation-parallax-temporal-quadrature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-translation-parallax-temporal-quadrature.d.ts","sourceRoot":"","sources":["../../src/motion/capture-translation-parallax-temporal-quadrature.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EACV,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,qCAAqC;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,sBAAsB,EACpB,WAAW,CAAC;IACd;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,0DAA0D;IACzE,MAAM,EACJ,yBAAyB,CAAC;IAC5B,WAAW,EACT,iBAAiB,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EACT,kBAAkB,CAAC;IACrB;;;OAGG;IACH,4BAA4B,EAC1B,OAAO,CAAC;IACV,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EACV,SAAS,qCAAqC,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,sCAAsC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,+BAA+B,EAC7B,MAAM,CAAC;IACT,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EACrB,OAAO,CAAC;IACV,kBAAkB,EAAE;QAClB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,8BAA8B,EAAE;QAC9B,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,kBAAkB,EAAE;QAClB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,oBAAoB,EAAE;QACpB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,wCAAwC;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EACpB,WAAW,CAAC;IACd,wBAAwB,EACtB,OAAO,CAAC;IACV,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE;QACnB,gCAAgC,EAC9B,MAAM,CAAC;QACT,8BAA8B,EAC5B,MAAM,CAAC;QACT,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,qBAAqB,EAAE;QACrB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,KAAK,EACH,SAAS,sCAAsC,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,4CAA4C;IAC3D,aAAa,EACX,8BAA8B,CAAC;IACjC,qBAAqB,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,EACT,kBAAkB,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,4BAA4B,EAC1B,OAAO,CAAC;IACV,OAAO,EACL,SAAS,wCAAwC,EAAE,CAAC;IACtD,aAAa,EACX,oDAAoD,CAAC;IACvD,yBAAyB,EACvB,kCAAkC,CAAC;IACrC,wBAAwB,EAAE,IAAI,CAAC;IAC/B,6BAA6B,EAAE,KAAK,CAAC;IACrC,sBAAsB,EAAE,KAAK,CAAC;IAC9B,0BAA0B,EAAE,KAAK,CAAC;IAClC,uCAAuC,EACrC,KAAK,CAAC;CACT;AAkHD;;;;;;;GAOG;AACH,wBAAgB,qDAAqD,CACnE,KAAK,EACH,0DAA0D,GAC3D,iBAAiB,CAAC,4CAA4C,CAAC,CA4VjE"}
|