@photivra/engine 1.4.0 → 2.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/CHANGELOG.md +401 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +118 -5
- package/dist/capture/native-raw-development.js +224 -59
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +67 -10
- package/dist/capture/native-raw.js +90 -24
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -4
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +23 -8
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
3
|
+
* Parallax from camera movement (translation): nearer points shift more in the image than distant
|
|
4
|
+
* ones. It is evaluated at deterministic midpoint time samples across each scene point's local
|
|
5
|
+
* exposure window.
|
|
6
|
+
*
|
|
7
|
+
* The model works point by point, on purpose. Camera movement and optional subject movement combine
|
|
8
|
+
* as relative linear motion; neither is recast as the other. Camera rotation, and visibility or
|
|
9
|
+
* occlusion, are separate models.
|
|
10
|
+
* @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers
|
|
11
|
+
* and support limits.
|
|
10
12
|
*/
|
|
11
13
|
import { approximationResult } from "../core/calculation-result.js";
|
|
12
14
|
import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
|
|
13
15
|
import { transformNativeRasterVectorToOriented } from "../output/capture-geometry.js";
|
|
14
16
|
import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
|
|
17
|
+
import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
|
|
18
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
15
19
|
function requireFiniteVector(value, path) {
|
|
20
|
+
requireInputObject(value, path);
|
|
16
21
|
for (const axis of ["x", "y", "z"]) {
|
|
17
22
|
if (!Number.isFinite(value[axis])) {
|
|
18
23
|
throw new InvalidScientificInputError(path +
|
|
@@ -28,7 +33,7 @@ function requireFiniteVector(value, path) {
|
|
|
28
33
|
function requireNonEmptyString(value, path) {
|
|
29
34
|
if (typeof value !== "string" ||
|
|
30
35
|
value.trim().length === 0) {
|
|
31
|
-
throw new
|
|
36
|
+
throw new InvalidConfigurationError(path +
|
|
32
37
|
" must be a non-empty string.");
|
|
33
38
|
}
|
|
34
39
|
return value.trim();
|
|
@@ -58,6 +63,7 @@ function projectPoint(positionM, projectionDistanceMm, path) {
|
|
|
58
63
|
return mapped;
|
|
59
64
|
}
|
|
60
65
|
function localExposureForPoint(timing, point) {
|
|
66
|
+
requireInputObject(point, "destinationPointNative");
|
|
61
67
|
const matches = timing.exposureWindows.samples.filter((sample) => samePoint(sample.pointNative, point));
|
|
62
68
|
if (matches.length !== 1) {
|
|
63
69
|
throw new InvalidScientificInputError("Each translation/parallax scene sample must match exactly one committed exposure-window sample point.");
|
|
@@ -65,22 +71,35 @@ function localExposureForPoint(timing, point) {
|
|
|
65
71
|
return matches[0];
|
|
66
72
|
}
|
|
67
73
|
/**
|
|
68
|
-
* Evaluates depth-dependent
|
|
69
|
-
*
|
|
74
|
+
* Evaluates depth-dependent parallax from camera movement at deterministic
|
|
75
|
+
* midpoint time samples across each scene point's local exposure window.
|
|
70
76
|
*
|
|
71
|
-
* The model
|
|
72
|
-
*
|
|
73
|
-
* the other. Camera rotation and visibility
|
|
77
|
+
* The model works point by point, on purpose. Camera movement and optional
|
|
78
|
+
* subject movement combine as relative linear motion; neither is recast as
|
|
79
|
+
* the other. Camera rotation, and visibility or occlusion, are separate
|
|
80
|
+
* models.
|
|
74
81
|
*/
|
|
75
82
|
export function calculateCaptureTranslationParallaxTemporalQuadrature(input) {
|
|
83
|
+
requireInputKeys(input, "calculateCaptureTranslationParallaxTemporalQuadrature", ["timing", "imagingArea", "focalLengthMm", "focusDistanceM", "orientation", "cameraTranslationVelocityMps", "temporalSampleCount", "sceneSamples"]);
|
|
84
|
+
requireInputObject(input.imagingArea, "imagingArea");
|
|
85
|
+
requireInputObject(input.timing, "timing");
|
|
86
|
+
requireInputObject(input.timing.nativeRaster, "timing.nativeRaster");
|
|
87
|
+
requireInputObject(input.timing.exposureWindows, "timing.exposureWindows");
|
|
88
|
+
if (!Array.isArray(input.timing.exposureWindows.samples))
|
|
89
|
+
throw new InvalidConfigurationError("timing.exposureWindows.samples must be an array.");
|
|
90
|
+
input.timing.exposureWindows.samples.forEach((sample, index) => {
|
|
91
|
+
requireInputObject(sample, "timing.exposureWindows.samples[" + index + "]");
|
|
92
|
+
requireInputObject(sample.pointNative, "timing.exposureWindows.samples[" + index + "].pointNative");
|
|
93
|
+
});
|
|
76
94
|
requirePositiveFinite("imagingArea.widthMm", input.imagingArea.widthMm);
|
|
77
95
|
requirePositiveFinite("imagingArea.heightMm", input.imagingArea.heightMm);
|
|
78
96
|
requirePositiveFinite("focalLengthMm", input.focalLengthMm);
|
|
79
97
|
requirePositiveInteger("temporalSampleCount", input.temporalSampleCount);
|
|
80
98
|
if (!Array.isArray(input.sceneSamples) ||
|
|
81
99
|
input.sceneSamples.length === 0) {
|
|
82
|
-
throw new
|
|
100
|
+
throw new InvalidConfigurationError("sceneSamples must be a non-empty array.");
|
|
83
101
|
}
|
|
102
|
+
input.sceneSamples.forEach((sample, index) => requireInputObject(sample, "sceneSamples[" + index + "]"));
|
|
84
103
|
const ids = input.sceneSamples.map((sample) => requireNonEmptyString(sample.sampleId, "sceneSamples[].sampleId"));
|
|
85
104
|
if (new Set(ids).size !==
|
|
86
105
|
ids.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture-translation-parallax-temporal-quadrature.js","sourceRoot":"","sources":["../../src/motion/capture-translation-parallax-temporal-quadrature.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capture-translation-parallax-temporal-quadrature.js","sourceRoot":"","sources":["../../src/motion/capture-translation-parallax-temporal-quadrature.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Parallax from camera movement (translation): nearer points shift more in the image than distant\n * ones. It is evaluated at deterministic midpoint time samples across each scene point's local\n * exposure window.\n *\n * The model works point by point, on purpose. Camera movement and optional subject movement combine\n * as relative linear motion; neither is recast as the other. Camera rotation, and visibility or\n * occlusion, are separate models.\n * @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers\n * and support limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport {\n InvalidScientificInputError,\n requirePositiveFinite,\n requirePositiveInteger\n} from \"../core/validation.js\";\nimport {\n transformNativeRasterVectorToOriented,\n type CaptureOrientation,\n type RasterPoint\n} from \"../output/capture-geometry.js\";\nimport { calculateThinLensImageDistance } from \"../optics/thin-lens.js\";\nimport type { Vector3 } from \"../schema/scene.js\";\nimport type {\n ResolvedCaptureModeTiming\n} from \"../sensor/capture-mode-timing.js\";\nimport type {\n SensorImagingArea\n} from \"../sensor/sensor-geometry.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport interface CaptureTranslationParallaxSceneSample {\n sampleId: string;\n /**\n * Native destination point. Its local exposure window applies to this scene\n * sample.\n */\n destinationPointNative:\n RasterPoint;\n /**\n * Point position in metres, in the camera axes at the first opening-boundary\n * phase. +X right, +Y up, +Z forward (away from the camera).\n */\n positionCameraM: Vector3;\n /**\n * Optional constant velocity of the subject (world point), in the same\n * starting camera axes. If omitted, the world point is still.\n */\n subjectVelocityMps?: Vector3;\n}\n\nexport interface CalculateCaptureTranslationParallaxTemporalQuadratureInput {\n timing:\n ResolvedCaptureModeTiming;\n imagingArea:\n SensorImagingArea;\n focalLengthMm: number;\n focusDistanceM?: number;\n orientation:\n CaptureOrientation;\n /**\n * Constant movement of the camera centre, in camera axes at the capture\n * reference phase. Rotation is handled separately, on purpose.\n */\n cameraTranslationVelocityMps:\n Vector3;\n temporalSampleCount: number;\n sceneSamples:\n readonly CaptureTranslationParallaxSceneSample[];\n}\n\nexport interface CaptureTranslationParallaxTemporalNode {\n temporalSampleIndex: number;\n localExposurePhase: number;\n captureTimeSecondsFromReference:\n number;\n normalizedTimeWeight: number;\n timeMeasureSeconds: number;\n relativePositionCameraM:\n Vector3;\n mappedImagePointMm: {\n x: number;\n y: number;\n };\n deltaFromReferenceImagePlaneMm: {\n x: number;\n y: number;\n distance: number;\n };\n deltaNativeSamples: {\n x: number;\n y: number;\n distance: number;\n };\n deltaOrientedSamples: {\n x: number;\n y: number;\n distance: number;\n };\n}\n\nexport interface CaptureTranslationParallaxTemporalSample {\n sampleId: string;\n destinationPointNative:\n RasterPoint;\n referencePositionCameraM:\n Vector3;\n subjectVelocityMps: Vector3;\n localExposureWindow: {\n startSecondsFromCaptureReference:\n number;\n endSecondsFromCaptureReference:\n number;\n durationSeconds: number;\n };\n referenceImagePointMm: {\n x: number;\n y: number;\n };\n nodes:\n readonly CaptureTranslationParallaxTemporalNode[];\n}\n\nexport interface CaptureTranslationParallaxTemporalQuadrature {\n timeReference:\n \"first-opening-boundary-phase\";\n timingProfileIdentity: {\n profileId: string;\n profileVersion: string;\n captureModeId: string;\n };\n orientation:\n CaptureOrientation;\n projectionDistanceMm: number;\n temporalSampleCount: number;\n cameraTranslationVelocityMps:\n Vector3;\n samples:\n readonly CaptureTranslationParallaxTemporalSample[];\n geometryModel:\n \"metric-depth-dependent-constant-linear-translation\";\n relativeMotionComposition:\n \"subject-minus-camera-translation\";\n metricSceneDepthRequired: true;\n oneGlobalHomographyAuthorized: false;\n cameraRotationComposed: false;\n visibilityOcclusionModeled: false;\n sensorReadoutTimingUsedAsExposureTiming:\n false;\n}\n\nfunction requireFiniteVector(\n value: Vector3,\n path: string\n): Vector3 {\n requireInputObject(value, path);\n for (\n const axis of\n [\"x\", \"y\", \"z\"] as const\n ) {\n if (\n !Number.isFinite(\n value[axis]\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \".\" +\n axis +\n \" must be finite.\"\n );\n }\n }\n return {\n ...value\n };\n}\n\nfunction requireNonEmptyString(\n value: string,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction samePoint(\n a: RasterPoint,\n b: RasterPoint\n): boolean {\n return (\n a.x === b.x &&\n a.y === b.y\n );\n}\n\nfunction projectPoint(\n positionM: Vector3,\n projectionDistanceMm: number,\n path: string\n): {\n x: number;\n y: number;\n} {\n if (\n positionM.z <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must remain in front of the camera plane.\"\n );\n }\n const mapped = {\n x:\n projectionDistanceMm *\n (positionM.x /\n positionM.z),\n y:\n projectionDistanceMm *\n (positionM.y /\n positionM.z)\n };\n if (\n !Number.isFinite(mapped.x) ||\n !Number.isFinite(mapped.y)\n ) {\n throw new InvalidScientificInputError(\n path +\n \" projection must remain finite.\"\n );\n }\n return mapped;\n}\n\nfunction localExposureForPoint(\n timing:\n ResolvedCaptureModeTiming,\n point:\n RasterPoint\n): ResolvedCaptureModeTiming[\"exposureWindows\"][\"samples\"][number] {\n requireInputObject(point, \"destinationPointNative\");\n const matches =\n timing.exposureWindows.samples.filter(\n (sample) =>\n samePoint(\n sample.pointNative,\n point\n )\n );\n if (matches.length !== 1) {\n throw new InvalidScientificInputError(\n \"Each translation/parallax scene sample must match exactly one committed exposure-window sample point.\"\n );\n }\n return matches[0]!;\n}\n\n/**\n * Evaluates depth-dependent parallax from camera movement at deterministic\n * midpoint time samples across each scene point's local exposure window.\n *\n * The model works point by point, on purpose. Camera movement and optional\n * subject movement combine as relative linear motion; neither is recast as\n * the other. Camera rotation, and visibility or occlusion, are separate\n * models.\n */\nexport function calculateCaptureTranslationParallaxTemporalQuadrature(\n input:\n CalculateCaptureTranslationParallaxTemporalQuadratureInput\n): CalculationResult<CaptureTranslationParallaxTemporalQuadrature> {\n requireInputKeys(input, \"calculateCaptureTranslationParallaxTemporalQuadrature\", [\"timing\", \"imagingArea\", \"focalLengthMm\", \"focusDistanceM\", \"orientation\", \"cameraTranslationVelocityMps\", \"temporalSampleCount\", \"sceneSamples\"]);\n requireInputObject(input.imagingArea, \"imagingArea\");\n requireInputObject(input.timing, \"timing\");\n requireInputObject(input.timing.nativeRaster, \"timing.nativeRaster\");\n requireInputObject(input.timing.exposureWindows, \"timing.exposureWindows\");\n if (!Array.isArray(input.timing.exposureWindows.samples)) throw new InvalidConfigurationError(\"timing.exposureWindows.samples must be an array.\");\n input.timing.exposureWindows.samples.forEach((sample, index) => {\n requireInputObject(sample, \"timing.exposureWindows.samples[\" + index + \"]\");\n requireInputObject(sample.pointNative, \"timing.exposureWindows.samples[\" + index + \"].pointNative\");\n });\n requirePositiveFinite(\n \"imagingArea.widthMm\",\n input.imagingArea.widthMm\n );\n requirePositiveFinite(\n \"imagingArea.heightMm\",\n input.imagingArea.heightMm\n );\n requirePositiveFinite(\n \"focalLengthMm\",\n input.focalLengthMm\n );\n requirePositiveInteger(\n \"temporalSampleCount\",\n input.temporalSampleCount\n );\n\n if (\n !Array.isArray(\n input.sceneSamples\n ) ||\n input.sceneSamples.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"sceneSamples must be a non-empty array.\"\n );\n }\n\n input.sceneSamples.forEach((sample, index) => requireInputObject(sample, \"sceneSamples[\" + index + \"]\"));\n const ids =\n input.sceneSamples.map(\n (sample) =>\n requireNonEmptyString(\n sample.sampleId,\n \"sceneSamples[].sampleId\"\n )\n );\n if (\n new Set(ids).size !==\n ids.length\n ) {\n throw new InvalidScientificInputError(\n \"sceneSamples must not contain duplicate sampleId values.\"\n );\n }\n\n const cameraVelocity =\n requireFiniteVector(\n input\n .cameraTranslationVelocityMps,\n \"cameraTranslationVelocityMps\"\n );\n\n const projectionDistanceMm =\n input.focusDistanceM ===\n undefined\n ? input.focalLengthMm\n : calculateThinLensImageDistance({\n focalLengthMm:\n input.focalLengthMm,\n objectDistanceM:\n input.focusDistanceM\n }).value.imageDistanceMm;\n\n const pitchX =\n input.imagingArea.widthMm /\n input.timing.nativeRaster\n .pixelWidth;\n const pitchY =\n input.imagingArea.heightMm /\n input.timing.nativeRaster\n .pixelHeight;\n\n if (\n !Number.isFinite(pitchX) ||\n !Number.isFinite(pitchY) ||\n pitchX <= 0 ||\n pitchY <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Resolved translation/parallax sampling pitch must remain finite and positive.\"\n );\n }\n\n const samples =\n input.sceneSamples.map(\n (sceneSample, sampleIndex) => {\n const samplePath =\n \"sceneSamples[\" +\n sampleIndex +\n \"]\";\n const sampleId =\n requireNonEmptyString(\n sceneSample.sampleId,\n samplePath +\n \".sampleId\"\n );\n const referencePosition =\n requireFiniteVector(\n sceneSample\n .positionCameraM,\n samplePath +\n \".positionCameraM\"\n );\n if (\n referencePosition.z <= 0\n ) {\n throw new InvalidScientificInputError(\n samplePath +\n \".positionCameraM.z must place the scene point in front of the camera.\"\n );\n }\n const subjectVelocity =\n sceneSample\n .subjectVelocityMps ===\n undefined\n ? {\n x: 0,\n y: 0,\n z: 0\n }\n : requireFiniteVector(\n sceneSample\n .subjectVelocityMps,\n samplePath +\n \".subjectVelocityMps\"\n );\n\n const exposure =\n localExposureForPoint(\n input.timing,\n sceneSample\n .destinationPointNative\n );\n const duration =\n exposure\n .localExposureDurationSeconds;\n if (\n !Number.isFinite(\n duration\n ) ||\n duration <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Translation/parallax requires a positive finite local exposure duration.\"\n );\n }\n\n const referenceImagePoint =\n projectPoint(\n referencePosition,\n projectionDistanceMm,\n samplePath +\n \".positionCameraM\"\n );\n\n const normalizedTimeWeight =\n 1 /\n input.temporalSampleCount;\n const timeMeasureSeconds =\n duration /\n input.temporalSampleCount;\n\n const nodes =\n Array.from(\n {\n length:\n input.temporalSampleCount\n },\n (\n _,\n temporalSampleIndex\n ) => {\n const localExposurePhase =\n (temporalSampleIndex +\n 0.5) /\n input.temporalSampleCount;\n const captureTime =\n exposure\n .startOffsetSecondsFromOpeningReference +\n localExposurePhase *\n duration;\n\n const relativePosition = {\n x:\n referencePosition.x +\n (subjectVelocity.x -\n cameraVelocity.x) *\n captureTime,\n y:\n referencePosition.y +\n (subjectVelocity.y -\n cameraVelocity.y) *\n captureTime,\n z:\n referencePosition.z +\n (subjectVelocity.z -\n cameraVelocity.z) *\n captureTime\n };\n\n const mapped =\n projectPoint(\n relativePosition,\n projectionDistanceMm,\n samplePath +\n \".relativePositionCameraM\"\n );\n const deltaMm = {\n x:\n mapped.x -\n referenceImagePoint.x,\n y:\n mapped.y -\n referenceImagePoint.y\n };\n const deltaNative = {\n x:\n deltaMm.x /\n pitchX,\n y:\n -deltaMm.y /\n pitchY\n };\n const oriented =\n transformNativeRasterVectorToOriented({\n vector:\n deltaNative,\n orientation:\n input.orientation\n });\n\n return {\n temporalSampleIndex,\n localExposurePhase,\n captureTimeSecondsFromReference:\n captureTime,\n normalizedTimeWeight,\n timeMeasureSeconds,\n relativePositionCameraM:\n relativePosition,\n mappedImagePointMm:\n mapped,\n deltaFromReferenceImagePlaneMm: {\n ...deltaMm,\n distance:\n Math.hypot(\n deltaMm.x,\n deltaMm.y\n )\n },\n deltaNativeSamples: {\n ...deltaNative,\n distance:\n Math.hypot(\n deltaNative.x,\n deltaNative.y\n )\n },\n deltaOrientedSamples: {\n ...oriented,\n distance:\n Math.hypot(\n oriented.x,\n oriented.y\n )\n }\n };\n }\n );\n\n return {\n sampleId,\n destinationPointNative: {\n ...sceneSample\n .destinationPointNative\n },\n referencePositionCameraM:\n referencePosition,\n subjectVelocityMps:\n subjectVelocity,\n localExposureWindow: {\n startSecondsFromCaptureReference:\n exposure\n .startOffsetSecondsFromOpeningReference,\n endSecondsFromCaptureReference:\n exposure\n .endOffsetSecondsFromOpeningReference,\n durationSeconds:\n duration\n },\n referenceImagePointMm:\n referenceImagePoint,\n nodes\n };\n }\n );\n\n return approximationResult(\n {\n timeReference:\n \"first-opening-boundary-phase\",\n timingProfileIdentity: {\n profileId:\n input.timing\n .timingProfileId,\n profileVersion:\n input.timing\n .timingProfileVersion,\n captureModeId:\n input.timing\n .captureModeId\n },\n orientation:\n input.orientation,\n projectionDistanceMm,\n temporalSampleCount:\n input.temporalSampleCount,\n cameraTranslationVelocityMps:\n cameraVelocity,\n samples,\n geometryModel:\n \"metric-depth-dependent-constant-linear-translation\",\n relativeMotionComposition:\n \"subject-minus-camera-translation\",\n metricSceneDepthRequired:\n true,\n oneGlobalHomographyAuthorized:\n false,\n cameraRotationComposed:\n false,\n visibilityOcclusionModeled:\n false,\n sensorReadoutTimingUsedAsExposureTiming:\n false\n },\n \"capture-translation-parallax-temporal-quadrature\",\n \"1.0.0\",\n [\n \"Translation is evaluated independently for each metric scene point because translational image motion depends on depth.\",\n \"Camera and subject translation coexist as explicit relative linear motion; subject motion is not reclassified as camera motion.\",\n \"The camera-axis basis is fixed at the first-opening-boundary phase; camera rotation remains a separate model.\",\n \"The destination native point selects the authoritative local exposure window; sensor data-readout timing is not substituted for exposure time.\",\n \"Oriented sample displacement is a coordinate transform of the same physical image-plane mapping and does not change the translation physics.\",\n \"No one global homography/warp is authorized for arbitrary 3D scenes.\",\n \"Visibility, occlusion, deformation, acceleration and rolling scene geometry remain outside this model.\"\n ]\n );\n}\n"]}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
2
|
+
* Projection of an extended object: several explicit points (in metres) on one rigid object that
|
|
3
|
+
* moves in a straight line.
|
|
4
|
+
*
|
|
5
|
+
* The points are evaluated at deterministic physical times, or at deterministic midpoint time
|
|
6
|
+
* samples inside each point's local exposure window (from the capture exposure schedule).
|
|
7
|
+
*
|
|
8
|
+
* This is geometry only. It does not build a blur kernel, decide visibility, integrate radiance,
|
|
9
|
+
* deform the object, rotate the camera or apply a universal scale.
|
|
10
|
+
* @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers
|
|
11
|
+
* and support limits.
|
|
10
12
|
*/
|
|
11
13
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
12
14
|
import type { RasterPoint } from "../output/capture-geometry.js";
|
|
@@ -15,7 +17,7 @@ import type { ResolvedCaptureModeTiming } from "../sensor/capture-mode-timing.js
|
|
|
15
17
|
export interface ExtendedObjectMetricPoint {
|
|
16
18
|
pointId: string;
|
|
17
19
|
/**
|
|
18
|
-
*
|
|
20
|
+
* Point in camera space, in metres, at the shared reference phase.
|
|
19
21
|
*
|
|
20
22
|
* +X right, +Y up, +Z forward/away from the camera.
|
|
21
23
|
*/
|
|
@@ -95,8 +97,8 @@ export interface ExtendedObjectProjectionTrajectory {
|
|
|
95
97
|
}
|
|
96
98
|
export interface CaptureExtendedObjectMetricPoint extends ExtendedObjectMetricPoint {
|
|
97
99
|
/**
|
|
98
|
-
* Native destination point
|
|
99
|
-
*
|
|
100
|
+
* Native destination point. It selects the local exposure window (from the
|
|
101
|
+
* capture exposure schedule) for this object point.
|
|
100
102
|
*/
|
|
101
103
|
destinationPointNative: RasterPoint;
|
|
102
104
|
}
|
|
@@ -163,13 +165,14 @@ export interface CaptureExtendedObjectTemporalProjection {
|
|
|
163
165
|
* Evaluates multiple explicit metric points on one rigidly translating object
|
|
164
166
|
* at deterministic physical times.
|
|
165
167
|
*
|
|
166
|
-
* This is geometry only. It does not
|
|
167
|
-
* radiance
|
|
168
|
+
* This is geometry only. It does not build a blur kernel, decide visibility,
|
|
169
|
+
* integrate radiance, deform the object, rotate the camera or apply a
|
|
170
|
+
* universal scale.
|
|
168
171
|
*/
|
|
169
172
|
export declare function calculateExtendedObjectProjectionTrajectory(input: CalculateExtendedObjectProjectionTrajectoryInput): CalculationResult<ExtendedObjectProjectionTrajectory>;
|
|
170
173
|
/**
|
|
171
|
-
* Evaluates extended-object projection at deterministic midpoint
|
|
172
|
-
* each point's
|
|
174
|
+
* Evaluates extended-object projection at deterministic midpoint time samples
|
|
175
|
+
* inside each point's local exposure window (from the capture exposure
|
|
176
|
+
* schedule).
|
|
173
177
|
*/
|
|
174
178
|
export declare function calculateCaptureExtendedObjectTemporalProjection(input: CalculateCaptureExtendedObjectTemporalProjectionInput): CalculationResult<CaptureExtendedObjectTemporalProjection>;
|
|
175
|
-
//# sourceMappingURL=extended-object-projection.d.ts.map
|
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
3
|
+
* Projection of an extended object: several explicit points (in metres) on one rigid object that
|
|
4
|
+
* moves in a straight line.
|
|
5
|
+
*
|
|
6
|
+
* The points are evaluated at deterministic physical times, or at deterministic midpoint time
|
|
7
|
+
* samples inside each point's local exposure window (from the capture exposure schedule).
|
|
8
|
+
*
|
|
9
|
+
* This is geometry only. It does not build a blur kernel, decide visibility, integrate radiance,
|
|
10
|
+
* deform the object, rotate the camera or apply a universal scale.
|
|
11
|
+
* @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers
|
|
12
|
+
* and support limits.
|
|
11
13
|
*/
|
|
12
14
|
import { approximationResult } from "../core/calculation-result.js";
|
|
13
15
|
import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
|
|
14
16
|
import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
|
|
17
|
+
import { requireInputKeys, requireInputObject } from "../core/record-validation.js";
|
|
18
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
15
19
|
function requireNonEmptyString(value, path) {
|
|
16
20
|
if (typeof value !== "string" ||
|
|
17
21
|
value.trim().length === 0) {
|
|
18
|
-
throw new
|
|
22
|
+
throw new InvalidConfigurationError(path +
|
|
19
23
|
" must be a non-empty string.");
|
|
20
24
|
}
|
|
21
25
|
return value.trim();
|
|
22
26
|
}
|
|
23
27
|
function requireFiniteVector(value, path) {
|
|
28
|
+
requireInputObject(value, path);
|
|
24
29
|
for (const axis of ["x", "y", "z"]) {
|
|
25
30
|
if (!Number.isFinite(value[axis])) {
|
|
26
31
|
throw new InvalidScientificInputError(path +
|
|
@@ -80,12 +85,13 @@ function projectMetricPoint(positionCameraM, projectionDistanceMm, path) {
|
|
|
80
85
|
function validateUniquePoints(points) {
|
|
81
86
|
if (!Array.isArray(points) ||
|
|
82
87
|
points.length === 0) {
|
|
83
|
-
throw new
|
|
88
|
+
throw new InvalidConfigurationError("points must be a non-empty array.");
|
|
84
89
|
}
|
|
85
90
|
const parsed = points.map((point, index) => {
|
|
86
91
|
const path = "points[" +
|
|
87
92
|
index +
|
|
88
93
|
"]";
|
|
94
|
+
requireInputObject(point, path);
|
|
89
95
|
const pointId = requireNonEmptyString(point.pointId, path + ".pointId");
|
|
90
96
|
const referencePosition = requireFiniteVector(point.positionCameraM, path +
|
|
91
97
|
".positionCameraM");
|
|
@@ -109,7 +115,7 @@ function validateUniquePoints(points) {
|
|
|
109
115
|
function validateSampleTimes(times) {
|
|
110
116
|
if (!Array.isArray(times) ||
|
|
111
117
|
times.length === 0) {
|
|
112
|
-
throw new
|
|
118
|
+
throw new InvalidConfigurationError("sampleTimesSecondsFromReference must be a non-empty array.");
|
|
113
119
|
}
|
|
114
120
|
let prior = Number.NEGATIVE_INFINITY;
|
|
115
121
|
return times.map((value, index) => {
|
|
@@ -150,9 +156,10 @@ function validatePlanarDeclaration(declaration, points) {
|
|
|
150
156
|
if (declaration === undefined) {
|
|
151
157
|
return null;
|
|
152
158
|
}
|
|
159
|
+
requireInputObject(declaration, "frontoparallelPlane");
|
|
153
160
|
if (declaration.kind !==
|
|
154
161
|
"fronto-parallel-planar-patch") {
|
|
155
|
-
throw new
|
|
162
|
+
throw new InvalidConfigurationError("frontoparallelPlane.kind is invalid.");
|
|
156
163
|
}
|
|
157
164
|
requirePositiveFinite("frontoparallelPlane.referenceDepthM", declaration.referenceDepthM);
|
|
158
165
|
for (const entry of points) {
|
|
@@ -203,10 +210,12 @@ function createPointTrajectory(pointId, referencePosition, relativeTranslationVe
|
|
|
203
210
|
* Evaluates multiple explicit metric points on one rigidly translating object
|
|
204
211
|
* at deterministic physical times.
|
|
205
212
|
*
|
|
206
|
-
* This is geometry only. It does not
|
|
207
|
-
* radiance
|
|
213
|
+
* This is geometry only. It does not build a blur kernel, decide visibility,
|
|
214
|
+
* integrate radiance, deform the object, rotate the camera or apply a
|
|
215
|
+
* universal scale.
|
|
208
216
|
*/
|
|
209
217
|
export function calculateExtendedObjectProjectionTrajectory(input) {
|
|
218
|
+
requireInputKeys(input, "calculateExtendedObjectProjectionTrajectory", ["objectId", "focalLengthMm", "focusDistanceM", "objectTranslationVelocityMps", "cameraTranslationVelocityMps", "sampleTimesSecondsFromReference", "points", "frontoparallelPlane"]);
|
|
210
219
|
const objectId = requireNonEmptyString(input.objectId, "objectId");
|
|
211
220
|
const projectionDistanceMm = resolveProjectionDistanceMm(input.focalLengthMm, input.focusDistanceM);
|
|
212
221
|
const objectVelocity = requireFiniteVector(input
|
|
@@ -281,17 +290,28 @@ function samePoint(a, b) {
|
|
|
281
290
|
a.y === b.y);
|
|
282
291
|
}
|
|
283
292
|
function localExposureForPoint(timing, point) {
|
|
293
|
+
requireInputObject(timing, "timing");
|
|
294
|
+
requireInputObject(timing.exposureWindows, "timing.exposureWindows");
|
|
295
|
+
if (!Array.isArray(timing.exposureWindows.samples))
|
|
296
|
+
throw new InvalidConfigurationError("timing.exposureWindows.samples must be an array.");
|
|
297
|
+
timing.exposureWindows.samples.forEach((sample, index) => {
|
|
298
|
+
requireInputObject(sample, "timing.exposureWindows.samples[" + index + "]");
|
|
299
|
+
requireInputObject(sample.pointNative, "timing.exposureWindows.samples[" + index + "].pointNative");
|
|
300
|
+
});
|
|
301
|
+
requireInputObject(point, "destinationPointNative");
|
|
284
302
|
const matches = timing.exposureWindows.samples.filter((sample) => samePoint(sample.pointNative, point));
|
|
285
303
|
if (matches.length !== 1) {
|
|
286
|
-
throw new InvalidScientificInputError("Each extended-object capture point must match exactly one committed
|
|
304
|
+
throw new InvalidScientificInputError("Each extended-object capture point must match exactly one committed exposure-window sample point.");
|
|
287
305
|
}
|
|
288
306
|
return matches[0];
|
|
289
307
|
}
|
|
290
308
|
/**
|
|
291
|
-
* Evaluates extended-object projection at deterministic midpoint
|
|
292
|
-
* each point's
|
|
309
|
+
* Evaluates extended-object projection at deterministic midpoint time samples
|
|
310
|
+
* inside each point's local exposure window (from the capture exposure
|
|
311
|
+
* schedule).
|
|
293
312
|
*/
|
|
294
313
|
export function calculateCaptureExtendedObjectTemporalProjection(input) {
|
|
314
|
+
requireInputKeys(input, "calculateCaptureExtendedObjectTemporalProjection", ["objectId", "timing", "focalLengthMm", "focusDistanceM", "objectTranslationVelocityMps", "cameraTranslationVelocityMps", "temporalSampleCount", "points", "frontoparallelPlane"]);
|
|
295
315
|
requirePositiveInteger("temporalSampleCount", input.temporalSampleCount);
|
|
296
316
|
const objectId = requireNonEmptyString(input.objectId, "objectId");
|
|
297
317
|
const projectionDistanceMm = resolveProjectionDistanceMm(input.focalLengthMm, input.focusDistanceM);
|
|
@@ -391,7 +411,7 @@ export function calculateCaptureExtendedObjectTemporalProjection(input) {
|
|
|
391
411
|
sensorReadoutTimingUsedAsExposureTiming: false,
|
|
392
412
|
timeVaryingDefocusMayBeRequired: relative.z !== 0
|
|
393
413
|
}, "capture-local-extended-object-time-varying-projection", "1.0.0", [
|
|
394
|
-
"Every point is evaluated at deterministic midpoint nodes in its own authoritative
|
|
414
|
+
"Every point is evaluated at deterministic midpoint nodes in its own authoritative local exposure interval of the exposure-window model.",
|
|
395
415
|
"Sensor data-readout timing is not substituted for exposure time.",
|
|
396
416
|
"Rolling/local exposure may cause different native destinations to integrate different portions of the same rigid object trajectory.",
|
|
397
417
|
"The result remains geometry only and does not authorize endpoint interpolation as a complete visibility/radiance blur solution.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extended-object-projection.js","sourceRoot":"","sources":["../../src/motion/extended-object-projection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extended-object-projection.js","sourceRoot":"","sources":["../../src/motion/extended-object-projection.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Projection of an extended object: several explicit points (in metres) on one rigid object that\n * moves in a straight line.\n *\n * The points are evaluated at deterministic physical times, or at deterministic midpoint time\n * samples inside each point's local exposure window (from the capture exposure schedule).\n *\n * This is geometry only. It does not build a blur kernel, decide visibility, integrate radiance,\n * deform the object, rotate the camera or apply a universal scale.\n * @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers\n * and support limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport {\n InvalidScientificInputError,\n requirePositiveFinite,\n requirePositiveInteger\n} from \"../core/validation.js\";\nimport type {\n RasterPoint\n} from \"../output/capture-geometry.js\";\nimport {\n calculateThinLensImageDistance\n} from \"../optics/thin-lens.js\";\nimport type {\n Vector3\n} from \"../schema/scene.js\";\nimport type {\n ResolvedCaptureModeTiming\n} from \"../sensor/capture-mode-timing.js\";\nimport { requireInputKeys, requireInputObject } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport interface ExtendedObjectMetricPoint {\n pointId: string;\n /**\n * Point in camera space, in metres, at the shared reference phase.\n *\n * +X right, +Y up, +Z forward/away from the camera.\n */\n positionCameraM: Vector3;\n}\n\nexport interface ExtendedObjectFrontoparallelPlaneDeclaration {\n kind: \"fronto-parallel-planar-patch\";\n referenceDepthM: number;\n}\n\nexport interface CalculateExtendedObjectProjectionTrajectoryInput {\n objectId: string;\n focalLengthMm: number;\n focusDistanceM?: number;\n objectTranslationVelocityMps:\n Vector3;\n cameraTranslationVelocityMps:\n Vector3;\n sampleTimesSecondsFromReference:\n readonly number[];\n points:\n readonly ExtendedObjectMetricPoint[];\n frontoparallelPlane?:\n ExtendedObjectFrontoparallelPlaneDeclaration;\n}\n\nexport interface ExtendedObjectProjectionNode {\n sampleIndex: number;\n timeSecondsFromReference: number;\n relativePositionCameraM:\n Vector3;\n mappedImagePointMm: {\n x: number;\n y: number;\n };\n deltaFromReferenceImagePlaneMm: {\n x: number;\n y: number;\n distance: number;\n };\n depthM: number;\n planarMagnificationScaleFromReference:\n number | null;\n}\n\nexport interface ExtendedObjectPointProjectionTrajectory {\n pointId: string;\n referencePositionCameraM:\n Vector3;\n referenceImagePointMm: {\n x: number;\n y: number;\n };\n nodes:\n readonly ExtendedObjectProjectionNode[];\n}\n\nexport interface ExtendedObjectPlanarMagnificationDiagnostic {\n geometry:\n \"declared-fronto-parallel-planar-patch\";\n referenceDepthM: number;\n uniformScaleAuthorizedWithinDeclaredPatch:\n true;\n scaleByTime:\n readonly {\n sampleIndex: number;\n timeSecondsFromReference:\n number;\n scaleFromReference: number;\n }[];\n lateralRigidTranslationDoesNotChangePatchScale:\n true;\n notAuthorizedForArbitrary3dGeometry:\n true;\n}\n\nexport interface ExtendedObjectProjectionTrajectory {\n objectId: string;\n timeReference:\n \"caller-declared-common-reference-phase\";\n projectionDistanceMm: number;\n objectTranslationVelocityMps:\n Vector3;\n cameraTranslationVelocityMps:\n Vector3;\n relativeTranslationVelocityMps:\n Vector3;\n rigidTranslationOnly: true;\n pointTrajectories:\n readonly ExtendedObjectPointProjectionTrajectory[];\n planarMagnificationDiagnostic:\n ExtendedObjectPlanarMagnificationDiagnostic | null;\n metricSceneDepthRequired: true;\n oneGlobalHomographyAuthorized:\n false;\n oneGlobalScaleAuthorizedForArbitrary3dGeometry:\n false;\n cameraRotationComposed: false;\n visibilityOcclusionModeled: false;\n deformationModeled: false;\n accelerationModeled: false;\n blurKernelCalculated: false;\n radianceIntegrated: false;\n timeVaryingDefocusMayBeRequired:\n boolean;\n}\n\nexport interface CaptureExtendedObjectMetricPoint\n extends ExtendedObjectMetricPoint {\n /**\n * Native destination point. It selects the local exposure window (from the\n * capture exposure schedule) for this object point.\n */\n destinationPointNative:\n RasterPoint;\n}\n\nexport interface CalculateCaptureExtendedObjectTemporalProjectionInput {\n objectId: string;\n timing:\n ResolvedCaptureModeTiming;\n focalLengthMm: number;\n focusDistanceM?: number;\n objectTranslationVelocityMps:\n Vector3;\n cameraTranslationVelocityMps:\n Vector3;\n temporalSampleCount: number;\n points:\n readonly CaptureExtendedObjectMetricPoint[];\n frontoparallelPlane?:\n ExtendedObjectFrontoparallelPlaneDeclaration;\n}\n\nexport interface CaptureExtendedObjectTemporalNode\n extends ExtendedObjectProjectionNode {\n localExposurePhase: number;\n normalizedTimeWeight: number;\n timeMeasureSeconds: number;\n}\n\nexport interface CaptureExtendedObjectPointTrajectory {\n pointId: string;\n destinationPointNative:\n RasterPoint;\n referencePositionCameraM:\n Vector3;\n referenceImagePointMm: {\n x: number;\n y: number;\n };\n localExposureWindow: {\n startSecondsFromCaptureReference:\n number;\n endSecondsFromCaptureReference:\n number;\n durationSeconds: number;\n };\n nodes:\n readonly CaptureExtendedObjectTemporalNode[];\n}\n\nexport interface CaptureExtendedObjectTemporalProjection {\n objectId: string;\n timeReference:\n \"first-opening-boundary-phase\";\n timingProfileIdentity: {\n profileId: string;\n profileVersion: string;\n captureModeId: string;\n };\n projectionDistanceMm: number;\n temporalSampleCount: number;\n objectTranslationVelocityMps:\n Vector3;\n cameraTranslationVelocityMps:\n Vector3;\n relativeTranslationVelocityMps:\n Vector3;\n rigidTranslationOnly: true;\n pointTrajectories:\n readonly CaptureExtendedObjectPointTrajectory[];\n planarMagnificationDiagnosticAvailable:\n boolean;\n metricSceneDepthRequired: true;\n oneGlobalHomographyAuthorized:\n false;\n oneGlobalScaleAuthorizedForArbitrary3dGeometry:\n false;\n cameraRotationComposed: false;\n visibilityOcclusionModeled: false;\n deformationModeled: false;\n accelerationModeled: false;\n blurKernelCalculated: false;\n radianceIntegrated: false;\n sensorReadoutTimingUsedAsExposureTiming:\n false;\n timeVaryingDefocusMayBeRequired:\n boolean;\n}\n\nfunction requireNonEmptyString(\n value: string,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireFiniteVector(\n value: Vector3,\n path: string\n): Vector3 {\n requireInputObject(value, path);\n for (\n const axis of\n [\"x\", \"y\", \"z\"] as const\n ) {\n if (\n !Number.isFinite(\n value[axis]\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \".\" +\n axis +\n \" must be finite.\"\n );\n }\n }\n return {\n ...value\n };\n}\n\nfunction requireFiniteTime(\n value: number,\n path: string\n): number {\n if (!Number.isFinite(value)) {\n throw new InvalidScientificInputError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction approximatelyEqual(\n a: number,\n b: number\n): boolean {\n const scale =\n Math.max(\n 1,\n Math.abs(a),\n Math.abs(b)\n );\n return (\n Math.abs(a - b) <=\n Number.EPSILON *\n 32 *\n scale\n );\n}\n\nfunction resolveProjectionDistanceMm(\n focalLengthMm: number,\n focusDistanceM:\n number | undefined\n): number {\n requirePositiveFinite(\n \"focalLengthMm\",\n focalLengthMm\n );\n return focusDistanceM ===\n undefined\n ? focalLengthMm\n : calculateThinLensImageDistance({\n focalLengthMm,\n objectDistanceM:\n focusDistanceM\n }).value.imageDistanceMm;\n}\n\nfunction projectMetricPoint(\n positionCameraM:\n Vector3,\n projectionDistanceMm: number,\n path: string\n): {\n x: number;\n y: number;\n} {\n if (\n !Number.isFinite(\n positionCameraM.z\n ) ||\n positionCameraM.z <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must remain in front of the camera plane.\"\n );\n }\n\n const mapped = {\n x:\n projectionDistanceMm *\n (\n positionCameraM.x /\n positionCameraM.z\n ),\n y:\n projectionDistanceMm *\n (\n positionCameraM.y /\n positionCameraM.z\n )\n };\n if (\n !Number.isFinite(mapped.x) ||\n !Number.isFinite(mapped.y)\n ) {\n throw new InvalidScientificInputError(\n path +\n \" projection must remain finite.\"\n );\n }\n return mapped;\n}\n\nfunction validateUniquePoints<T extends ExtendedObjectMetricPoint>(\n points: readonly T[]\n): readonly {\n point:\n T;\n pointId: string;\n referencePosition:\n Vector3;\n}[] {\n if (\n !Array.isArray(points) ||\n points.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"points must be a non-empty array.\"\n );\n }\n\n const parsed =\n points.map(\n (point, index) => {\n const path =\n \"points[\" +\n index +\n \"]\";\n requireInputObject(point, path);\n const pointId =\n requireNonEmptyString(\n point.pointId,\n path + \".pointId\"\n );\n const referencePosition =\n requireFiniteVector(\n point.positionCameraM,\n path +\n \".positionCameraM\"\n );\n if (\n referencePosition.z <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \".positionCameraM.z must place the point in front of the camera.\"\n );\n }\n return {\n point,\n pointId,\n referencePosition\n };\n }\n );\n\n const ids =\n parsed.map(\n (entry) =>\n entry.pointId\n );\n if (\n new Set(ids).size !==\n ids.length\n ) {\n throw new InvalidScientificInputError(\n \"points must not contain duplicate pointId values.\"\n );\n }\n return parsed;\n}\n\nfunction validateSampleTimes(\n times:\n readonly number[]\n): readonly number[] {\n if (\n !Array.isArray(times) ||\n times.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"sampleTimesSecondsFromReference must be a non-empty array.\"\n );\n }\n let prior =\n Number.NEGATIVE_INFINITY;\n return times.map(\n (value, index) => {\n const time =\n requireFiniteTime(\n value,\n \"sampleTimesSecondsFromReference[\" +\n index +\n \"]\"\n );\n if (time <= prior) {\n throw new InvalidScientificInputError(\n \"sampleTimesSecondsFromReference must be strictly increasing.\"\n );\n }\n prior = time;\n return time;\n }\n );\n}\n\nfunction relativeVelocity(\n objectVelocity:\n Vector3,\n cameraVelocity:\n Vector3\n): Vector3 {\n return {\n x:\n objectVelocity.x -\n cameraVelocity.x,\n y:\n objectVelocity.y -\n cameraVelocity.y,\n z:\n objectVelocity.z -\n cameraVelocity.z\n };\n}\n\nfunction positionAtTime(\n reference:\n Vector3,\n velocity:\n Vector3,\n timeSeconds: number\n): Vector3 {\n return {\n x:\n reference.x +\n velocity.x *\n timeSeconds,\n y:\n reference.y +\n velocity.y *\n timeSeconds,\n z:\n reference.z +\n velocity.z *\n timeSeconds\n };\n}\n\nfunction validatePlanarDeclaration(\n declaration:\n ExtendedObjectFrontoparallelPlaneDeclaration |\n undefined,\n points:\n readonly {\n referencePosition:\n Vector3;\n }[]\n): number | null {\n if (\n declaration === undefined\n ) {\n return null;\n }\n requireInputObject(declaration, \"frontoparallelPlane\");\n if (\n declaration.kind !==\n \"fronto-parallel-planar-patch\"\n ) {\n throw new InvalidConfigurationError(\n \"frontoparallelPlane.kind is invalid.\"\n );\n }\n requirePositiveFinite(\n \"frontoparallelPlane.referenceDepthM\",\n declaration.referenceDepthM\n );\n for (\n const entry of points\n ) {\n if (\n !approximatelyEqual(\n entry.referencePosition.z,\n declaration.referenceDepthM\n )\n ) {\n throw new InvalidScientificInputError(\n \"Every declared fronto-parallel point must lie at frontoparallelPlane.referenceDepthM.\"\n );\n }\n }\n return declaration\n .referenceDepthM;\n}\n\nfunction createPointTrajectory(\n pointId: string,\n referencePosition:\n Vector3,\n relativeTranslationVelocityMps:\n Vector3,\n sampleTimes:\n readonly number[],\n projectionDistanceMm:\n number,\n planarReferenceDepthM:\n number | null,\n path: string\n): ExtendedObjectPointProjectionTrajectory {\n const referenceImagePoint =\n projectMetricPoint(\n referencePosition,\n projectionDistanceMm,\n path +\n \".positionCameraM\"\n );\n\n const nodes =\n sampleTimes.map(\n (\n timeSeconds,\n sampleIndex\n ) => {\n const position =\n positionAtTime(\n referencePosition,\n relativeTranslationVelocityMps,\n timeSeconds\n );\n const mapped =\n projectMetricPoint(\n position,\n projectionDistanceMm,\n path +\n \".positionAtTime\"\n );\n const deltaX =\n mapped.x -\n referenceImagePoint.x;\n const deltaY =\n mapped.y -\n referenceImagePoint.y;\n\n return {\n sampleIndex,\n timeSecondsFromReference:\n timeSeconds,\n relativePositionCameraM:\n position,\n mappedImagePointMm:\n mapped,\n deltaFromReferenceImagePlaneMm: {\n x: deltaX,\n y: deltaY,\n distance:\n Math.hypot(\n deltaX,\n deltaY\n )\n },\n depthM:\n position.z,\n planarMagnificationScaleFromReference:\n planarReferenceDepthM ===\n null\n ? null\n : planarReferenceDepthM /\n position.z\n };\n }\n );\n\n return {\n pointId,\n referencePositionCameraM:\n referencePosition,\n referenceImagePointMm:\n referenceImagePoint,\n nodes\n };\n}\n\n/**\n * Evaluates multiple explicit metric points on one rigidly translating object\n * at deterministic physical times.\n *\n * This is geometry only. It does not build a blur kernel, decide visibility,\n * integrate radiance, deform the object, rotate the camera or apply a\n * universal scale.\n */\nexport function calculateExtendedObjectProjectionTrajectory(\n input:\n CalculateExtendedObjectProjectionTrajectoryInput\n): CalculationResult<ExtendedObjectProjectionTrajectory> {\n requireInputKeys(input, \"calculateExtendedObjectProjectionTrajectory\", [\"objectId\", \"focalLengthMm\", \"focusDistanceM\", \"objectTranslationVelocityMps\", \"cameraTranslationVelocityMps\", \"sampleTimesSecondsFromReference\", \"points\", \"frontoparallelPlane\"]);\n const objectId =\n requireNonEmptyString(\n input.objectId,\n \"objectId\"\n );\n const projectionDistanceMm =\n resolveProjectionDistanceMm(\n input.focalLengthMm,\n input.focusDistanceM\n );\n const objectVelocity =\n requireFiniteVector(\n input\n .objectTranslationVelocityMps,\n \"objectTranslationVelocityMps\"\n );\n const cameraVelocity =\n requireFiniteVector(\n input\n .cameraTranslationVelocityMps,\n \"cameraTranslationVelocityMps\"\n );\n const relative =\n relativeVelocity(\n objectVelocity,\n cameraVelocity\n );\n const sampleTimes =\n validateSampleTimes(\n input\n .sampleTimesSecondsFromReference\n );\n const points =\n validateUniquePoints(\n input.points\n );\n const planarDepth =\n validatePlanarDeclaration(\n input.frontoparallelPlane,\n points\n );\n\n const pointTrajectories =\n points.map(\n (\n entry,\n pointIndex\n ) =>\n createPointTrajectory(\n entry.pointId,\n entry.referencePosition,\n relative,\n sampleTimes,\n projectionDistanceMm,\n planarDepth,\n \"points[\" +\n pointIndex +\n \"]\"\n )\n );\n\n const scaleByTime =\n planarDepth === null\n ? null\n : sampleTimes.map(\n (\n timeSeconds,\n sampleIndex\n ) => {\n const currentDepth =\n planarDepth +\n relative.z *\n timeSeconds;\n if (\n currentDepth <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Declared fronto-parallel patch reaches or crosses the camera plane.\"\n );\n }\n return {\n sampleIndex,\n timeSecondsFromReference:\n timeSeconds,\n scaleFromReference:\n planarDepth /\n currentDepth\n };\n }\n );\n\n return approximationResult(\n {\n objectId,\n timeReference:\n \"caller-declared-common-reference-phase\",\n projectionDistanceMm,\n objectTranslationVelocityMps:\n objectVelocity,\n cameraTranslationVelocityMps:\n cameraVelocity,\n relativeTranslationVelocityMps:\n relative,\n rigidTranslationOnly: true,\n pointTrajectories,\n planarMagnificationDiagnostic:\n scaleByTime === null\n ? null\n : {\n geometry:\n \"declared-fronto-parallel-planar-patch\",\n referenceDepthM:\n planarDepth!,\n uniformScaleAuthorizedWithinDeclaredPatch:\n true,\n scaleByTime,\n lateralRigidTranslationDoesNotChangePatchScale:\n true,\n notAuthorizedForArbitrary3dGeometry:\n true\n },\n metricSceneDepthRequired:\n true,\n oneGlobalHomographyAuthorized:\n false,\n oneGlobalScaleAuthorizedForArbitrary3dGeometry:\n false,\n cameraRotationComposed:\n false,\n visibilityOcclusionModeled:\n false,\n deformationModeled: false,\n accelerationModeled: false,\n blurKernelCalculated:\n false,\n radianceIntegrated: false,\n timeVaryingDefocusMayBeRequired:\n relative.z !== 0\n },\n \"extended-object-time-varying-projection\",\n \"1.0.0\",\n [\n \"Every object point is projected independently from explicit metric camera-space depth.\",\n \"Object and camera translation remain separate inputs and compose only as object-minus-camera relative translation.\",\n \"One global homography or one global scale is not authorized for arbitrary 3D geometry.\",\n \"A uniform magnification diagnostic is emitted only for an explicitly declared and validated fronto-parallel planar patch under the shared rigid-translation model.\",\n \"Constant rigid translation is the only object motion modeled; acceleration, rotation, articulation and deformation are excluded.\",\n \"Visibility, occlusion/disocclusion, frame-boundary coverage, radiance integration and blur-kernel synthesis remain downstream.\",\n \"When relative Z translation is nonzero, downstream defocus/PSF state may also vary with time.\"\n ]\n );\n}\n\nfunction samePoint(\n a: RasterPoint,\n b: RasterPoint\n): boolean {\n return (\n a.x === b.x &&\n a.y === b.y\n );\n}\n\nfunction localExposureForPoint(\n timing:\n ResolvedCaptureModeTiming,\n point:\n RasterPoint\n): ResolvedCaptureModeTiming[\"exposureWindows\"][\"samples\"][number] {\n requireInputObject(timing, \"timing\");\n requireInputObject(timing.exposureWindows, \"timing.exposureWindows\");\n if (!Array.isArray(timing.exposureWindows.samples)) throw new InvalidConfigurationError(\"timing.exposureWindows.samples must be an array.\");\n timing.exposureWindows.samples.forEach((sample, index) => {\n requireInputObject(sample, \"timing.exposureWindows.samples[\" + index + \"]\");\n requireInputObject(sample.pointNative, \"timing.exposureWindows.samples[\" + index + \"].pointNative\");\n });\n requireInputObject(point, \"destinationPointNative\");\n const matches =\n timing.exposureWindows.samples.filter(\n (sample) =>\n samePoint(\n sample.pointNative,\n point\n )\n );\n if (matches.length !== 1) {\n throw new InvalidScientificInputError(\n \"Each extended-object capture point must match exactly one committed exposure-window sample point.\"\n );\n }\n return matches[0]!;\n}\n\n/**\n * Evaluates extended-object projection at deterministic midpoint time samples\n * inside each point's local exposure window (from the capture exposure\n * schedule).\n */\nexport function calculateCaptureExtendedObjectTemporalProjection(\n input:\n CalculateCaptureExtendedObjectTemporalProjectionInput\n): CalculationResult<CaptureExtendedObjectTemporalProjection> {\n requireInputKeys(input, \"calculateCaptureExtendedObjectTemporalProjection\", [\"objectId\", \"timing\", \"focalLengthMm\", \"focusDistanceM\", \"objectTranslationVelocityMps\", \"cameraTranslationVelocityMps\", \"temporalSampleCount\", \"points\", \"frontoparallelPlane\"]);\n requirePositiveInteger(\n \"temporalSampleCount\",\n input.temporalSampleCount\n );\n const objectId =\n requireNonEmptyString(\n input.objectId,\n \"objectId\"\n );\n const projectionDistanceMm =\n resolveProjectionDistanceMm(\n input.focalLengthMm,\n input.focusDistanceM\n );\n const objectVelocity =\n requireFiniteVector(\n input\n .objectTranslationVelocityMps,\n \"objectTranslationVelocityMps\"\n );\n const cameraVelocity =\n requireFiniteVector(\n input\n .cameraTranslationVelocityMps,\n \"cameraTranslationVelocityMps\"\n );\n const relative =\n relativeVelocity(\n objectVelocity,\n cameraVelocity\n );\n const points =\n validateUniquePoints(\n input.points\n );\n const planarDepth =\n validatePlanarDeclaration(\n input.frontoparallelPlane,\n points\n );\n\n const totalNodeCount =\n input.temporalSampleCount *\n points.length;\n if (\n !Number.isSafeInteger(\n totalNodeCount\n )\n ) {\n throw new InvalidScientificInputError(\n \"temporalSampleCount × points.length must remain a safe integer.\"\n );\n }\n\n const pointTrajectories =\n points.map(\n (\n entry,\n pointIndex\n ) => {\n const capturePoint =\n entry.point as\n CaptureExtendedObjectMetricPoint;\n const exposure =\n localExposureForPoint(\n input.timing,\n capturePoint\n .destinationPointNative\n );\n const duration =\n exposure\n .localExposureDurationSeconds;\n if (\n !Number.isFinite(\n duration\n ) ||\n duration <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Extended-object capture projection requires a positive finite local exposure duration.\"\n );\n }\n\n const times =\n Array.from(\n {\n length:\n input.temporalSampleCount\n },\n (\n _,\n temporalSampleIndex\n ) =>\n exposure\n .startOffsetSecondsFromOpeningReference +\n (\n temporalSampleIndex +\n 0.5\n ) /\n input.temporalSampleCount *\n duration\n );\n const trajectory =\n createPointTrajectory(\n entry.pointId,\n entry.referencePosition,\n relative,\n times,\n projectionDistanceMm,\n planarDepth,\n \"points[\" +\n pointIndex +\n \"]\"\n );\n const normalizedTimeWeight =\n 1 /\n input.temporalSampleCount;\n const timeMeasureSeconds =\n duration /\n input.temporalSampleCount;\n\n return {\n pointId:\n entry.pointId,\n destinationPointNative: {\n ...capturePoint\n .destinationPointNative\n },\n referencePositionCameraM:\n trajectory\n .referencePositionCameraM,\n referenceImagePointMm:\n trajectory\n .referenceImagePointMm,\n localExposureWindow: {\n startSecondsFromCaptureReference:\n exposure\n .startOffsetSecondsFromOpeningReference,\n endSecondsFromCaptureReference:\n exposure\n .endOffsetSecondsFromOpeningReference,\n durationSeconds:\n duration\n },\n nodes:\n trajectory.nodes.map(\n (\n node,\n temporalSampleIndex\n ) => ({\n ...node,\n localExposurePhase:\n (\n temporalSampleIndex +\n 0.5\n ) /\n input\n .temporalSampleCount,\n normalizedTimeWeight,\n timeMeasureSeconds\n })\n )\n };\n }\n );\n\n return approximationResult(\n {\n objectId,\n timeReference:\n \"first-opening-boundary-phase\",\n timingProfileIdentity: {\n profileId:\n input.timing\n .timingProfileId,\n profileVersion:\n input.timing\n .timingProfileVersion,\n captureModeId:\n input.timing\n .captureModeId\n },\n projectionDistanceMm,\n temporalSampleCount:\n input.temporalSampleCount,\n objectTranslationVelocityMps:\n objectVelocity,\n cameraTranslationVelocityMps:\n cameraVelocity,\n relativeTranslationVelocityMps:\n relative,\n rigidTranslationOnly: true,\n pointTrajectories,\n planarMagnificationDiagnosticAvailable:\n planarDepth !== null,\n metricSceneDepthRequired:\n true,\n oneGlobalHomographyAuthorized:\n false,\n oneGlobalScaleAuthorizedForArbitrary3dGeometry:\n false,\n cameraRotationComposed:\n false,\n visibilityOcclusionModeled:\n false,\n deformationModeled: false,\n accelerationModeled: false,\n blurKernelCalculated:\n false,\n radianceIntegrated: false,\n sensorReadoutTimingUsedAsExposureTiming:\n false,\n timeVaryingDefocusMayBeRequired:\n relative.z !== 0\n },\n \"capture-local-extended-object-time-varying-projection\",\n \"1.0.0\",\n [\n \"Every point is evaluated at deterministic midpoint nodes in its own authoritative local exposure interval of the exposure-window model.\",\n \"Sensor data-readout timing is not substituted for exposure time.\",\n \"Rolling/local exposure may cause different native destinations to integrate different portions of the same rigid object trajectory.\",\n \"The result remains geometry only and does not authorize endpoint interpolation as a complete visibility/radiance blur solution.\",\n \"Camera rotation and subject deformation remain separate; object and camera translation compose only through explicit relative translation.\",\n \"When relative depth changes, downstream defocus/PSF evaluation may need to vary at the same physical-time nodes.\"\n ]\n );\n}\n"]}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
2
|
+
* How far a moving object travels across the sensor during an exposure. Uses ideal rectilinear
|
|
3
|
+
* projection and a constant straight-line object velocity.
|
|
4
|
+
* - Without focusDistanceM, the projection distance is the nominal focal length (the older pinhole
|
|
5
|
+
* behaviour).
|
|
6
|
+
* - With focusDistanceM, it is the thin-lens image distance for that focus.
|
|
7
|
+
*
|
|
8
|
+
* The object's positions when the shutter opens and closes are both projected onto the image plane,
|
|
9
|
+
* and the distance between them is measured. So sideways motion and motion toward or away from the
|
|
10
|
+
* camera are both handled, without a generic "subject speed" category.
|
|
11
|
+
* @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers
|
|
12
|
+
* and support limits.
|
|
11
13
|
*/
|
|
12
14
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
13
15
|
import type { Vector3 } from "../schema/scene.js";
|
|
@@ -36,17 +38,16 @@ export interface ProjectedMotionBlur {
|
|
|
36
38
|
* Calculates sensor-plane motion during an exposure using ideal rectilinear
|
|
37
39
|
* projection and constant linear object velocity.
|
|
38
40
|
*
|
|
39
|
-
* Without focusDistanceM,
|
|
40
|
-
* pinhole
|
|
41
|
-
*
|
|
41
|
+
* Without focusDistanceM, the projection distance is the nominal focal length
|
|
42
|
+
* (the older pinhole behaviour). With focusDistanceM, it is the thin-lens
|
|
43
|
+
* image distance for that focus.
|
|
42
44
|
*
|
|
43
|
-
* The
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* generic "subject speed" category.
|
|
45
|
+
* The object's positions when the shutter opens and closes are both projected
|
|
46
|
+
* onto the image plane, and the distance between them is measured. So
|
|
47
|
+
* sideways motion and motion toward or away from the camera are both handled,
|
|
48
|
+
* without a generic "subject speed" category.
|
|
47
49
|
*
|
|
48
50
|
* @param input Camera, exposure, object-position, and velocity inputs.
|
|
49
51
|
* @returns Projected sensor-plane displacement.
|
|
50
52
|
*/
|
|
51
53
|
export declare function calculateProjectedMotionBlur(input: CalculateProjectedMotionBlurInput): CalculationResult<ProjectedMotionBlur>;
|
|
52
|
-
//# sourceMappingURL=projected-motion.d.ts.map
|