@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
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Wide-gamut output primitives (standalone; output wiring belongs to the SDR/export stages):
|
|
4
|
+
* - RGB ↔ XYZ matrices derived numerically from primary and white chromaticities: RGB (1, 1, 1)
|
|
5
|
+
* is the white (W3C CSS Color 4 §2, free), never copied matrices. They equal the CSS Color 4
|
|
6
|
+
* sample-code matrices to about 1e-15 (test/colorimetry-output-and-camera.test.ts).
|
|
7
|
+
* sRGB / BT.709: ITU-R BT.709-6 and W3C CSS Color 4 `srgb` (also IEC 61966-2-1:1999); Display P3:
|
|
8
|
+
* P3 primaries with D65 white as specified for `display-p3` in W3C CSS Color 4 (also SMPTE EG 432-1:2010);
|
|
9
|
+
* BT.2020: ITU-R BT.2020-2. All use D65 (0.3127, 0.3290).
|
|
10
|
+
* - Transfer functions: sRGB (W3C CSS Color 4; also IEC 61966-2-1; also Display P3), BT.709 OETF, BT.1886 EOTF
|
|
11
|
+
* (ITU-R BT.1886). The BT.2100 PQ and HLG transfer functions are not part of 2.0 (owner decision,
|
|
12
|
+
* 2026-10-17: their patent holders offer only licence-on-request declarations; see THIRD_PARTY.md).
|
|
13
|
+
* Constants are the published values of those standards.
|
|
14
|
+
* @see docs/COLORIMETRY.md for equations, coordinate/unit conventions and limits.
|
|
15
|
+
*/
|
|
16
|
+
import { calculatedResult } from "../core/calculation-result.js";
|
|
17
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
18
|
+
import { decodeSrgbComponent, encodeSrgbComponent } from "./srgb-transfer.js";
|
|
19
|
+
import { COLORIMETRY_MODEL_VERSION } from "./color-matching-functions.js";
|
|
20
|
+
import { copyMatrix, invertMatrix3x3, multiplyMatrixVector, parseChromaticity, requireFiniteNumber, requireFiniteResult, requireNonNegativeNumber, requirePositiveNumber, requireRecordValue, xyzOfChromaticity } from "./colorimetry-math.js";
|
|
21
|
+
import { rejectUnknownFields, requireInputKeys } from "../core/record-validation.js";
|
|
22
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
23
|
+
/** Internal: derivation from primaries and white (see {@link calculateRgbToXyzMatrices}) without an envelope. */
|
|
24
|
+
export function rgbToXyzMatrices(primaries, white) {
|
|
25
|
+
const p = requireRecordValue(primaries, "primaries");
|
|
26
|
+
rejectUnknownFields(p, ["red", "green", "blue"], "primaries");
|
|
27
|
+
const columns = ["red", "green", "blue"].map((k) => xyzOfChromaticity(parseChromaticity(p[k], "primaries." + k)));
|
|
28
|
+
const basis = [
|
|
29
|
+
[columns[0].x, columns[1].x, columns[2].x],
|
|
30
|
+
[columns[0].y, columns[1].y, columns[2].y],
|
|
31
|
+
[columns[0].z, columns[1].z, columns[2].z]
|
|
32
|
+
];
|
|
33
|
+
const whiteXyz = xyzOfChromaticity(parseChromaticity(white, "whiteChromaticity"));
|
|
34
|
+
const s = multiplyMatrixVector(invertMatrix3x3(basis, "primary matrix"), [whiteXyz.x, whiteXyz.y, whiteXyz.z]);
|
|
35
|
+
if (s.some((v) => !(v > 0)))
|
|
36
|
+
throw new InvalidScientificInputError("The white point must lie strictly inside the primary triangle.");
|
|
37
|
+
const rgbToXyz = basis.map((row) => row.map((v, i) => v * s[i]));
|
|
38
|
+
return { rgbToXyz, xyzToRgb: invertMatrix3x3(rgbToXyz, "rgbToXyz"), whiteXyz };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Derives RGB ↔ XYZ matrices from primaries and white chromaticity: columns are the primaries'
|
|
42
|
+
* XYZ (Y = 1) scaled so that RGB (1, 1, 1) maps to the white (W3C CSS Color 4, free; also SMPTE
|
|
43
|
+
* RP 177). The derivation is written out in docs/COLORIMETRY.md.
|
|
44
|
+
*/
|
|
45
|
+
export function calculateRgbToXyzMatrices(input) {
|
|
46
|
+
requireInputKeys(input, "calculateRgbToXyzMatrices", ["primaries", "whiteChromaticity"]);
|
|
47
|
+
const value = rgbToXyzMatrices(input.primaries, input.whiteChromaticity);
|
|
48
|
+
requireFiniteResult([...value.rgbToXyz.flat(), ...value.xyzToRgb.flat()], "RGB matrix derivation");
|
|
49
|
+
return calculatedResult(value, "rgb-xyz-matrix-smpte-rp177", COLORIMETRY_MODEL_VERSION);
|
|
50
|
+
}
|
|
51
|
+
const D65_CHROMATICITY = Object.freeze({ x: 0.3127, y: 0.3290 });
|
|
52
|
+
const BT709_PRIMARIES = { red: { x: 0.64, y: 0.33 }, green: { x: 0.30, y: 0.60 }, blue: { x: 0.15, y: 0.06 } };
|
|
53
|
+
const SPACES = {
|
|
54
|
+
srgb: { primaries: BT709_PRIMARIES, transferFunction: "srgb", sources: ["W3C CSS Color Module Level 4 srgb", "ITU-R BT.709-6"] },
|
|
55
|
+
rec709: { primaries: BT709_PRIMARIES, transferFunction: "bt709-oetf-bt1886-eotf", sources: ["ITU-R BT.709-6", "ITU-R BT.1886"] },
|
|
56
|
+
"display-p3": {
|
|
57
|
+
primaries: { red: { x: 0.680, y: 0.320 }, green: { x: 0.265, y: 0.690 }, blue: { x: 0.150, y: 0.060 } },
|
|
58
|
+
transferFunction: "srgb", sources: ["W3C CSS Color Module Level 4 display-p3 (P3 primaries, D65, sRGB transfer)", "ITU-T H.273 ColourPrimaries 12"]
|
|
59
|
+
},
|
|
60
|
+
rec2020: {
|
|
61
|
+
primaries: { red: { x: 0.708, y: 0.292 }, green: { x: 0.170, y: 0.797 }, blue: { x: 0.131, y: 0.046 } },
|
|
62
|
+
transferFunction: "bt2020-oetf", sources: ["ITU-R BT.2020-2"]
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
/** Resolves a named RGB colour space with numerically derived matrices (all D65). */
|
|
66
|
+
export function resolveRgbColorSpace(id) {
|
|
67
|
+
const space = typeof id === "string" && Object.hasOwn(SPACES, id) ? SPACES[id] : undefined;
|
|
68
|
+
if (space === undefined)
|
|
69
|
+
throw new InvalidConfigurationError("Unknown RGB colour space.");
|
|
70
|
+
const matrices = rgbToXyzMatrices(space.primaries, D65_CHROMATICITY);
|
|
71
|
+
const value = {
|
|
72
|
+
id, primaries: JSON.parse(JSON.stringify(space.primaries)), whiteChromaticity: { ...D65_CHROMATICITY },
|
|
73
|
+
transferFunction: space.transferFunction, sources: [...space.sources],
|
|
74
|
+
rgbToXyz: copyMatrix(matrices.rgbToXyz), xyzToRgb: copyMatrix(matrices.xyzToRgb), whiteXyz: matrices.whiteXyz
|
|
75
|
+
};
|
|
76
|
+
return calculatedResult(value, "rgb-color-space-" + id, COLORIMETRY_MODEL_VERSION, ["Matrices derived from primaries and D65 white so that RGB (1, 1, 1) is the white (W3C CSS Color 4)"]);
|
|
77
|
+
}
|
|
78
|
+
// ---------------------------------------------------------------- transfers
|
|
79
|
+
/** sRGB / Display P3 encoding (W3C CSS Color 4; also IEC 61966-2-1) of one linear component; negative values use the linear segment. */
|
|
80
|
+
export function evaluateSrgbEncoding(linear) {
|
|
81
|
+
return encodeSrgbComponent(requireFiniteNumber(linear, "linear"));
|
|
82
|
+
}
|
|
83
|
+
/** sRGB / Display P3 decoding of one non-linear component. */
|
|
84
|
+
export function evaluateSrgbDecoding(encoded) {
|
|
85
|
+
return decodeSrgbComponent(requireFiniteNumber(encoded, "encoded"));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* ITU-R BT.709-6 / BT.2020-2 (10-bit) OETF: V = 4.5 L for L < 0.018, otherwise
|
|
89
|
+
* 1.099 L^0.45 − 0.099. Scene-referred camera encoding, not a display EOTF.
|
|
90
|
+
*/
|
|
91
|
+
export function evaluateBt709Oetf(sceneLinear) {
|
|
92
|
+
const l = requireFiniteNumber(sceneLinear, "sceneLinear");
|
|
93
|
+
return l < 0.018 ? 4.5 * l : 1.099 * l ** 0.45 - 0.099;
|
|
94
|
+
}
|
|
95
|
+
/** Inverse of the BT.709 OETF: L = V/4.5 for V < 0.081, otherwise ((V + 0.099)/1.099)^(1/0.45). */
|
|
96
|
+
export function evaluateBt709InverseOetf(encoded) {
|
|
97
|
+
const v = requireFiniteNumber(encoded, "encoded");
|
|
98
|
+
return v < 4.5 * 0.018 ? v / 4.5 : ((v + 0.099) / 1.099) ** (1 / 0.45);
|
|
99
|
+
}
|
|
100
|
+
/** Prepares the ITU-R BT.1886 reference EOTF (γ = 2.4) for a display's white and black luminance. */
|
|
101
|
+
export function prepareBt1886Eotf(input) {
|
|
102
|
+
requireInputKeys(input, "prepareBt1886Eotf", ["whiteLuminanceCdPerSquareMeter", "blackLuminanceCdPerSquareMeter"]);
|
|
103
|
+
const lw = requirePositiveNumber(input.whiteLuminanceCdPerSquareMeter, "whiteLuminanceCdPerSquareMeter");
|
|
104
|
+
const lb = requireNonNegativeNumber(input.blackLuminanceCdPerSquareMeter, "blackLuminanceCdPerSquareMeter");
|
|
105
|
+
if (!(lb < lw))
|
|
106
|
+
throw new InvalidScientificInputError("blackLuminanceCdPerSquareMeter must be below the white luminance.");
|
|
107
|
+
const g = 2.4, root = lw ** (1 / g) - lb ** (1 / g);
|
|
108
|
+
const a = root ** g, b = lb ** (1 / g) / root;
|
|
109
|
+
return Object.freeze({
|
|
110
|
+
whiteLuminanceCdPerSquareMeter: lw, blackLuminanceCdPerSquareMeter: lb, a, b,
|
|
111
|
+
decode: (signal) => a * Math.max(requireFiniteNumber(signal, "signal") + b, 0) ** g,
|
|
112
|
+
encode: (luminance) => (requireNonNegativeNumber(luminance, "luminanceCdPerSquareMeter") / a) ** (1 / g) - b
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=rgb-color-spaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rgb-color-spaces.js","sourceRoot":"","sources":["../../src/color/rgb-color-spaces.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Wide-gamut output primitives (standalone; output wiring belongs to the SDR/export stages):\n * - RGB ↔ XYZ matrices derived numerically from primary and white chromaticities: RGB (1, 1, 1)\n * is the white (W3C CSS Color 4 §2, free), never copied matrices. They equal the CSS Color 4\n * sample-code matrices to about 1e-15 (test/colorimetry-output-and-camera.test.ts).\n * sRGB / BT.709: ITU-R BT.709-6 and W3C CSS Color 4 `srgb` (also IEC 61966-2-1:1999); Display P3:\n * P3 primaries with D65 white as specified for `display-p3` in W3C CSS Color 4 (also SMPTE EG 432-1:2010);\n * BT.2020: ITU-R BT.2020-2. All use D65 (0.3127, 0.3290).\n * - Transfer functions: sRGB (W3C CSS Color 4; also IEC 61966-2-1; also Display P3), BT.709 OETF, BT.1886 EOTF\n * (ITU-R BT.1886). The BT.2100 PQ and HLG transfer functions are not part of 2.0 (owner decision,\n * 2026-10-17: their patent holders offer only licence-on-request declarations; see THIRD_PARTY.md).\n * Constants are the published values of those standards.\n * @see docs/COLORIMETRY.md for equations, coordinate/unit conventions and limits.\n */\n\nimport { calculatedResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { decodeSrgbComponent, encodeSrgbComponent } from \"./srgb-transfer.js\";\nimport { COLORIMETRY_MODEL_VERSION } from \"./color-matching-functions.js\";\nimport {\n copyMatrix,\n invertMatrix3x3,\n multiplyMatrixVector,\n parseChromaticity,\n requireFiniteNumber,\n requireFiniteResult,\n requireNonNegativeNumber,\n requirePositiveNumber,\n requireRecordValue,\n xyzOfChromaticity,\n type CieXyChromaticity,\n type CieXyzTristimulus,\n type ColorMatrix3x3\n} from \"./colorimetry-math.js\";\nimport { rejectUnknownFields, requireInputKeys } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\n/** RGB primaries as CIE 1931 xy chromaticities. */\nexport interface RgbPrimaryChromaticities {\n red: CieXyChromaticity;\n green: CieXyChromaticity;\n blue: CieXyChromaticity;\n}\n\nexport interface RgbToXyzMatrices {\n /** Linear RGB (white = 1, 1, 1) → XYZ with white Y = 1. */\n rgbToXyz: ColorMatrix3x3;\n xyzToRgb: ColorMatrix3x3;\n whiteXyz: CieXyzTristimulus;\n}\n\n/** Internal: derivation from primaries and white (see {@link calculateRgbToXyzMatrices}) without an envelope. */\nexport function rgbToXyzMatrices(primaries: RgbPrimaryChromaticities, white: CieXyChromaticity): RgbToXyzMatrices {\n const p = requireRecordValue(primaries, \"primaries\");\n rejectUnknownFields(p, [\"red\", \"green\", \"blue\"], \"primaries\");\n const columns = ([\"red\", \"green\", \"blue\"] as const).map((k) => xyzOfChromaticity(parseChromaticity(p[k], \"primaries.\" + k)));\n const basis: ColorMatrix3x3 = [\n [columns[0]!.x, columns[1]!.x, columns[2]!.x],\n [columns[0]!.y, columns[1]!.y, columns[2]!.y],\n [columns[0]!.z, columns[1]!.z, columns[2]!.z]\n ];\n const whiteXyz = xyzOfChromaticity(parseChromaticity(white, \"whiteChromaticity\"));\n const s = multiplyMatrixVector(invertMatrix3x3(basis, \"primary matrix\"), [whiteXyz.x, whiteXyz.y, whiteXyz.z]);\n if (s.some((v) => !(v > 0))) throw new InvalidScientificInputError(\"The white point must lie strictly inside the primary triangle.\");\n const rgbToXyz = basis.map((row) => row.map((v, i) => v * s[i]!)) as unknown as ColorMatrix3x3;\n return { rgbToXyz, xyzToRgb: invertMatrix3x3(rgbToXyz, \"rgbToXyz\"), whiteXyz };\n}\n\n/**\n * Derives RGB ↔ XYZ matrices from primaries and white chromaticity: columns are the primaries'\n * XYZ (Y = 1) scaled so that RGB (1, 1, 1) maps to the white (W3C CSS Color 4, free; also SMPTE\n * RP 177). The derivation is written out in docs/COLORIMETRY.md.\n */\nexport function calculateRgbToXyzMatrices(input: { primaries: RgbPrimaryChromaticities; whiteChromaticity: CieXyChromaticity }): CalculationResult<RgbToXyzMatrices> {\n requireInputKeys(input, \"calculateRgbToXyzMatrices\", [\"primaries\", \"whiteChromaticity\"]);\n const value = rgbToXyzMatrices(input.primaries, input.whiteChromaticity);\n requireFiniteResult([...value.rgbToXyz.flat(), ...value.xyzToRgb.flat()], \"RGB matrix derivation\");\n return calculatedResult(value, \"rgb-xyz-matrix-smpte-rp177\", COLORIMETRY_MODEL_VERSION);\n}\n\nexport type RgbColorSpaceId = \"srgb\" | \"display-p3\" | \"rec709\" | \"rec2020\";\nexport type RgbTransferFunctionId = \"srgb\" | \"bt709-oetf-bt1886-eotf\" | \"bt2020-oetf\";\n\nexport interface RgbColorSpaceDefinition extends RgbToXyzMatrices {\n id: RgbColorSpaceId;\n primaries: RgbPrimaryChromaticities;\n whiteChromaticity: CieXyChromaticity;\n /** Conventional non-linear (SDR) encoding of this space. */\n transferFunction: RgbTransferFunctionId;\n sources: readonly string[];\n}\n\nconst D65_CHROMATICITY: CieXyChromaticity = Object.freeze({ x: 0.3127, y: 0.3290 });\nconst BT709_PRIMARIES: RgbPrimaryChromaticities = { red: { x: 0.64, y: 0.33 }, green: { x: 0.30, y: 0.60 }, blue: { x: 0.15, y: 0.06 } };\nconst SPACES: Readonly<Record<RgbColorSpaceId, { primaries: RgbPrimaryChromaticities; transferFunction: RgbTransferFunctionId; sources: readonly string[] }>> = {\n srgb: { primaries: BT709_PRIMARIES, transferFunction: \"srgb\", sources: [\"W3C CSS Color Module Level 4 srgb\", \"ITU-R BT.709-6\"] },\n rec709: { primaries: BT709_PRIMARIES, transferFunction: \"bt709-oetf-bt1886-eotf\", sources: [\"ITU-R BT.709-6\", \"ITU-R BT.1886\"] },\n \"display-p3\": {\n primaries: { red: { x: 0.680, y: 0.320 }, green: { x: 0.265, y: 0.690 }, blue: { x: 0.150, y: 0.060 } },\n transferFunction: \"srgb\", sources: [\"W3C CSS Color Module Level 4 display-p3 (P3 primaries, D65, sRGB transfer)\", \"ITU-T H.273 ColourPrimaries 12\"]\n },\n rec2020: {\n primaries: { red: { x: 0.708, y: 0.292 }, green: { x: 0.170, y: 0.797 }, blue: { x: 0.131, y: 0.046 } },\n transferFunction: \"bt2020-oetf\", sources: [\"ITU-R BT.2020-2\"]\n }\n};\n\n/** Resolves a named RGB colour space with numerically derived matrices (all D65). */\nexport function resolveRgbColorSpace(id: RgbColorSpaceId): CalculationResult<RgbColorSpaceDefinition> {\n const space = typeof id === \"string\" && Object.hasOwn(SPACES, id) ? SPACES[id] : undefined;\n if (space === undefined) throw new InvalidConfigurationError(\"Unknown RGB colour space.\");\n const matrices = rgbToXyzMatrices(space.primaries, D65_CHROMATICITY);\n const value: RgbColorSpaceDefinition = {\n id, primaries: JSON.parse(JSON.stringify(space.primaries)) as RgbPrimaryChromaticities, whiteChromaticity: { ...D65_CHROMATICITY },\n transferFunction: space.transferFunction, sources: [...space.sources],\n rgbToXyz: copyMatrix(matrices.rgbToXyz), xyzToRgb: copyMatrix(matrices.xyzToRgb), whiteXyz: matrices.whiteXyz\n };\n return calculatedResult(value, \"rgb-color-space-\" + id, COLORIMETRY_MODEL_VERSION, [\"Matrices derived from primaries and D65 white so that RGB (1, 1, 1) is the white (W3C CSS Color 4)\"]);\n}\n\n// ---------------------------------------------------------------- transfers\n\n/** sRGB / Display P3 encoding (W3C CSS Color 4; also IEC 61966-2-1) of one linear component; negative values use the linear segment. */\nexport function evaluateSrgbEncoding(linear: number): number {\n return encodeSrgbComponent(requireFiniteNumber(linear, \"linear\"));\n}\n\n/** sRGB / Display P3 decoding of one non-linear component. */\nexport function evaluateSrgbDecoding(encoded: number): number {\n return decodeSrgbComponent(requireFiniteNumber(encoded, \"encoded\"));\n}\n\n/**\n * ITU-R BT.709-6 / BT.2020-2 (10-bit) OETF: V = 4.5 L for L < 0.018, otherwise\n * 1.099 L^0.45 − 0.099. Scene-referred camera encoding, not a display EOTF.\n */\nexport function evaluateBt709Oetf(sceneLinear: number): number {\n const l = requireFiniteNumber(sceneLinear, \"sceneLinear\");\n return l < 0.018 ? 4.5 * l : 1.099 * l ** 0.45 - 0.099;\n}\n\n/** Inverse of the BT.709 OETF: L = V/4.5 for V < 0.081, otherwise ((V + 0.099)/1.099)^(1/0.45). */\nexport function evaluateBt709InverseOetf(encoded: number): number {\n const v = requireFiniteNumber(encoded, \"encoded\");\n return v < 4.5 * 0.018 ? v / 4.5 : ((v + 0.099) / 1.099) ** (1 / 0.45);\n}\n\nexport interface Bt1886Eotf {\n whiteLuminanceCdPerSquareMeter: number;\n blackLuminanceCdPerSquareMeter: number;\n /** a = (Lw^(1/γ) − Lb^(1/γ))^γ */\n a: number;\n /** b = Lb^(1/γ) / (Lw^(1/γ) − Lb^(1/γ)) */\n b: number;\n /** L = a · max(V + b, 0)^2.4 in cd/m². */\n decode(signal: number): number;\n /** Inverse: V = (L/a)^(1/2.4) − b. */\n encode(luminanceCdPerSquareMeter: number): number;\n}\n\n/** Prepares the ITU-R BT.1886 reference EOTF (γ = 2.4) for a display's white and black luminance. */\nexport function prepareBt1886Eotf(input: { whiteLuminanceCdPerSquareMeter: number; blackLuminanceCdPerSquareMeter: number }): Bt1886Eotf {\n requireInputKeys(input, \"prepareBt1886Eotf\", [\"whiteLuminanceCdPerSquareMeter\", \"blackLuminanceCdPerSquareMeter\"]);\n const lw = requirePositiveNumber(input.whiteLuminanceCdPerSquareMeter, \"whiteLuminanceCdPerSquareMeter\");\n const lb = requireNonNegativeNumber(input.blackLuminanceCdPerSquareMeter, \"blackLuminanceCdPerSquareMeter\");\n if (!(lb < lw)) throw new InvalidScientificInputError(\"blackLuminanceCdPerSquareMeter must be below the white luminance.\");\n const g = 2.4, root = lw ** (1 / g) - lb ** (1 / g);\n const a = root ** g, b = lb ** (1 / g) / root;\n return Object.freeze({\n whiteLuminanceCdPerSquareMeter: lw, blackLuminanceCdPerSquareMeter: lb, a, b,\n decode: (signal: number) => a * Math.max(requireFiniteNumber(signal, \"signal\") + b, 0) ** g,\n encode: (luminance: number) => (requireNonNegativeNumber(luminance, \"luminanceCdPerSquareMeter\") / a) ** (1 / g) - b\n });\n}\n"]}
|
|
@@ -1,23 +1,45 @@
|
|
|
1
1
|
type Matrix = readonly (readonly number[])[];
|
|
2
|
-
|
|
2
|
+
export declare const SENSOR_COLOR_DEVELOPMENT_MODEL: Readonly<{
|
|
3
|
+
readonly id: "sensor-color-development";
|
|
4
|
+
readonly version: "2.0.0";
|
|
5
|
+
}>;
|
|
6
|
+
/** RAW development highlight policy; see the module notes. */
|
|
7
|
+
export type RawHighlightMode = "clip" | "reconstruct";
|
|
8
|
+
/** Normalized channel level where `reconstruct` starts blending toward neutral. */
|
|
9
|
+
export declare const RAW_HIGHLIGHT_RECONSTRUCTION_START = 0.8;
|
|
10
|
+
/** Accepts validated 3×3 matrices only, and keeps their declared determinant and inverse bounds. */
|
|
3
11
|
export declare function invertSensorColorMatrix(m: Matrix): number[][];
|
|
4
|
-
|
|
12
|
+
/** Camera coordinates of the declared D65 white (not normalized). The caller decides container policy. */
|
|
13
|
+
export declare function sensorColorReferenceWhite(xyzToCamera: Matrix): number[];
|
|
14
|
+
/** Per-pixel highlight/WB counters accumulated by {@link SensorColorDevelopment.developInto}. */
|
|
15
|
+
export interface SensorColorDevelopmentCounts {
|
|
16
|
+
whiteBalanceClippedSampleCount: number;
|
|
17
|
+
reconstructedPixelCount: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SensorColorDevelopment {
|
|
5
20
|
referenceWhiteXyz: {
|
|
6
21
|
x: number;
|
|
7
22
|
y: 1;
|
|
8
23
|
z: number;
|
|
9
24
|
};
|
|
25
|
+
/** Green-normalized camera-neutral coordinates of D65 (exactly [1,1,1] for white-normalized profiles). */
|
|
26
|
+
cameraNeutralD65: readonly number[];
|
|
27
|
+
/** Applied channel gains: the resolved WB gains, or 1/cameraNeutralD65 when WB is not required. */
|
|
28
|
+
appliedGains: readonly number[];
|
|
29
|
+
/** Green-normalized camera neutral of the assumed scene white: g_green/g (DNG AsShotNeutral). */
|
|
30
|
+
asShotNeutral: readonly number[];
|
|
31
|
+
/** X·M·diag(w) rows, applied as two products in the documented order. */
|
|
32
|
+
cameraToXyz: readonly (readonly number[])[];
|
|
33
|
+
highlightMode: RawHighlightMode;
|
|
34
|
+
/** Develops one normalized camera pixel into out[offset..offset+2] (linear sRGB/D65); updates counts. */
|
|
35
|
+
developInto(c0: number, c1: number, c2: number, out: Float64Array | number[], offset: number, counts: SensorColorDevelopmentCounts): void;
|
|
36
|
+
/** Convenience array form of developInto (counts discarded). */
|
|
10
37
|
develop(values: readonly number[]): number[];
|
|
11
38
|
}
|
|
12
39
|
/**
|
|
13
|
-
* Internal
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* channels before camera-to-XYZ, followed by XYZ-to-linear-sRGB. No clipping,
|
|
17
|
-
* adaptation, calibration inference, geometry or container metadata is performed.
|
|
40
|
+
* Internal development of validated, normalized sensor RGB with a declared D65 profile.
|
|
41
|
+
* `gains` is the resolved WB intent, or null when WB is not required. Both the packed native path and
|
|
42
|
+
* the bounded reference path use the returned operator, so there is one implementation.
|
|
18
43
|
*/
|
|
19
|
-
export declare function prepareSensorColorDevelopment(cameraChannelsToXyz: Matrix, gains: readonly number[]): SensorColorDevelopment;
|
|
20
|
-
/** Camera coordinates of the declared D65 white; container policy remains caller-owned. */
|
|
21
|
-
export declare function sensorColorReferenceWhite(xyzToCamera: Matrix): number[];
|
|
44
|
+
export declare function prepareSensorColorDevelopment(cameraChannelsToXyz: Matrix, gains: readonly number[] | null, highlightMode?: RawHighlightMode): SensorColorDevelopment;
|
|
22
45
|
export {};
|
|
23
|
-
//# sourceMappingURL=sensor-color-development.d.ts.map
|
|
@@ -1,27 +1,55 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
3
|
+
* RAW colour development: turns normalized sensor RGB into linear sRGB, using a declared D65 camera
|
|
4
|
+
* profile. Internal.
|
|
5
|
+
*
|
|
6
|
+
* The caller is responsible for the profile's evidence, for binding it to the CFA (colour filter
|
|
7
|
+
* array) and colour basis, and for applying white balance (WB) only once. Only validated 3×3 matrices
|
|
8
|
+
* are accepted, and their declared determinant and inverse bounds are kept.
|
|
9
|
+
*
|
|
10
|
+
* Development model (`sensor-color-development` 2.0.0). The input c is the normalized camera
|
|
11
|
+
* channels: black level subtracted, divided by the effective white level and clipped at 1 per site,
|
|
12
|
+
* all earlier in the pipeline.
|
|
13
|
+
*
|
|
14
|
+
* b = highlight(diag(g)·c), linear sRGB = X · M · diag(w) · b
|
|
15
|
+
*
|
|
16
|
+
* Where:
|
|
17
|
+
* - M is the profile's camera→XYZ matrix and X is the XYZ→linear-sRGB matrix.
|
|
18
|
+
* - w = M⁻¹·XYZ(D65), normalized to green. These are the camera-neutral coordinates of D65
|
|
19
|
+
* (DNG 1.7 "camera neutral").
|
|
20
|
+
* - The WB gains g map the scene white to equal channel values. diag(w) then maps equal channel values
|
|
21
|
+
* to D65, for any invertible M. So a grey card lit by the gains' illuminant comes out neutral,
|
|
22
|
+
* whether or not M is white-normalized.
|
|
23
|
+
* - Without a resolved WB intent, g = 1/w, and development reduces to X·M·c (a D65 scene white).
|
|
24
|
+
* - The camera neutral of the scene white, written to DNG `AsShotNeutral`, is g_green/g.
|
|
25
|
+
* This module does not chromatically adapt the scene, infer calibration, change geometry or write
|
|
26
|
+
* container metadata.
|
|
27
|
+
*
|
|
28
|
+
* Highlight handling (after each site is clipped at the sensor white level):
|
|
29
|
+
* - `clip` (default): every WB-scaled channel is clipped at the smallest gain. That is the level at
|
|
30
|
+
* which the least-amplified channel saturates, so fully clipped pixels stay neutral. This is the
|
|
31
|
+
* documented default of dcraw (`-H 0`, "clip all highlights to solid white") and of most raw
|
|
32
|
+
* converters.
|
|
33
|
+
* - `reconstruct`: a desaturation blend defined by this engine. Let s be the largest normalized
|
|
34
|
+
* channel. The weight t = clamp((s − 0.8)/0.2, 0, 1) blends the unclipped WB result u toward the
|
|
35
|
+
* neutral n = max_k min(u_k, g_min): b = (1 − t)·u + t·n. Below 0.8 of white, colour is unchanged
|
|
36
|
+
* and unclipped; at white it is neutral. This approximation follows the idea of highlight
|
|
37
|
+
* desaturation (Guo, Cheng & Hu, "Correcting over-exposure in photographs", CVPR 2010). It does not
|
|
38
|
+
* recover the clipped scene signal.
|
|
39
|
+
* @see docs/PHOTOGRAPHIC_EXPORT.md and docs/NATIVE_RAW_AND_PRINT.md for equations and limits.
|
|
12
40
|
*/
|
|
13
41
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
14
42
|
import { resolveCaptureColorModel } from "./capture-color.js";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*/
|
|
43
|
+
export const SENSOR_COLOR_DEVELOPMENT_MODEL = Object.freeze({ id: "sensor-color-development", version: "2.0.0" });
|
|
44
|
+
/** Normalized channel level where `reconstruct` starts blending toward neutral. */
|
|
45
|
+
export const RAW_HIGHLIGHT_RECONSTRUCTION_START = 0.8;
|
|
46
|
+
/** Profiles whose camera neutral is within this relative distance of [1,1,1] are white-normalized. */
|
|
47
|
+
const WHITE_NORMALIZED_TOLERANCE = 1e-12;
|
|
48
|
+
/** Multiply in declared row order: ((0 + m0·v0) + m1·v1) + m2·v2. */
|
|
21
49
|
function multiply(m, values) {
|
|
22
50
|
return m.map((row) => row.reduce((sum, v, i) => sum + v * values[i], 0));
|
|
23
51
|
}
|
|
24
|
-
/**
|
|
52
|
+
/** Accepts validated 3×3 matrices only, and keeps their declared determinant and inverse bounds. */
|
|
25
53
|
export function invertSensorColorMatrix(m) {
|
|
26
54
|
const [a, b, c, d, e, f, g, h, i] = m.flat(), det = a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
|
|
27
55
|
if (!Number.isFinite(det) || Math.abs(det) < 1e-9)
|
|
@@ -31,26 +59,72 @@ export function invertSensorColorMatrix(m) {
|
|
|
31
59
|
throw new InvalidConfigurationError("Export inverse color matrix exceeds supported range.");
|
|
32
60
|
return result;
|
|
33
61
|
}
|
|
62
|
+
/** Camera coordinates of the declared D65 white (not normalized). The caller decides container policy. */
|
|
63
|
+
export function sensorColorReferenceWhite(xyzToCamera) {
|
|
64
|
+
const white = resolveCaptureColorModel().referenceWhiteXyz;
|
|
65
|
+
return multiply(xyzToCamera, [white.x, 1, white.z]);
|
|
66
|
+
}
|
|
34
67
|
/**
|
|
35
|
-
* Internal
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* channels before camera-to-XYZ, followed by XYZ-to-linear-sRGB. No clipping,
|
|
39
|
-
* adaptation, calibration inference, geometry or container metadata is performed.
|
|
68
|
+
* Internal development of validated, normalized sensor RGB with a declared D65 profile.
|
|
69
|
+
* `gains` is the resolved WB intent, or null when WB is not required. Both the packed native path and
|
|
70
|
+
* the bounded reference path use the returned operator, so there is one implementation.
|
|
40
71
|
*/
|
|
41
|
-
export function prepareSensorColorDevelopment(cameraChannelsToXyz, gains) {
|
|
72
|
+
export function prepareSensorColorDevelopment(cameraChannelsToXyz, gains, highlightMode = "clip") {
|
|
73
|
+
if (highlightMode !== "clip" && highlightMode !== "reconstruct")
|
|
74
|
+
throw new InvalidConfigurationError("Unsupported RAW highlight mode.");
|
|
42
75
|
const model = resolveCaptureColorModel();
|
|
76
|
+
const raw = sensorColorReferenceWhite(invertSensorColorMatrix(cameraChannelsToXyz));
|
|
77
|
+
if (raw.some((x) => !(x > 0) || !Number.isFinite(x)))
|
|
78
|
+
throw new InvalidConfigurationError("Reference white requires positive camera coordinates.");
|
|
79
|
+
let neutral = raw.map((x) => x / raw[1]);
|
|
80
|
+
if (neutral.every((x) => Math.abs(x - 1) <= WHITE_NORMALIZED_TOLERANCE))
|
|
81
|
+
neutral = [1, 1, 1];
|
|
82
|
+
if (gains && (gains.length !== 3 || gains.some((x) => !(x > 0) || !Number.isFinite(x))))
|
|
83
|
+
throw new InvalidConfigurationError("White-balance gains must be positive and finite.");
|
|
84
|
+
const applied = gains ? [...gains] : neutral.map((x) => 1 / x);
|
|
85
|
+
const asShot = applied.map((x) => applied[1] / x), clipLevel = Math.min(...applied);
|
|
86
|
+
const m = cameraChannelsToXyz.map((row) => row.map((v, i) => v * neutral[i])), x = model.xyzToCameraRgb;
|
|
87
|
+
const m0 = m[0], m1 = m[1], m2 = m[2], x0 = x[0], x1 = x[1], x2 = x[2];
|
|
88
|
+
const g0 = applied[0], g1 = applied[1], g2 = applied[2], reconstruct = highlightMode === "reconstruct";
|
|
89
|
+
const start = RAW_HIGHLIGHT_RECONSTRUCTION_START;
|
|
90
|
+
function developInto(c0, c1, c2, out, offset, counts) {
|
|
91
|
+
const u0 = c0 * g0, u1 = c1 * g1, u2 = c2 * g2;
|
|
92
|
+
let b0, b1, b2;
|
|
93
|
+
const k0 = u0 > clipLevel ? clipLevel : u0, k1 = u1 > clipLevel ? clipLevel : u1, k2 = u2 > clipLevel ? clipLevel : u2;
|
|
94
|
+
if (!reconstruct) {
|
|
95
|
+
b0 = k0;
|
|
96
|
+
b1 = k1;
|
|
97
|
+
b2 = k2;
|
|
98
|
+
counts.whiteBalanceClippedSampleCount += Number(u0 > clipLevel) + Number(u1 > clipLevel) + Number(u2 > clipLevel);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const s = c0 > c1 ? (c0 > c2 ? c0 : c2) : (c1 > c2 ? c1 : c2);
|
|
102
|
+
if (s > start) {
|
|
103
|
+
const t = s >= 1 ? 1 : (s - start) / (1 - start), n = k0 > k1 ? (k0 > k2 ? k0 : k2) : (k1 > k2 ? k1 : k2);
|
|
104
|
+
b0 = (1 - t) * u0 + t * n;
|
|
105
|
+
b1 = (1 - t) * u1 + t * n;
|
|
106
|
+
b2 = (1 - t) * u2 + t * n;
|
|
107
|
+
counts.reconstructedPixelCount++;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
b0 = u0;
|
|
111
|
+
b1 = u1;
|
|
112
|
+
b2 = u2;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const X = ((0 + m0[0] * b0) + m0[1] * b1) + m0[2] * b2, Y = ((0 + m1[0] * b0) + m1[1] * b1) + m1[2] * b2, Z = ((0 + m2[0] * b0) + m2[1] * b1) + m2[2] * b2;
|
|
116
|
+
out[offset] = ((0 + x0[0] * X) + x0[1] * Y) + x0[2] * Z;
|
|
117
|
+
out[offset + 1] = ((0 + x1[0] * X) + x1[1] * Y) + x1[2] * Z;
|
|
118
|
+
out[offset + 2] = ((0 + x2[0] * X) + x2[1] * Y) + x2[2] * Z;
|
|
119
|
+
}
|
|
43
120
|
return {
|
|
44
|
-
referenceWhiteXyz: model.referenceWhiteXyz,
|
|
121
|
+
referenceWhiteXyz: model.referenceWhiteXyz, cameraNeutralD65: Object.freeze(neutral), appliedGains: Object.freeze(applied),
|
|
122
|
+
asShotNeutral: Object.freeze(asShot), cameraToXyz: m, highlightMode, developInto,
|
|
45
123
|
develop(values) {
|
|
46
|
-
const
|
|
47
|
-
|
|
124
|
+
const out = [0, 0, 0];
|
|
125
|
+
developInto(values[0], values[1], values[2], out, 0, { whiteBalanceClippedSampleCount: 0, reconstructedPixelCount: 0 });
|
|
126
|
+
return out;
|
|
48
127
|
}
|
|
49
128
|
};
|
|
50
129
|
}
|
|
51
|
-
/** Camera coordinates of the declared D65 white; container policy remains caller-owned. */
|
|
52
|
-
export function sensorColorReferenceWhite(xyzToCamera) {
|
|
53
|
-
const white = resolveCaptureColorModel().referenceWhiteXyz;
|
|
54
|
-
return multiply(xyzToCamera, [white.x, 1, white.z]);
|
|
55
|
-
}
|
|
56
130
|
//# sourceMappingURL=sensor-color-development.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensor-color-development.js","sourceRoot":"","sources":["../../src/color/sensor-color-development.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sensor-color-development.js","sourceRoot":"","sources":["../../src/color/sensor-color-development.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * RAW colour development: turns normalized sensor RGB into linear sRGB, using a declared D65 camera\n * profile. Internal.\n *\n * The caller is responsible for the profile's evidence, for binding it to the CFA (colour filter\n * array) and colour basis, and for applying white balance (WB) only once. Only validated 3×3 matrices\n * are accepted, and their declared determinant and inverse bounds are kept.\n *\n * Development model (`sensor-color-development` 2.0.0). The input c is the normalized camera\n * channels: black level subtracted, divided by the effective white level and clipped at 1 per site,\n * all earlier in the pipeline.\n *\n * b = highlight(diag(g)·c), linear sRGB = X · M · diag(w) · b\n *\n * Where:\n * - M is the profile's camera→XYZ matrix and X is the XYZ→linear-sRGB matrix.\n * - w = M⁻¹·XYZ(D65), normalized to green. These are the camera-neutral coordinates of D65\n * (DNG 1.7 \"camera neutral\").\n * - The WB gains g map the scene white to equal channel values. diag(w) then maps equal channel values\n * to D65, for any invertible M. So a grey card lit by the gains' illuminant comes out neutral,\n * whether or not M is white-normalized.\n * - Without a resolved WB intent, g = 1/w, and development reduces to X·M·c (a D65 scene white).\n * - The camera neutral of the scene white, written to DNG `AsShotNeutral`, is g_green/g.\n * This module does not chromatically adapt the scene, infer calibration, change geometry or write\n * container metadata.\n *\n * Highlight handling (after each site is clipped at the sensor white level):\n * - `clip` (default): every WB-scaled channel is clipped at the smallest gain. That is the level at\n * which the least-amplified channel saturates, so fully clipped pixels stay neutral. This is the\n * documented default of dcraw (`-H 0`, \"clip all highlights to solid white\") and of most raw\n * converters.\n * - `reconstruct`: a desaturation blend defined by this engine. Let s be the largest normalized\n * channel. The weight t = clamp((s − 0.8)/0.2, 0, 1) blends the unclipped WB result u toward the\n * neutral n = max_k min(u_k, g_min): b = (1 − t)·u + t·n. Below 0.8 of white, colour is unchanged\n * and unclipped; at white it is neutral. This approximation follows the idea of highlight\n * desaturation (Guo, Cheng & Hu, \"Correcting over-exposure in photographs\", CVPR 2010). It does not\n * recover the clipped scene signal.\n * @see docs/PHOTOGRAPHIC_EXPORT.md and docs/NATIVE_RAW_AND_PRINT.md for equations and limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { resolveCaptureColorModel } from \"./capture-color.js\";\n\ntype Matrix = readonly (readonly number[])[];\nexport const SENSOR_COLOR_DEVELOPMENT_MODEL = Object.freeze({ id: \"sensor-color-development\", version: \"2.0.0\" } as const);\n/** RAW development highlight policy; see the module notes. */\nexport type RawHighlightMode = \"clip\" | \"reconstruct\";\n/** Normalized channel level where `reconstruct` starts blending toward neutral. */\nexport const RAW_HIGHLIGHT_RECONSTRUCTION_START = 0.8;\n/** Profiles whose camera neutral is within this relative distance of [1,1,1] are white-normalized. */\nconst WHITE_NORMALIZED_TOLERANCE = 1e-12;\n\n/** Multiply in declared row order: ((0 + m0·v0) + m1·v1) + m2·v2. */\nfunction multiply(m: Matrix, values: readonly number[]): number[] {\n return m.map((row) => row.reduce((sum, v, i) => sum+v*values[i]!, 0));\n}\n/** Accepts validated 3×3 matrices only, and keeps their declared determinant and inverse bounds. */\nexport function invertSensorColorMatrix(m: Matrix): number[][] {\n const [a,b,c,d,e,f,g,h,i]=m.flat() as number[], det=a!*(e!*i!-f!*h!)-b!*(d!*i!-f!*g!)+c!*(d!*h!-e!*g!);\n if (!Number.isFinite(det) || Math.abs(det)<1e-9) throw new InvalidConfigurationError(\"Export color matrix is singular or outside supported conditioning.\");\n const result=[[e!*i!-f!*h!,c!*h!-b!*i!,b!*f!-c!*e!],[f!*g!-d!*i!,a!*i!-c!*g!,c!*d!-a!*f!],[d!*h!-e!*g!,b!*g!-a!*h!,a!*e!-b!*d!]].map((r) => r.map((v) => v/det));\n if (result.flat().some((v) => !Number.isFinite(v) || Math.abs(v)>100)) throw new InvalidConfigurationError(\"Export inverse color matrix exceeds supported range.\");\n return result;\n}\n\n/** Camera coordinates of the declared D65 white (not normalized). The caller decides container policy. */\nexport function sensorColorReferenceWhite(xyzToCamera: Matrix): number[] {\n const white = resolveCaptureColorModel().referenceWhiteXyz;\n return multiply(xyzToCamera, [white.x, 1, white.z]);\n}\n\n/** Per-pixel highlight/WB counters accumulated by {@link SensorColorDevelopment.developInto}. */\nexport interface SensorColorDevelopmentCounts { whiteBalanceClippedSampleCount: number; reconstructedPixelCount: number }\n\nexport interface SensorColorDevelopment {\n referenceWhiteXyz: { x: number; y: 1; z: number };\n /** Green-normalized camera-neutral coordinates of D65 (exactly [1,1,1] for white-normalized profiles). */\n cameraNeutralD65: readonly number[];\n /** Applied channel gains: the resolved WB gains, or 1/cameraNeutralD65 when WB is not required. */\n appliedGains: readonly number[];\n /** Green-normalized camera neutral of the assumed scene white: g_green/g (DNG AsShotNeutral). */\n asShotNeutral: readonly number[];\n /** X·M·diag(w) rows, applied as two products in the documented order. */\n cameraToXyz: readonly (readonly number[])[];\n highlightMode: RawHighlightMode;\n /** Develops one normalized camera pixel into out[offset..offset+2] (linear sRGB/D65); updates counts. */\n developInto(c0: number, c1: number, c2: number, out: Float64Array | number[], offset: number, counts: SensorColorDevelopmentCounts): void;\n /** Convenience array form of developInto (counts discarded). */\n develop(values: readonly number[]): number[];\n}\n\n/**\n * Internal development of validated, normalized sensor RGB with a declared D65 profile.\n * `gains` is the resolved WB intent, or null when WB is not required. Both the packed native path and\n * the bounded reference path use the returned operator, so there is one implementation.\n */\nexport function prepareSensorColorDevelopment(cameraChannelsToXyz: Matrix, gains: readonly number[] | null,\n highlightMode: RawHighlightMode = \"clip\"): SensorColorDevelopment {\n if (highlightMode !== \"clip\" && highlightMode !== \"reconstruct\") throw new InvalidConfigurationError(\"Unsupported RAW highlight mode.\");\n const model = resolveCaptureColorModel();\n const raw = sensorColorReferenceWhite(invertSensorColorMatrix(cameraChannelsToXyz));\n if (raw.some((x) => !(x > 0) || !Number.isFinite(x))) throw new InvalidConfigurationError(\"Reference white requires positive camera coordinates.\");\n let neutral = raw.map((x) => x/raw[1]!);\n if (neutral.every((x) => Math.abs(x-1) <= WHITE_NORMALIZED_TOLERANCE)) neutral = [1, 1, 1];\n if (gains && (gains.length !== 3 || gains.some((x) => !(x > 0) || !Number.isFinite(x)))) throw new InvalidConfigurationError(\"White-balance gains must be positive and finite.\");\n const applied = gains ? [...gains] : neutral.map((x) => 1/x);\n const asShot = applied.map((x) => applied[1]!/x), clipLevel = Math.min(...applied);\n const m = cameraChannelsToXyz.map((row) => row.map((v, i) => v*neutral[i]!)), x = model.xyzToCameraRgb;\n const m0 = m[0]!, m1 = m[1]!, m2 = m[2]!, x0 = x[0]!, x1 = x[1]!, x2 = x[2]!;\n const g0 = applied[0]!, g1 = applied[1]!, g2 = applied[2]!, reconstruct = highlightMode === \"reconstruct\";\n const start = RAW_HIGHLIGHT_RECONSTRUCTION_START;\n function developInto(c0: number, c1: number, c2: number, out: Float64Array | number[], offset: number, counts: SensorColorDevelopmentCounts): void {\n const u0 = c0*g0, u1 = c1*g1, u2 = c2*g2;\n let b0: number, b1: number, b2: number;\n const k0 = u0 > clipLevel ? clipLevel : u0, k1 = u1 > clipLevel ? clipLevel : u1, k2 = u2 > clipLevel ? clipLevel : u2;\n if (!reconstruct) {\n b0 = k0; b1 = k1; b2 = k2;\n counts.whiteBalanceClippedSampleCount += Number(u0 > clipLevel)+Number(u1 > clipLevel)+Number(u2 > clipLevel);\n } else {\n const s = c0 > c1 ? (c0 > c2 ? c0 : c2) : (c1 > c2 ? c1 : c2);\n if (s > start) {\n const t = s >= 1 ? 1 : (s-start)/(1-start), n = k0 > k1 ? (k0 > k2 ? k0 : k2) : (k1 > k2 ? k1 : k2);\n b0 = (1-t)*u0+t*n; b1 = (1-t)*u1+t*n; b2 = (1-t)*u2+t*n; counts.reconstructedPixelCount++;\n } else { b0 = u0; b1 = u1; b2 = u2; }\n }\n const X = ((0+m0[0]!*b0)+m0[1]!*b1)+m0[2]!*b2, Y = ((0+m1[0]!*b0)+m1[1]!*b1)+m1[2]!*b2, Z = ((0+m2[0]!*b0)+m2[1]!*b1)+m2[2]!*b2;\n out[offset] = ((0+x0[0]!*X)+x0[1]!*Y)+x0[2]!*Z;\n out[offset+1] = ((0+x1[0]!*X)+x1[1]!*Y)+x1[2]!*Z;\n out[offset+2] = ((0+x2[0]!*X)+x2[1]!*Y)+x2[2]!*Z;\n }\n return {\n referenceWhiteXyz: model.referenceWhiteXyz, cameraNeutralD65: Object.freeze(neutral), appliedGains: Object.freeze(applied),\n asShotNeutral: Object.freeze(asShot), cameraToXyz: m, highlightMode, developInto,\n develop(values: readonly number[]): number[] {\n const out = [0, 0, 0]; developInto(values[0]!, values[1]!, values[2]!, out, 0, { whiteBalanceClippedSampleCount: 0, reconstructedPixelCount: 0 }); return out;\n }\n };\n}\n"]}
|
package/dist/color/srgb-icc.d.ts
CHANGED
|
@@ -2,7 +2,14 @@ export declare const SRGB_ICC_PROFILE_VERSION: "0.1.0";
|
|
|
2
2
|
/**
|
|
3
3
|
* Reference: https://registry.color.org/rgb-registry/files/sRGB.pdf and ICC.1:2022.
|
|
4
4
|
* This is an original Photivra profile, not a redistributed ICC or operating-system profile.
|
|
5
|
-
* Bradford here
|
|
5
|
+
* The Bradford step here only converts to the D50 profile connection space. It does not apply the
|
|
6
|
+
* white balance (WB) chosen when shooting.
|
|
6
7
|
*/
|
|
8
|
+
/** ICC/DNG D50 profile-connection white (ICC.1:2022 §7.2.16). */
|
|
9
|
+
export declare const ICC_D50_WHITE_XYZ: readonly [0.9642, 1, 0.8249];
|
|
10
|
+
/**
|
|
11
|
+
* Linear Bradford adaptation from the engine's D65 white to D50: M⁻¹·diag(LMS(D50)/LMS(D65))·M with the
|
|
12
|
+
* Bradford cone matrix M (Lam 1985; as tabulated in ICC.1:2022 Annex E). Internal; not a root export.
|
|
13
|
+
*/
|
|
14
|
+
export declare function bradfordD65ToD50Matrix(): number[][];
|
|
7
15
|
export declare function createSrgbIccProfile(): Uint8Array;
|
|
8
|
-
//# sourceMappingURL=srgb-icc.d.ts.map
|
package/dist/color/srgb-icc.js
CHANGED
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
/**
|
|
2
|
+
/** Writes an original ICC v4 matrix/TRC (tone reproduction curve) profile from the public sRGB and ICC numeric specifications. */
|
|
3
3
|
import { resolveCaptureColorModel } from "./capture-color.js";
|
|
4
4
|
import { invertSensorColorMatrix } from "./sensor-color-development.js";
|
|
5
5
|
export const SRGB_ICC_PROFILE_VERSION = "0.1.0";
|
|
6
6
|
/**
|
|
7
7
|
* Reference: https://registry.color.org/rgb-registry/files/sRGB.pdf and ICC.1:2022.
|
|
8
8
|
* This is an original Photivra profile, not a redistributed ICC or operating-system profile.
|
|
9
|
-
* Bradford here
|
|
9
|
+
* The Bradford step here only converts to the D50 profile connection space. It does not apply the
|
|
10
|
+
* white balance (WB) chosen when shooting.
|
|
10
11
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
/** ICC/DNG D50 profile-connection white (ICC.1:2022 §7.2.16). */
|
|
13
|
+
export const ICC_D50_WHITE_XYZ = [.9642, 1, .8249];
|
|
14
|
+
/**
|
|
15
|
+
* Linear Bradford adaptation from the engine's D65 white to D50: M⁻¹·diag(LMS(D50)/LMS(D65))·M with the
|
|
16
|
+
* Bradford cone matrix M (Lam 1985; as tabulated in ICC.1:2022 Annex E). Internal; not a root export.
|
|
17
|
+
*/
|
|
18
|
+
export function bradfordD65ToD50Matrix() {
|
|
19
|
+
const model = resolveCaptureColorModel(), d65 = [model.referenceWhiteXyz.x, 1, model.referenceWhiteXyz.z], d50 = ICC_D50_WHITE_XYZ;
|
|
13
20
|
const bradford = [[.8951, .2664, -.1614], [-.7502, 1.7135, .0367], [.0389, -.0685, 1.0296]];
|
|
14
21
|
const lms = (v) => bradford.map(row => row.reduce((sum, x, i) => sum + x * v[i], 0));
|
|
15
22
|
const a = lms(d65), b = lms(d50), inverse = invertSensorColorMatrix(bradford);
|
|
16
|
-
|
|
23
|
+
return inverse.map(row => [0, 1, 2].map(j => row.reduce((sum, x, i) => sum + x * b[i] / a[i] * bradford[i][j], 0)));
|
|
24
|
+
}
|
|
25
|
+
export function createSrgbIccProfile() {
|
|
26
|
+
const model = resolveCaptureColorModel(), d50 = ICC_D50_WHITE_XYZ;
|
|
27
|
+
const chad = bradfordD65ToD50Matrix();
|
|
17
28
|
const colorants = chad.map(row => [0, 1, 2].map(j => row.reduce((sum, x, i) => sum + x * model.cameraRgbToXyz[i][j], 0)));
|
|
18
29
|
const signature = (value) => new TextEncoder().encode(value);
|
|
19
30
|
function xyz(v) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"srgb-icc.js","sourceRoot":"","sources":["../../src/color/srgb-icc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"srgb-icc.js","sourceRoot":"","sources":["../../src/color/srgb-icc.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/** Writes an original ICC v4 matrix/TRC (tone reproduction curve) profile from the public sRGB and ICC numeric specifications. */\nimport { resolveCaptureColorModel } from \"./capture-color.js\";\nimport { invertSensorColorMatrix } from \"./sensor-color-development.js\";\nexport const SRGB_ICC_PROFILE_VERSION=\"0.1.0\" as const;\n/**\n * Reference: https://registry.color.org/rgb-registry/files/sRGB.pdf and ICC.1:2022.\n * This is an original Photivra profile, not a redistributed ICC or operating-system profile.\n * The Bradford step here only converts to the D50 profile connection space. It does not apply the\n * white balance (WB) chosen when shooting.\n */\n/** ICC/DNG D50 profile-connection white (ICC.1:2022 §7.2.16). */\nexport const ICC_D50_WHITE_XYZ=[.9642,1,.8249] as const;\n/**\n * Linear Bradford adaptation from the engine's D65 white to D50: M⁻¹·diag(LMS(D50)/LMS(D65))·M with the\n * Bradford cone matrix M (Lam 1985; as tabulated in ICC.1:2022 Annex E). Internal; not a root export.\n */\nexport function bradfordD65ToD50Matrix():number[][] {\n const model=resolveCaptureColorModel(),d65=[model.referenceWhiteXyz.x,1,model.referenceWhiteXyz.z],d50=ICC_D50_WHITE_XYZ;\n const bradford=[[.8951,.2664,-.1614],[-.7502,1.7135,.0367],[.0389,-.0685,1.0296]];\n const lms=(v:readonly number[]):number[]=>bradford.map(row=>row.reduce((sum,x,i)=>sum+x*v[i]!,0));\n const a=lms(d65),b=lms(d50),inverse=invertSensorColorMatrix(bradford);\n return inverse.map(row=>[0,1,2].map(j=>row.reduce((sum,x,i)=>sum+x*b[i]!/a[i]!*bradford[i]![j]!,0)));\n}\nexport function createSrgbIccProfile():Uint8Array {\n const model=resolveCaptureColorModel(),d50=ICC_D50_WHITE_XYZ;\n const chad=bradfordD65ToD50Matrix();\n const colorants=chad.map(row=>[0,1,2].map(j=>row.reduce((sum,x,i)=>sum+x*model.cameraRgbToXyz[i]![j]!,0)));\n const signature=(value:string):Uint8Array=>new TextEncoder().encode(value);\n function xyz(v:readonly number[]):Uint8Array {\n const bytes=new Uint8Array(20),view=new DataView(bytes.buffer);bytes.set(signature(\"XYZ \"));\n v.forEach((x,i)=>view.setInt32(8+4*i,Math.round(x*65536),false));return bytes;\n }\n function text(value:string):Uint8Array {\n const bytes=new Uint8Array(28+2*value.length),view=new DataView(bytes.buffer);bytes.set(signature(\"mluc\"));\n view.setUint32(8,1,false);view.setUint32(12,12,false);bytes.set(signature(\"enUS\"),16);view.setUint32(20,value.length*2,false);view.setUint32(24,28,false);\n for(let i=0;i<value.length;i++)view.setUint16(28+2*i,value.charCodeAt(i),false);return bytes;\n }\n const curve=new Uint8Array(40),cv=new DataView(curve.buffer);curve.set(signature(\"para\"));cv.setUint16(8,4,false);\n [2.4,1/1.055,.055/1.055,1/12.92,.04045,0,0].forEach((x,i)=>cv.setInt32(12+4*i,Math.round(x*65536),false));\n const adaptation=new Uint8Array(44),av=new DataView(adaptation.buffer);adaptation.set(signature(\"sf32\"));chad.flat().forEach((x,i)=>av.setInt32(8+4*i,Math.round(x*65536),false));\n const tags:[string,Uint8Array][]=[\n [\"desc\",text(\"Photivra sRGB matrix/TRC v4\")],[\"cprt\",text(\"Copyright Photivra contributors. Apache-2.0.\")],\n [\"wtpt\",xyz(d50)],[\"rXYZ\",xyz(colorants.map(row=>row[0]!))],[\"gXYZ\",xyz(colorants.map(row=>row[1]!))],[\"bXYZ\",xyz(colorants.map(row=>row[2]!))],\n [\"rTRC\",curve],[\"gTRC\",curve],[\"bTRC\",curve],[\"chad\",adaptation]\n ];\n const aligned=(n:number):number=>Math.ceil(n/4)*4;\n const size=132+12*tags.length+tags.reduce((sum,[,bytes])=>sum+aligned(bytes.length),0);\n const output=new Uint8Array(size),view=new DataView(output.buffer);view.setUint32(0,size,false);view.setUint32(8,0x04300000,false);\n output.set(signature(\"mntr\"),12);output.set(signature(\"RGB \"),16);output.set(signature(\"XYZ \"),20);\n [2000,1,1,0,0,0].forEach((x,i)=>view.setUint16(24+2*i,x,false));output.set(signature(\"acsp\"),36);\n view.setUint32(64,1,false);d50.forEach((x,i)=>view.setInt32(68+4*i,Math.round(x*65536),false));output.set(signature(\"PHTV\"),80);\n view.setUint32(128,tags.length,false);let offset=132+12*tags.length;\n tags.forEach(([name,bytes],i)=>{const p=132+12*i;output.set(signature(name),p);view.setUint32(p+4,offset,false);view.setUint32(p+8,bytes.length,false);output.set(bytes,offset);offset+=aligned(bytes.length);});\n return output;\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/** Internal
|
|
1
|
+
/** Internal sRGB transfer function for one component. Shared by SDR rendering and the staged Print filter. */
|
|
2
2
|
export declare function encodeSrgbComponent(sample: number): number;
|
|
3
3
|
export declare function decodeSrgbComponent(sample: number): number;
|
|
4
|
-
//# sourceMappingURL=srgb-transfer.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
/** Internal
|
|
2
|
+
/** Internal sRGB transfer function for one component. Shared by SDR rendering and the staged Print filter. */
|
|
3
3
|
export function encodeSrgbComponent(sample) {
|
|
4
4
|
return sample === 1 ? 1 : sample <= .0031308 ? sample * 12.92 : 1.055 * sample ** (1 / 2.4) - .055;
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"srgb-transfer.js","sourceRoot":"","sources":["../../src/color/srgb-transfer.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"srgb-transfer.js","sourceRoot":"","sources":["../../src/color/srgb-transfer.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,8GAA8G;AAC9G,MAAM,UAAU,mBAAmB,CAAC,MAAa;IAC/C,OAAO,MAAM,KAAG,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,MAAM,IAAE,QAAQ,CAAA,CAAC,CAAA,MAAM,GAAC,KAAK,CAAA,CAAC,CAAA,KAAK,GAAC,MAAM,IAAE,CAAC,CAAC,GAAC,GAAG,CAAC,GAAC,IAAI,CAAC;AAC/E,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,MAAa;IAC/C,OAAO,MAAM,KAAG,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,CAAC,CAAA,MAAM,IAAE,MAAM,CAAA,CAAC,CAAA,MAAM,GAAC,KAAK,CAAA,CAAC,CAAA,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,GAAC,KAAK,CAAC,IAAE,GAAG,CAAC;AAC7E,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n/** Internal sRGB transfer function for one component. Shared by SDR rendering and the staged Print filter. */\nexport function encodeSrgbComponent(sample:number):number {\n return sample===1?1:sample<=.0031308?sample*12.92:1.055*sample**(1/2.4)-.055;\n}\nexport function decodeSrgbComponent(sample:number):number {\n return sample===1?1:sample<=.04045?sample/12.92:((sample+.055)/1.055)**2.4;\n}\n"]}
|