@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
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Maps one stationary-world ray to its image-plane location after pure camera rotation at an arbitrary
|
|
5
|
+
* physical time from exposure start. The initial image point defines the world ray in the camera frame
|
|
6
|
+
* at t=0. Constant angular velocity is integrated as one axis-angle rotation vector, avoiding
|
|
7
|
+
* Euler-order dependence. The stationary world ray is then expressed in the rotated camera frame using
|
|
8
|
+
* the inverse camera rotation and projected rectilinearly back onto the image plane. This function
|
|
9
|
+
* models rotation only. It deliberately excludes camera translation because translational optical flow
|
|
10
|
+
* depends on scene depth.
|
|
11
|
+
* Maps a captured stationary-world ray at one non-negative capture time back to its image-plane
|
|
12
|
+
* location at exposure start. For the existing constant-axis pure-rotation model this inverse is
|
|
13
|
+
* analytic: the captured ray is transformed by the forward camera rotation before rectilinear
|
|
14
|
+
* projection. No iterative solver is required.
|
|
15
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
16
|
+
* limits.
|
|
17
|
+
*/
|
|
2
18
|
import { calculatedResult } from "../core/calculation-result.js";
|
|
3
19
|
import { InvalidScientificInputError, requirePositiveFinite } from "../core/validation.js";
|
|
4
20
|
import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
|
|
@@ -154,4 +170,99 @@ export function calculateCameraRotationImageMapping(input) {
|
|
|
154
170
|
"The stationary world ray is transformed by the inverse camera rotation before rectilinear projection"
|
|
155
171
|
]);
|
|
156
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Maps a captured stationary-world ray at one non-negative capture time back
|
|
175
|
+
* to its image-plane location at exposure start.
|
|
176
|
+
*
|
|
177
|
+
* For the existing constant-axis pure-rotation model this inverse is analytic:
|
|
178
|
+
* the captured ray is transformed by the forward camera rotation before
|
|
179
|
+
* rectilinear projection. No iterative solver is required.
|
|
180
|
+
*/
|
|
181
|
+
export function calculateInverseCameraRotationImageMapping(input) {
|
|
182
|
+
requirePositiveFinite("focalLengthMm", input.focalLengthMm);
|
|
183
|
+
requireFinite("imagePointMm.x", input.imagePointMm.x);
|
|
184
|
+
requireFinite("imagePointMm.y", input.imagePointMm.y);
|
|
185
|
+
requireNonNegativeFinite("timeSecondsFromExposureStart", input.timeSecondsFromExposureStart);
|
|
186
|
+
requireFinite("angularVelocityRadPerSec.pitch", input.angularVelocityRadPerSec.pitch);
|
|
187
|
+
requireFinite("angularVelocityRadPerSec.yaw", input.angularVelocityRadPerSec.yaw);
|
|
188
|
+
requireFinite("angularVelocityRadPerSec.roll", input.angularVelocityRadPerSec.roll);
|
|
189
|
+
if (input.samplingPitchMicrometers !== undefined) {
|
|
190
|
+
requirePositiveFinite("samplingPitchMicrometers.x", input.samplingPitchMicrometers.x);
|
|
191
|
+
requirePositiveFinite("samplingPitchMicrometers.y", input.samplingPitchMicrometers.y);
|
|
192
|
+
}
|
|
193
|
+
const { projectionDistanceMm, focusAware } = resolveProjectionDistanceMm(input.focalLengthMm, input.focusDistanceM);
|
|
194
|
+
const angularDisplacementRad = {
|
|
195
|
+
pitch: input.angularVelocityRadPerSec.pitch *
|
|
196
|
+
input.timeSecondsFromExposureStart,
|
|
197
|
+
yaw: input.angularVelocityRadPerSec.yaw *
|
|
198
|
+
input.timeSecondsFromExposureStart,
|
|
199
|
+
roll: input.angularVelocityRadPerSec.roll *
|
|
200
|
+
input.timeSecondsFromExposureStart
|
|
201
|
+
};
|
|
202
|
+
const angularMagnitude = Math.hypot(angularDisplacementRad.pitch, angularDisplacementRad.yaw, angularDisplacementRad.roll);
|
|
203
|
+
const capturedRay = {
|
|
204
|
+
x: input.imagePointMm.x / projectionDistanceMm,
|
|
205
|
+
y: input.imagePointMm.y / projectionDistanceMm,
|
|
206
|
+
z: 1
|
|
207
|
+
};
|
|
208
|
+
let referenceRay = capturedRay;
|
|
209
|
+
if (angularMagnitude !== 0) {
|
|
210
|
+
const axis = {
|
|
211
|
+
x: angularDisplacementRad.pitch / angularMagnitude,
|
|
212
|
+
y: angularDisplacementRad.yaw / angularMagnitude,
|
|
213
|
+
z: angularDisplacementRad.roll / angularMagnitude
|
|
214
|
+
};
|
|
215
|
+
referenceRay = rotateVectorByAxisAngle(capturedRay, axis, angularMagnitude);
|
|
216
|
+
}
|
|
217
|
+
if (!Number.isFinite(referenceRay.z) || referenceRay.z <= 0) {
|
|
218
|
+
throw new InvalidScientificInputError("Inverse camera rotation maps the requested captured ray to or behind the reference camera plane.");
|
|
219
|
+
}
|
|
220
|
+
const referenceImagePointMm = {
|
|
221
|
+
x: projectionDistanceMm * (referenceRay.x / referenceRay.z),
|
|
222
|
+
y: projectionDistanceMm * (referenceRay.y / referenceRay.z)
|
|
223
|
+
};
|
|
224
|
+
const deltaMm = {
|
|
225
|
+
x: referenceImagePointMm.x - input.imagePointMm.x,
|
|
226
|
+
y: referenceImagePointMm.y - input.imagePointMm.y,
|
|
227
|
+
distance: Math.hypot(referenceImagePointMm.x - input.imagePointMm.x, referenceImagePointMm.y - input.imagePointMm.y)
|
|
228
|
+
};
|
|
229
|
+
let deltaImagePlaneSamples;
|
|
230
|
+
if (input.samplingPitchMicrometers !== undefined) {
|
|
231
|
+
const pitchXmm = input.samplingPitchMicrometers.x / 1000;
|
|
232
|
+
const pitchYmm = input.samplingPitchMicrometers.y / 1000;
|
|
233
|
+
const sampleX = deltaMm.x / pitchXmm;
|
|
234
|
+
const sampleY = deltaMm.y / pitchYmm;
|
|
235
|
+
deltaImagePlaneSamples = {
|
|
236
|
+
x: sampleX,
|
|
237
|
+
y: sampleY,
|
|
238
|
+
distance: Math.hypot(sampleX, sampleY)
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return calculatedResult({
|
|
242
|
+
projectionDistanceMm,
|
|
243
|
+
timeSecondsFromExposureStart: input.timeSecondsFromExposureStart,
|
|
244
|
+
angularDisplacementRad: {
|
|
245
|
+
...angularDisplacementRad,
|
|
246
|
+
magnitude: angularMagnitude
|
|
247
|
+
},
|
|
248
|
+
capturedImagePointMm: { ...input.imagePointMm },
|
|
249
|
+
referenceImagePointMm,
|
|
250
|
+
deltaMm,
|
|
251
|
+
...(deltaImagePlaneSamples === undefined
|
|
252
|
+
? {}
|
|
253
|
+
: { deltaImagePlaneSamples })
|
|
254
|
+
}, focusAware
|
|
255
|
+
? "focus-aware-inverse-spatial-camera-rotation-mapping"
|
|
256
|
+
: "inverse-spatial-camera-rotation-mapping", "1.0.0", [
|
|
257
|
+
"Ideal rectilinear projection",
|
|
258
|
+
focusAware
|
|
259
|
+
? "Thin-lens image distance for the selected focus plane is used as the projection distance"
|
|
260
|
+
: "Nominal focal length is used as the infinity-focus projection distance",
|
|
261
|
+
"Camera angular velocity is constant during the evaluated interval",
|
|
262
|
+
"Angular velocity components are resolved in the camera axes at exposure start and integrated as one axis-angle vector",
|
|
263
|
+
"The inverse is analytic under the same constant-axis pure-rotation model; no iterative solve is used",
|
|
264
|
+
"The captured stationary-world ray is transformed by the forward camera rotation to recover its exposure-start reference ray",
|
|
265
|
+
"Camera translation, scene depth parallax and subject motion are not modeled"
|
|
266
|
+
]);
|
|
267
|
+
}
|
|
157
268
|
//# sourceMappingURL=camera-rotation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-rotation.js","sourceRoot":"","sources":["../../src/motion/camera-rotation.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-rotation.js","sourceRoot":"","sources":["../../src/motion/camera-rotation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Calculates an instantaneous inverse capture-scan mapping for stationary world rays under pure camera
|
|
4
|
+
* rotation. The destination native sensor location is authoritative for local exposure timing. At an
|
|
5
|
+
* explicit phase within that local window, the captured image-plane ray is analytically mapped back to
|
|
6
|
+
* the reference image plane at the first opening-boundary phase. No fixed-point/iterative solve is
|
|
7
|
+
* used because pure rotation under the existing constant-axis model has an analytic inverse once
|
|
8
|
+
* destination location and local capture time are known. This function is not a finite-exposure
|
|
9
|
+
* renderer and does not integrate blur. Sensor data-readout timing is deliberately absent; exposure
|
|
10
|
+
* boundaries are the only timing source.
|
|
11
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
12
|
+
* limits.
|
|
13
|
+
*/
|
|
14
|
+
import { type CalculationProvenance, type CalculationResult } from "../core/calculation-result.js";
|
|
15
|
+
import { type CaptureOrientation, type RasterPoint, type RasterVector } from "../output/capture-geometry.js";
|
|
16
|
+
import { type CalculateCaptureExposureWindowsInput } from "../sensor/exposure-window.js";
|
|
17
|
+
import { type SensorImagingArea } from "../sensor/sensor-geometry.js";
|
|
18
|
+
import { type CameraAngularVelocityRadPerSec, type ImagePlanePointMm } from "./camera-rotation.js";
|
|
19
|
+
export interface CalculateCaptureRotationInverseMappingsInput extends CalculateCaptureExposureWindowsInput {
|
|
20
|
+
imagingArea: SensorImagingArea;
|
|
21
|
+
focalLengthMm: number;
|
|
22
|
+
focusDistanceM?: number;
|
|
23
|
+
angularVelocityRadPerSec: CameraAngularVelocityRadPerSec;
|
|
24
|
+
/**
|
|
25
|
+
* Fraction of each point's local exposure interval at which the
|
|
26
|
+
* instantaneous mapping is evaluated.
|
|
27
|
+
*
|
|
28
|
+
* 0 = local exposure start, 0.5 = local midpoint, 1 = local exposure end.
|
|
29
|
+
* A phase is required because finite exposure has no single sharp geometry.
|
|
30
|
+
*/
|
|
31
|
+
localExposurePhase: number;
|
|
32
|
+
/**
|
|
33
|
+
* Physical capture orientation used only to rotate the reported native
|
|
34
|
+
* inverse sample-displacement vector into oriented-capture coordinates.
|
|
35
|
+
* It does not alter the native exposure schedule.
|
|
36
|
+
*/
|
|
37
|
+
orientation: CaptureOrientation;
|
|
38
|
+
samplePointsNative: readonly RasterPoint[];
|
|
39
|
+
}
|
|
40
|
+
export interface CaptureRotationInverseMappingSample {
|
|
41
|
+
destinationPointNative: RasterPoint;
|
|
42
|
+
destinationImagePointMm: ImagePlanePointMm;
|
|
43
|
+
localExposureWindow: {
|
|
44
|
+
startSecondsFromCaptureReference: number;
|
|
45
|
+
endSecondsFromCaptureReference: number;
|
|
46
|
+
durationSeconds: number;
|
|
47
|
+
};
|
|
48
|
+
localExposurePhase: number;
|
|
49
|
+
captureTimeSecondsFromReference: number;
|
|
50
|
+
/**
|
|
51
|
+
* Same stationary world ray expressed in the exposure-start reference image
|
|
52
|
+
* plane. This may lie outside the active capture; it is intentionally not
|
|
53
|
+
* clamped.
|
|
54
|
+
*/
|
|
55
|
+
referenceImagePointMm: ImagePlanePointMm;
|
|
56
|
+
inverseDisplacementImagePlaneMm: {
|
|
57
|
+
x: number;
|
|
58
|
+
y: number;
|
|
59
|
+
distance: number;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Reference-minus-destination displacement in continuous native effective
|
|
63
|
+
* raster-sample units (+X right, +Y down).
|
|
64
|
+
*/
|
|
65
|
+
inverseDisplacementNativeSamples: RasterVector & {
|
|
66
|
+
distance: number;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* The same displacement after physical capture orientation.
|
|
70
|
+
*/
|
|
71
|
+
inverseDisplacementOrientedSamples: RasterVector & {
|
|
72
|
+
distance: number;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface CaptureRotationInverseMappings {
|
|
76
|
+
timeReference: "first-opening-boundary-phase";
|
|
77
|
+
referenceTimeSecondsFromCaptureReference: 0;
|
|
78
|
+
mappingMeaning: "instantaneous-destination-to-exposure-start-reference-ray";
|
|
79
|
+
orientation: CaptureOrientation;
|
|
80
|
+
localExposurePhase: number;
|
|
81
|
+
imagingArea: SensorImagingArea;
|
|
82
|
+
activeCaptureRect: {
|
|
83
|
+
x: number;
|
|
84
|
+
y: number;
|
|
85
|
+
width: number;
|
|
86
|
+
height: number;
|
|
87
|
+
};
|
|
88
|
+
samples: readonly CaptureRotationInverseMappingSample[];
|
|
89
|
+
componentProvenance: {
|
|
90
|
+
exposureWindows: CalculationProvenance;
|
|
91
|
+
sensorGeometry: CalculationProvenance;
|
|
92
|
+
inverseCameraRotation: CalculationProvenance;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Calculates an instantaneous inverse capture-scan mapping for stationary
|
|
97
|
+
* world rays under pure camera rotation.
|
|
98
|
+
*
|
|
99
|
+
* The destination native sensor location is authoritative for local exposure
|
|
100
|
+
* timing. At an explicit phase within that local window, the captured
|
|
101
|
+
* image-plane ray is analytically mapped back to the reference image plane at
|
|
102
|
+
* the first opening-boundary phase.
|
|
103
|
+
*
|
|
104
|
+
* No fixed-point/iterative solve is used because pure rotation under the
|
|
105
|
+
* existing constant-axis model has an analytic inverse once destination
|
|
106
|
+
* location and local capture time are known.
|
|
107
|
+
*
|
|
108
|
+
* This function is not a finite-exposure renderer and does not integrate blur.
|
|
109
|
+
* Sensor data-readout timing is deliberately absent; exposure boundaries are
|
|
110
|
+
* the only timing source.
|
|
111
|
+
*/
|
|
112
|
+
export declare function calculateCaptureRotationInverseMappings(input: CalculateCaptureRotationInverseMappingsInput): CalculationResult<CaptureRotationInverseMappings>;
|
|
113
|
+
//# sourceMappingURL=capture-rotation-inverse-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-rotation-inverse-mapping.d.ts","sourceRoot":"","sources":["../../src/motion/capture-rotation-inverse-mapping.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,oCAAoC,EAE1C,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,4CACf,SAAQ,oCAAoC;IAC5C,WAAW,EAAE,iBAAiB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,8BAA8B,CAAC;IACzD;;;;;;OAMG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,EAAE,kBAAkB,CAAC;IAChC,kBAAkB,EAAE,SAAS,WAAW,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,mCAAmC;IAClD,sBAAsB,EAAE,WAAW,CAAC;IACpC,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,mBAAmB,EAAE;QACnB,gCAAgC,EAAE,MAAM,CAAC;QACzC,8BAA8B,EAAE,MAAM,CAAC;QACvC,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,+BAA+B,EAAE,MAAM,CAAC;IACxC;;;;OAIG;IACH,qBAAqB,EAAE,iBAAiB,CAAC;IACzC,+BAA+B,EAAE;QAC/B,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,gCAAgC,EAAE,YAAY,GAAG;QAC/C,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,kCAAkC,EAAE,YAAY,GAAG;QACjD,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,EAAE,8BAA8B,CAAC;IAC9C,wCAAwC,EAAE,CAAC,CAAC;IAC5C,cAAc,EACZ,2DAA2D,CAAC;IAC9D,WAAW,EAAE,kBAAkB,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,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,mCAAmC,EAAE,CAAC;IACxD,mBAAmB,EAAE;QACnB,eAAe,EAAE,qBAAqB,CAAC;QACvC,cAAc,EAAE,qBAAqB,CAAC;QACtC,qBAAqB,EAAE,qBAAqB,CAAC;KAC9C,CAAC;CACH;AAwDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,4CAA4C,GAClD,iBAAiB,CAAC,8BAA8B,CAAC,CA4JnD"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Calculates an instantaneous inverse capture-scan mapping for stationary world rays under pure camera
|
|
5
|
+
* rotation. The destination native sensor location is authoritative for local exposure timing. At an
|
|
6
|
+
* explicit phase within that local window, the captured image-plane ray is analytically mapped back to
|
|
7
|
+
* the reference image plane at the first opening-boundary phase. No fixed-point/iterative solve is
|
|
8
|
+
* used because pure rotation under the existing constant-axis model has an analytic inverse once
|
|
9
|
+
* destination location and local capture time are known. This function is not a finite-exposure
|
|
10
|
+
* renderer and does not integrate blur. Sensor data-readout timing is deliberately absent; exposure
|
|
11
|
+
* boundaries are the only timing source.
|
|
12
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
13
|
+
* limits.
|
|
14
|
+
*/
|
|
15
|
+
import { approximationResult } from "../core/calculation-result.js";
|
|
16
|
+
import { InvalidScientificInputError, requirePositiveFinite } from "../core/validation.js";
|
|
17
|
+
import { mapOrientedPhysicalUvToImagePlanePoint, resolveCaptureGeometry, transformNativeRasterVectorToOriented } from "../output/capture-geometry.js";
|
|
18
|
+
import { calculateCaptureExposureWindows } from "../sensor/exposure-window.js";
|
|
19
|
+
import { calculateSensorGeometryMetrics } from "../sensor/sensor-geometry.js";
|
|
20
|
+
import { calculateInverseCameraRotationImageMapping } from "./camera-rotation.js";
|
|
21
|
+
function requireExposurePhase(value) {
|
|
22
|
+
if (!Number.isFinite(value) || value < 0 || value > 1) {
|
|
23
|
+
throw new InvalidScientificInputError("localExposurePhase must be finite and within [0, 1].");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function requireNonEmptySamples(value) {
|
|
27
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
28
|
+
throw new InvalidScientificInputError("samplePointsNative must be a non-empty array.");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function nativePointToImagePlane(point, activeCaptureRect, activePhysicalBoundsFromOpticalAxisMm) {
|
|
32
|
+
const u = (point.x - activeCaptureRect.x) / activeCaptureRect.width;
|
|
33
|
+
const v = (point.y - activeCaptureRect.y) / activeCaptureRect.height;
|
|
34
|
+
return mapOrientedPhysicalUvToImagePlanePoint({
|
|
35
|
+
uv: { u, v },
|
|
36
|
+
orientedPhysicalBoundsFromOpticalAxisMm: activePhysicalBoundsFromOpticalAxisMm,
|
|
37
|
+
orientation: "landscape"
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function captureTimeAtPhase(exposure, phase) {
|
|
41
|
+
return (exposure.startOffsetSecondsFromOpeningReference +
|
|
42
|
+
phase * exposure.localExposureDurationSeconds);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculates an instantaneous inverse capture-scan mapping for stationary
|
|
46
|
+
* world rays under pure camera rotation.
|
|
47
|
+
*
|
|
48
|
+
* The destination native sensor location is authoritative for local exposure
|
|
49
|
+
* timing. At an explicit phase within that local window, the captured
|
|
50
|
+
* image-plane ray is analytically mapped back to the reference image plane at
|
|
51
|
+
* the first opening-boundary phase.
|
|
52
|
+
*
|
|
53
|
+
* No fixed-point/iterative solve is used because pure rotation under the
|
|
54
|
+
* existing constant-axis model has an analytic inverse once destination
|
|
55
|
+
* location and local capture time are known.
|
|
56
|
+
*
|
|
57
|
+
* This function is not a finite-exposure renderer and does not integrate blur.
|
|
58
|
+
* Sensor data-readout timing is deliberately absent; exposure boundaries are
|
|
59
|
+
* the only timing source.
|
|
60
|
+
*/
|
|
61
|
+
export function calculateCaptureRotationInverseMappings(input) {
|
|
62
|
+
requirePositiveFinite("imagingArea.widthMm", input.imagingArea.widthMm);
|
|
63
|
+
requirePositiveFinite("imagingArea.heightMm", input.imagingArea.heightMm);
|
|
64
|
+
requirePositiveFinite("focalLengthMm", input.focalLengthMm);
|
|
65
|
+
requireExposurePhase(input.localExposurePhase);
|
|
66
|
+
requireNonEmptySamples(input.samplePointsNative);
|
|
67
|
+
const exposureWindows = calculateCaptureExposureWindows({
|
|
68
|
+
nativeRaster: input.nativeRaster,
|
|
69
|
+
...(input.activeCaptureRect === undefined
|
|
70
|
+
? {}
|
|
71
|
+
: { activeCaptureRect: input.activeCaptureRect }),
|
|
72
|
+
shutterMechanism: input.shutterMechanism,
|
|
73
|
+
nominalExposureDurationSeconds: input.nominalExposureDurationSeconds,
|
|
74
|
+
opening: input.opening,
|
|
75
|
+
closing: input.closing,
|
|
76
|
+
samplePointsNative: input.samplePointsNative
|
|
77
|
+
});
|
|
78
|
+
const geometry = resolveCaptureGeometry({
|
|
79
|
+
imagingArea: input.imagingArea,
|
|
80
|
+
nativeRaster: input.nativeRaster,
|
|
81
|
+
orientation: input.orientation,
|
|
82
|
+
activeCaptureRect: exposureWindows.value.activeCaptureRect
|
|
83
|
+
}).value;
|
|
84
|
+
const sensorGeometry = calculateSensorGeometryMetrics({
|
|
85
|
+
imagingArea: input.imagingArea,
|
|
86
|
+
nativeRaster: input.nativeRaster
|
|
87
|
+
});
|
|
88
|
+
const pitchXmm = sensorGeometry.value.sampling.pitchXMicrometers / 1000;
|
|
89
|
+
const pitchYmm = sensorGeometry.value.sampling.pitchYMicrometers / 1000;
|
|
90
|
+
let inverseRotationProvenance;
|
|
91
|
+
const samples = input.samplePointsNative.map((point, index) => {
|
|
92
|
+
const exposure = exposureWindows.value.samples[index];
|
|
93
|
+
if (exposure === undefined) {
|
|
94
|
+
throw new InvalidScientificInputError("Exposure-window sample alignment failed.");
|
|
95
|
+
}
|
|
96
|
+
const destinationImagePointMm = nativePointToImagePlane(point, geometry.activeCapture.nativeRect, geometry.activeCapture.physicalBoundsFromOpticalAxisMm);
|
|
97
|
+
const captureTimeSecondsFromReference = captureTimeAtPhase(exposure, input.localExposurePhase);
|
|
98
|
+
const inverse = calculateInverseCameraRotationImageMapping({
|
|
99
|
+
focalLengthMm: input.focalLengthMm,
|
|
100
|
+
imagePointMm: destinationImagePointMm,
|
|
101
|
+
timeSecondsFromExposureStart: captureTimeSecondsFromReference,
|
|
102
|
+
angularVelocityRadPerSec: input.angularVelocityRadPerSec,
|
|
103
|
+
...(input.focusDistanceM === undefined
|
|
104
|
+
? {}
|
|
105
|
+
: { focusDistanceM: input.focusDistanceM }),
|
|
106
|
+
samplingPitchMicrometers: {
|
|
107
|
+
x: sensorGeometry.value.sampling.pitchXMicrometers,
|
|
108
|
+
y: sensorGeometry.value.sampling.pitchYMicrometers
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
inverseRotationProvenance ??= inverse.provenance;
|
|
112
|
+
const nativeX = inverse.value.deltaMm.x / pitchXmm;
|
|
113
|
+
const nativeY = -inverse.value.deltaMm.y / pitchYmm;
|
|
114
|
+
const inverseDisplacementNativeSamples = {
|
|
115
|
+
x: nativeX,
|
|
116
|
+
y: nativeY,
|
|
117
|
+
distance: Math.hypot(nativeX, nativeY)
|
|
118
|
+
};
|
|
119
|
+
const orientedVector = transformNativeRasterVectorToOriented({
|
|
120
|
+
vector: {
|
|
121
|
+
x: inverseDisplacementNativeSamples.x,
|
|
122
|
+
y: inverseDisplacementNativeSamples.y
|
|
123
|
+
},
|
|
124
|
+
orientation: input.orientation
|
|
125
|
+
});
|
|
126
|
+
const inverseDisplacementOrientedSamples = {
|
|
127
|
+
...orientedVector,
|
|
128
|
+
distance: Math.hypot(orientedVector.x, orientedVector.y)
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
destinationPointNative: { ...point },
|
|
132
|
+
destinationImagePointMm,
|
|
133
|
+
localExposureWindow: {
|
|
134
|
+
startSecondsFromCaptureReference: exposure.startOffsetSecondsFromOpeningReference,
|
|
135
|
+
endSecondsFromCaptureReference: exposure.endOffsetSecondsFromOpeningReference,
|
|
136
|
+
durationSeconds: exposure.localExposureDurationSeconds
|
|
137
|
+
},
|
|
138
|
+
localExposurePhase: input.localExposurePhase,
|
|
139
|
+
captureTimeSecondsFromReference,
|
|
140
|
+
referenceImagePointMm: {
|
|
141
|
+
...inverse.value.referenceImagePointMm
|
|
142
|
+
},
|
|
143
|
+
inverseDisplacementImagePlaneMm: {
|
|
144
|
+
...inverse.value.deltaMm
|
|
145
|
+
},
|
|
146
|
+
inverseDisplacementNativeSamples,
|
|
147
|
+
inverseDisplacementOrientedSamples
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
if (inverseRotationProvenance === undefined) {
|
|
151
|
+
throw new InvalidScientificInputError("At least one inverse rotation mapping sample is required.");
|
|
152
|
+
}
|
|
153
|
+
return approximationResult({
|
|
154
|
+
timeReference: "first-opening-boundary-phase",
|
|
155
|
+
referenceTimeSecondsFromCaptureReference: 0,
|
|
156
|
+
mappingMeaning: "instantaneous-destination-to-exposure-start-reference-ray",
|
|
157
|
+
orientation: input.orientation,
|
|
158
|
+
localExposurePhase: input.localExposurePhase,
|
|
159
|
+
imagingArea: { ...input.imagingArea },
|
|
160
|
+
activeCaptureRect: {
|
|
161
|
+
...exposureWindows.value.activeCaptureRect
|
|
162
|
+
},
|
|
163
|
+
samples,
|
|
164
|
+
componentProvenance: {
|
|
165
|
+
exposureWindows: exposureWindows.provenance,
|
|
166
|
+
sensorGeometry: sensorGeometry.provenance,
|
|
167
|
+
inverseCameraRotation: inverseRotationProvenance
|
|
168
|
+
}
|
|
169
|
+
}, "capture-rotation-instantaneous-inverse-mapping", "1.0.0", [
|
|
170
|
+
"Destination native capture location determines the local exposure window.",
|
|
171
|
+
"The caller explicitly selects one phase within each local exposure interval; no midpoint or other phase is inferred.",
|
|
172
|
+
"The first opening-boundary phase is the reference image time and is bound to t=0 of the camera-rotation model for this composition.",
|
|
173
|
+
"Pure rotation is inverted analytically after local capture time is known; no iterative or fixed-point solver is used.",
|
|
174
|
+
"Sensor data-readout timing is not an input and is not assumed to equal any exposure boundary.",
|
|
175
|
+
"Reference image-plane coordinates are not clamped to the active capture and may fall outside it under motion.",
|
|
176
|
+
"Native geometric sample displacement uses the full physical imaging-area/native-raster pitch and is not output-resolution dependent.",
|
|
177
|
+
"Physical capture orientation rotates reported native displacement only; it does not alter native exposure timing.",
|
|
178
|
+
"The mapping lives in the ideal pre-lens image plane and does not compose radial distortion, chromatic aberration, PSF, or output resampling.",
|
|
179
|
+
"This is an instantaneous mapping, not finite-exposure integration or a blur kernel.",
|
|
180
|
+
"Camera translation, depth parallax, subject motion, deformation, occlusion changes, flash/flicker and shutter shock are excluded.",
|
|
181
|
+
"The model does not claim the global rolling/capture-scan picture-taking map is one-to-one for arbitrary motion."
|
|
182
|
+
]);
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=capture-rotation-inverse-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-rotation-inverse-mapping.js","sourceRoot":"","sources":["../../src/motion/capture-rotation-inverse-mapping.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;;GAYG;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,EACtB,qCAAqC,EAItC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,+BAA+B,EAGhC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,8BAA8B,EAE/B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,0CAA0C,EAG3C,MAAM,sBAAsB,CAAC;AAmF9B,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,2BAA2B,CACnC,sDAAsD,CACvD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAA6B;IAE7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,2BAA2B,CACnC,+CAA+C,CAChD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,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,kBAAkB,CACzB,QAAqC,EACrC,KAAa;IAEb,OAAO,CACL,QAAQ,CAAC,sCAAsC;QAC/C,KAAK,GAAG,QAAQ,CAAC,4BAA4B,CAC9C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,uCAAuC,CACrD,KAAmD;IAEnD,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,oBAAoB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC/C,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,KAAK,CAAC,WAAW;QAC9B,iBAAiB,EAAE,eAAe,CAAC,KAAK,CAAC,iBAAiB;KAC3D,CAAC,CAAC,KAAK,CAAC;IAET,MAAM,cAAc,GAAG,8BAA8B,CAAC;QACpD,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;IAEH,MAAM,QAAQ,GACZ,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC;IACzD,MAAM,QAAQ,GACZ,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAEzD,IAAI,yBAA4D,CAAC;IACjE,MAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,2BAA2B,CACnC,0CAA0C,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,uBAAuB,GAAG,uBAAuB,CACrD,KAAK,EACL,QAAQ,CAAC,aAAa,CAAC,UAAU,EACjC,QAAQ,CAAC,aAAa,CAAC,+BAA+B,CACvD,CAAC;QACF,MAAM,+BAA+B,GAAG,kBAAkB,CACxD,QAAQ,EACR,KAAK,CAAC,kBAAkB,CACzB,CAAC;QAEF,MAAM,OAAO,GAAG,0CAA0C,CAAC;YACzD,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,YAAY,EAAE,uBAAuB;YACrC,4BAA4B,EAC1B,+BAA+B;YACjC,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;YACxD,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS;gBACpC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YAC7C,wBAAwB,EAAE;gBACxB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB;gBAClD,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB;aACnD;SACF,CAAC,CAAC;QACH,yBAAyB,KAAK,OAAO,CAAC,UAAU,CAAC;QAEjD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC;QACpD,MAAM,gCAAgC,GAAG;YACvC,CAAC,EAAE,OAAO;YACV,CAAC,EAAE,OAAO;YACV,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;SACvC,CAAC;QACF,MAAM,cAAc,GAAG,qCAAqC,CAAC;YAC3D,MAAM,EAAE;gBACN,CAAC,EAAE,gCAAgC,CAAC,CAAC;gBACrC,CAAC,EAAE,gCAAgC,CAAC,CAAC;aACtC;YACD,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC,CAAC;QACH,MAAM,kCAAkC,GAAG;YACzC,GAAG,cAAc;YACjB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;SACzD,CAAC;QAEF,OAAO;YACL,sBAAsB,EAAE,EAAE,GAAG,KAAK,EAAE;YACpC,uBAAuB;YACvB,mBAAmB,EAAE;gBACnB,gCAAgC,EAC9B,QAAQ,CAAC,sCAAsC;gBACjD,8BAA8B,EAC5B,QAAQ,CAAC,oCAAoC;gBAC/C,eAAe,EAAE,QAAQ,CAAC,4BAA4B;aACvD;YACD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,+BAA+B;YAC/B,qBAAqB,EAAE;gBACrB,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB;aACvC;YACD,+BAA+B,EAAE;gBAC/B,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO;aACzB;YACD,gCAAgC;YAChC,kCAAkC;SACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,yBAAyB,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,2BAA2B,CACnC,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAED,OAAO,mBAAmB,CACxB;QACE,aAAa,EAAE,8BAA8B;QAC7C,wCAAwC,EAAE,CAAC;QAC3C,cAAc,EACZ,2DAA2D;QAC7D,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,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,cAAc,CAAC,UAAU;YACzC,qBAAqB,EAAE,yBAAyB;SACjD;KACF,EACD,gDAAgD,EAChD,OAAO,EACP;QACE,2EAA2E;QAC3E,sHAAsH;QACtH,qIAAqI;QACrI,uHAAuH;QACvH,+FAA+F;QAC/F,+GAA+G;QAC/G,sIAAsI;QACtI,mHAAmH;QACnH,8IAA8I;QAC9I,qFAAqF;QACrF,mIAAmI;QACnI,iHAAiH;KAClH,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Builds deterministic temporal quadrature nodes for pure-camera-rotation capture geometry over each
|
|
4
|
+
* destination point's local exposure interval. The first model uses an equal-width midpoint rule.
|
|
5
|
+
* Every node reuses calculateCaptureRotationInverseMappings(), so the instantaneous geometry has one
|
|
6
|
+
* authoritative implementation. No radiance is evaluated here. normalizedTimeWeight is suitable for a
|
|
7
|
+
* downstream time-average under a uniform temporal-response assumption, while timeMeasureSeconds is
|
|
8
|
+
* the local dt measure for a downstream time integral. Neither weight includes shutter transmission,
|
|
9
|
+
* scene flicker, sensor response, radiometric calibration or any other throughput term. The function
|
|
10
|
+
* intentionally reports no numerical integration error estimate: geometry alone cannot determine the
|
|
11
|
+
* error in a scene-radiance integral. Downstream renderers may compare increasing temporal sample
|
|
12
|
+
* counts in their own radiance domain when convergence evidence is required.
|
|
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, RasterVector } from "../output/capture-geometry.js";
|
|
18
|
+
import type { ImagePlanePointMm } from "./camera-rotation.js";
|
|
19
|
+
import { type CalculateCaptureRotationInverseMappingsInput } from "./capture-rotation-inverse-mapping.js";
|
|
20
|
+
export interface CalculateCaptureRotationTemporalQuadratureInput extends Omit<CalculateCaptureRotationInverseMappingsInput, "localExposurePhase"> {
|
|
21
|
+
/**
|
|
22
|
+
* Number of deterministic temporal quadrature nodes per local exposure
|
|
23
|
+
* interval. Nodes use the uniform midpoint rule.
|
|
24
|
+
*/
|
|
25
|
+
temporalSampleCount: number;
|
|
26
|
+
}
|
|
27
|
+
export interface CaptureRotationTemporalQuadratureNode {
|
|
28
|
+
temporalSampleIndex: number;
|
|
29
|
+
/**
|
|
30
|
+
* Normalized phase in the local exposure interval, strictly inside (0, 1).
|
|
31
|
+
*/
|
|
32
|
+
localExposurePhase: number;
|
|
33
|
+
captureTimeSecondsFromReference: number;
|
|
34
|
+
/**
|
|
35
|
+
* Dimensionless weight for approximating the time-average of a downstream
|
|
36
|
+
* quantity under a uniform temporal-response assumption.
|
|
37
|
+
*/
|
|
38
|
+
normalizedTimeWeight: number;
|
|
39
|
+
/**
|
|
40
|
+
* Seconds-valued quadrature measure for approximating a time integral.
|
|
41
|
+
*
|
|
42
|
+
* This is temporal measure only. It is not shutter transmission, radiometric
|
|
43
|
+
* throughput, photon count, sensor response, or scene radiance.
|
|
44
|
+
*/
|
|
45
|
+
timeMeasureSeconds: number;
|
|
46
|
+
referenceImagePointMm: ImagePlanePointMm;
|
|
47
|
+
inverseDisplacementImagePlaneMm: {
|
|
48
|
+
x: number;
|
|
49
|
+
y: number;
|
|
50
|
+
distance: number;
|
|
51
|
+
};
|
|
52
|
+
inverseDisplacementNativeSamples: RasterVector & {
|
|
53
|
+
distance: number;
|
|
54
|
+
};
|
|
55
|
+
inverseDisplacementOrientedSamples: RasterVector & {
|
|
56
|
+
distance: number;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export interface CaptureRotationTemporalQuadraturePoint {
|
|
60
|
+
destinationPointNative: RasterPoint;
|
|
61
|
+
destinationImagePointMm: ImagePlanePointMm;
|
|
62
|
+
localExposureWindow: {
|
|
63
|
+
startSecondsFromCaptureReference: number;
|
|
64
|
+
endSecondsFromCaptureReference: number;
|
|
65
|
+
durationSeconds: number;
|
|
66
|
+
};
|
|
67
|
+
nodes: readonly CaptureRotationTemporalQuadratureNode[];
|
|
68
|
+
}
|
|
69
|
+
export interface CaptureRotationTemporalQuadrature {
|
|
70
|
+
timeReference: "first-opening-boundary-phase";
|
|
71
|
+
quadratureScheme: "uniform-midpoint";
|
|
72
|
+
temporalResponseModel: "uniform-over-local-exposure";
|
|
73
|
+
temporalSampleCount: number;
|
|
74
|
+
/**
|
|
75
|
+
* The quadrature returns geometry and temporal measure only. It does not
|
|
76
|
+
* integrate radiance or produce a blur kernel.
|
|
77
|
+
*/
|
|
78
|
+
outputMeaning: "temporal-geometry-quadrature-nodes";
|
|
79
|
+
points: readonly CaptureRotationTemporalQuadraturePoint[];
|
|
80
|
+
componentProvenance: {
|
|
81
|
+
instantaneousInverseMapping: CalculationProvenance;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Builds deterministic temporal quadrature nodes for pure-camera-rotation
|
|
86
|
+
* capture geometry over each destination point's local exposure interval.
|
|
87
|
+
*
|
|
88
|
+
* The first model uses an equal-width midpoint rule. Every node reuses
|
|
89
|
+
* calculateCaptureRotationInverseMappings(), so the instantaneous geometry has
|
|
90
|
+
* one authoritative implementation.
|
|
91
|
+
*
|
|
92
|
+
* No radiance is evaluated here. normalizedTimeWeight is suitable for a
|
|
93
|
+
* downstream time-average under a uniform temporal-response assumption, while
|
|
94
|
+
* timeMeasureSeconds is the local dt measure for a downstream time integral.
|
|
95
|
+
* Neither weight includes shutter transmission, scene flicker, sensor
|
|
96
|
+
* response, radiometric calibration or any other throughput term.
|
|
97
|
+
*
|
|
98
|
+
* The function intentionally reports no numerical integration error estimate:
|
|
99
|
+
* geometry alone cannot determine the error in a scene-radiance integral.
|
|
100
|
+
* Downstream renderers may compare increasing temporal sample counts in their
|
|
101
|
+
* own radiance domain when convergence evidence is required.
|
|
102
|
+
*/
|
|
103
|
+
export declare function calculateCaptureRotationTemporalQuadrature(input: CalculateCaptureRotationTemporalQuadratureInput): CalculationResult<CaptureRotationTemporalQuadrature>;
|
|
104
|
+
//# sourceMappingURL=capture-rotation-temporal-quadrature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-rotation-temporal-quadrature.d.ts","sourceRoot":"","sources":["../../src/motion/capture-rotation-temporal-quadrature.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAEL,KAAK,4CAA4C,EAClD,MAAM,uCAAuC,CAAC;AAE/C,MAAM,WAAW,+CACf,SAAQ,IAAI,CACV,4CAA4C,EAC5C,oBAAoB,CACrB;IACD;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qCAAqC;IACpD,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,+BAA+B,EAAE,MAAM,CAAC;IACxC;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,iBAAiB,CAAC;IACzC,+BAA+B,EAAE;QAC/B,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,gCAAgC,EAAE,YAAY,GAAG;QAC/C,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,kCAAkC,EAAE,YAAY,GAAG;QACjD,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,sCAAsC;IACrD,sBAAsB,EAAE,WAAW,CAAC;IACpC,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,mBAAmB,EAAE;QACnB,gCAAgC,EAAE,MAAM,CAAC;QACzC,8BAA8B,EAAE,MAAM,CAAC;QACvC,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,KAAK,EAAE,SAAS,qCAAqC,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,iCAAiC;IAChD,aAAa,EAAE,8BAA8B,CAAC;IAC9C,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,qBAAqB,EAAE,6BAA6B,CAAC;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,aAAa,EAAE,oCAAoC,CAAC;IACpD,MAAM,EAAE,SAAS,sCAAsC,EAAE,CAAC;IAC1D,mBAAmB,EAAE;QACnB,2BAA2B,EAAE,qBAAqB,CAAC;KACpD,CAAC;CACH;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,+CAA+C,GACrD,iBAAiB,CAAC,iCAAiC,CAAC,CA2ItD"}
|