@photivra/engine 2.17.0 → 2.19.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 +116 -1
- package/CITATION.cff +1 -1
- package/README.md +6 -6
- package/SECURITY.md +1 -1
- package/dist/camera/sensor-equivalence.d.ts +156 -0
- package/dist/camera/sensor-equivalence.js +208 -0
- package/dist/camera/sensor-equivalence.js.map +1 -0
- package/dist/capture/focus-control.js +2 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/native-environment-lean.d.ts +1 -0
- package/dist/capture/native-environment-lean.js +1 -1
- package/dist/capture/native-environment-lean.js.map +1 -1
- package/dist/capture/native-environment-optical-stage.d.ts +1 -0
- package/dist/capture/native-environment-optical-stage.js +2 -5
- package/dist/capture/native-environment-optical-stage.js.map +1 -1
- package/dist/capture/native-environment-raw.js +1 -5
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-environment-tabulated.d.ts +5 -0
- package/dist/capture/native-environment-tabulated.js +1 -1
- package/dist/capture/native-environment-tabulated.js.map +1 -1
- package/dist/capture/release-sequence.js +2 -47
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/color/white-balance.d.ts +2 -0
- package/dist/color/white-balance.js +3 -56
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +1 -0
- package/dist/composition/image-formation-plan.js +3 -49
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/core/evidence-provenance.js +1 -16
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/record-validation.d.ts +54 -0
- package/dist/core/record-validation.js +176 -0
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.js +1 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/shared-helpers.d.ts +33 -0
- package/dist/core/shared-helpers.js +34 -0
- package/dist/core/shared-helpers.js.map +1 -0
- package/dist/core/spectral-composition.js +1 -36
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.js +1 -19
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +1 -0
- package/dist/equipment/exposure-capabilities.js +2 -36
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/ideal-lens.d.ts +25 -0
- package/dist/equipment/ideal-lens.js +21 -0
- package/dist/equipment/ideal-lens.js.map +1 -0
- package/dist/equipment/iso-capabilities.js +2 -49
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.js +1 -26
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.js +1 -53
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/auto-iso-slowest-shutter.js +1 -7
- package/dist/exposure/auto-iso-slowest-shutter.js.map +1 -1
- package/dist/exposure/exposure-duration-control.js +1 -16
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.js +1 -17
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/filtered-exposure-time.d.ts +93 -0
- package/dist/exposure/filtered-exposure-time.js +129 -0
- package/dist/exposure/filtered-exposure-time.js.map +1 -0
- package/dist/exposure/flash-ttl.d.ts +1 -0
- package/dist/exposure/flash-ttl.js +1 -1
- package/dist/exposure/flash-ttl.js.map +1 -1
- package/dist/exposure/flash.js +1 -49
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.js +1 -25
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.js +1 -30
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.js +1 -8
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.js +1 -72
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.js +1 -45
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/catalogue-lens-signal.d.ts +94 -0
- package/dist/facade/catalogue-lens-signal.js +362 -0
- package/dist/facade/catalogue-lens-signal.js.map +1 -0
- package/dist/facade/defocus-image-space-provider.js +5 -2
- package/dist/facade/defocus-image-space-provider.js.map +1 -1
- package/dist/facade/develop-joined-parts.d.ts +29 -0
- package/dist/facade/develop-joined-parts.js +33 -0
- package/dist/facade/develop-joined-parts.js.map +1 -0
- package/dist/facade/display-view-lens-signal.d.ts +32 -1
- package/dist/facade/display-view-lens-signal.js +85 -10
- package/dist/facade/display-view-lens-signal.js.map +1 -1
- package/dist/facade/expected-signal-setup.d.ts +8 -0
- package/dist/facade/expected-signal-setup.js +7 -0
- package/dist/facade/expected-signal-setup.js.map +1 -1
- package/dist/facade/expected-signal.d.ts +5 -0
- package/dist/facade/expected-signal.js +5 -1
- package/dist/facade/expected-signal.js.map +1 -1
- package/dist/facade/generic-lens-capture.d.ts +5 -2
- package/dist/facade/generic-lens-capture.js +5 -2
- package/dist/facade/generic-lens-capture.js.map +1 -1
- package/dist/facade/simulate-capture.d.ts +67 -8
- package/dist/facade/simulate-capture.js +262 -126
- package/dist/facade/simulate-capture.js.map +1 -1
- package/dist/facade/simulate-display-view.js +1 -1
- package/dist/facade/simulate-display-view.js.map +1 -1
- package/dist/gpu/chart-composite-gpu.js +1 -3
- package/dist/gpu/chart-composite-gpu.js.map +1 -1
- package/dist/gpu/chart-radiance-gpu.js +1 -5
- package/dist/gpu/chart-radiance-gpu.js.map +1 -1
- package/dist/gpu/display-view-quality-gpu.d.ts +13 -1
- package/dist/gpu/display-view-quality-gpu.js +4 -8
- package/dist/gpu/display-view-quality-gpu.js.map +1 -1
- package/dist/gpu/display-view-speed-gpu.js +3 -25
- package/dist/gpu/display-view-speed-gpu.js.map +1 -1
- package/dist/gpu/sensor-stage-gpu.js +1 -5
- package/dist/gpu/sensor-stage-gpu.js.map +1 -1
- package/dist/gpu/webgpu-runtime.d.ts +2 -0
- package/dist/gpu/webgpu-runtime.js +3 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.js +1 -6
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +12 -0
- package/dist/motion/capture-rotation-inverse-mapping.js +2 -2
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +1 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.js +2 -17
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +1 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +3 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.js +5 -40
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/optics/atmospheric-haze.js +1 -7
- package/dist/optics/atmospheric-haze.js.map +1 -1
- package/dist/optics/brown-conrady-distortion.js +1 -7
- package/dist/optics/brown-conrady-distortion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +1 -0
- package/dist/optics/complex-pupil-psf.js +2 -84
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/focus-state.js +1 -11
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +5 -0
- package/dist/optics/front-of-lens-filter.js +3 -65
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/generic-nd-filter-presets.d.ts +12 -0
- package/dist/optics/generic-nd-filter-presets.js +48 -0
- package/dist/optics/generic-nd-filter-presets.js.map +1 -0
- package/dist/optics/illumination-vignetting.js +1 -6
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/lens-psf-profile.d.ts +4 -1
- package/dist/optics/lens-psf-profile.js +12 -111
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.js +1 -7
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -1
- package/dist/optics/pupil-vignetting.js +1 -7
- package/dist/optics/pupil-vignetting.js.map +1 -1
- package/dist/optics/radial-distortion.js +1 -6
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.js +4 -96
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/stray-light.d.ts +1 -0
- package/dist/optics/stray-light.js +1 -1
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/zernike-wavefront.js +1 -7
- package/dist/optics/zernike-wavefront.js.map +1 -1
- package/dist/output/capture-geometry.js +1 -8
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/developed-lens-corrections.d.ts +62 -0
- package/dist/output/developed-lens-corrections.js +135 -0
- package/dist/output/developed-lens-corrections.js.map +1 -0
- package/dist/output/generic-lens-corrections.d.ts +2 -6
- package/dist/output/generic-lens-corrections.js +3 -6
- package/dist/output/generic-lens-corrections.js.map +1 -1
- package/dist/output/geometric-transforms.js +1 -4
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +2 -2
- package/dist/output/native-capture-sdr.js +3 -2
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/processing/development-detail.d.ts +29 -0
- package/dist/processing/development-detail.js +128 -107
- package/dist/processing/development-detail.js.map +1 -1
- package/dist/schema/illumination-temporal.js +3 -72
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +1 -0
- package/dist/schema/illumination.js +2 -65
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.js +2 -14
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.js +2 -60
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/validation.d.ts +2 -0
- package/dist/schema/validation.js +2 -17
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.js +2 -59
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.js +1 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +1 -0
- package/dist/sensor/camera-saturation-capacity.js +3 -55
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.js +1 -26
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.js +1 -39
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.js +1 -23
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.js +1 -26
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.js +2 -46
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.js +2 -45
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.js +2 -35
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +5 -0
- package/dist/sensor/exposure-window.js +7 -22
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/iso-gain.js +1 -7
- package/dist/sensor/iso-gain.js.map +1 -1
- package/dist/sensor/iso-signal-chain.js +1 -43
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/optical-stack.js +1 -25
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.js +1 -26
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.js +3 -77
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/radiometry-readiness.js +2 -23
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +3 -0
- package/dist/sensor/raw-readout.js +4 -66
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.js +2 -64
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.js +1 -9
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.js +3 -57
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +2 -0
- package/dist/sensor/response-application-compatibility.js +3 -29
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +1 -0
- package/dist/sensor/response-operating-range.js +3 -79
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.js +4 -108
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.js +1 -25
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.js +2 -19
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.js +1 -3
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.js +1 -18
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +10 -1
- package/dist/sensor/spectral-coverage.js +1 -1
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.js +2 -35
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.js +1 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/stabilization/camera-shake.js +1 -6
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.js +2 -80
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +4 -0
- package/docs/API_REFERENCE.md +69 -2
- package/docs/QUICK_START.md +136 -6
- package/docs/USAGE.md +89 -3
- package/docs/api/camera-sensor-equivalence.md +209 -0
- package/docs/api/core-version.md +1 -1
- package/docs/api/equipment-ideal-lens.md +26 -0
- package/docs/api/exports.json +118 -3
- package/docs/api/exposure-filtered-exposure-time.md +105 -0
- package/docs/api/facade-develop-joined-parts.md +32 -0
- package/docs/api/facade-simulate-capture.md +62 -8
- package/docs/api/optics-generic-nd-filter-presets.md +34 -0
- package/docs/api/optics-lens-psf-profile.md +3 -1
- package/docs/api/output-developed-lens-corrections.md +12 -0
- package/docs/api/output-generic-lens-corrections.md +0 -9
- package/llms.txt +3 -0
- package/package.json +1 -1
package/docs/api/exports.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packageVersion": "2.
|
|
3
|
-
"engineApiVersion": "2.
|
|
2
|
+
"packageVersion": "2.19.0",
|
|
3
|
+
"engineApiVersion": "2.19.0",
|
|
4
4
|
"exports": [
|
|
5
5
|
{
|
|
6
6
|
"name": "AbsoluteUncertaintyEstimate",
|
|
@@ -282,6 +282,16 @@
|
|
|
282
282
|
"source": "src/sensor/local-exposure-binding.ts",
|
|
283
283
|
"kind": "type"
|
|
284
284
|
},
|
|
285
|
+
{
|
|
286
|
+
"name": "BlurShareOfFrame",
|
|
287
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
288
|
+
"kind": "type"
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "BlurShareOfPrint",
|
|
292
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
293
|
+
"kind": "type"
|
|
294
|
+
},
|
|
285
295
|
{
|
|
286
296
|
"name": "BOLTZMANN_CONSTANT_JOULES_PER_KELVIN",
|
|
287
297
|
"source": "src/color/illuminants.ts",
|
|
@@ -367,6 +377,16 @@
|
|
|
367
377
|
"source": "src/facade/chart-scenes.ts",
|
|
368
378
|
"kind": "runtime"
|
|
369
379
|
},
|
|
380
|
+
{
|
|
381
|
+
"name": "calculateBlurShareOfFrame",
|
|
382
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
383
|
+
"kind": "runtime"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"name": "CalculateBlurShareOfFrameInput",
|
|
387
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
388
|
+
"kind": "type"
|
|
389
|
+
},
|
|
370
390
|
{
|
|
371
391
|
"name": "calculateBrownConradyDistortionMapping",
|
|
372
392
|
"source": "src/optics/brown-conrady-distortion.ts",
|
|
@@ -712,6 +732,16 @@
|
|
|
712
732
|
"source": "src/camera/field-of-view.ts",
|
|
713
733
|
"kind": "type"
|
|
714
734
|
},
|
|
735
|
+
{
|
|
736
|
+
"name": "calculateFilteredExposureTime",
|
|
737
|
+
"source": "src/exposure/filtered-exposure-time.ts",
|
|
738
|
+
"kind": "runtime"
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
"name": "CalculateFilteredExposureTimeInput",
|
|
742
|
+
"source": "src/exposure/filtered-exposure-time.ts",
|
|
743
|
+
"kind": "type"
|
|
744
|
+
},
|
|
715
745
|
{
|
|
716
746
|
"name": "calculateFlashGuideNumber",
|
|
717
747
|
"source": "src/exposure/flash-ttl.ts",
|
|
@@ -1287,6 +1317,16 @@
|
|
|
1287
1317
|
"source": "src/sensor/eqe-temporal-exposure.ts",
|
|
1288
1318
|
"kind": "type"
|
|
1289
1319
|
},
|
|
1320
|
+
{
|
|
1321
|
+
"name": "calculateSensorEquivalence",
|
|
1322
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
1323
|
+
"kind": "runtime"
|
|
1324
|
+
},
|
|
1325
|
+
{
|
|
1326
|
+
"name": "CalculateSensorEquivalenceInput",
|
|
1327
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
1328
|
+
"kind": "type"
|
|
1329
|
+
},
|
|
1290
1330
|
{
|
|
1291
1331
|
"name": "calculateSensorFixedPatternSite",
|
|
1292
1332
|
"source": "src/sensor/fixed-pattern-noise.ts",
|
|
@@ -2957,6 +2997,16 @@
|
|
|
2957
2997
|
"source": "src/capture/environment-raw-producer.ts",
|
|
2958
2998
|
"kind": "type"
|
|
2959
2999
|
},
|
|
3000
|
+
{
|
|
3001
|
+
"name": "EquivalenceExactness",
|
|
3002
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
3003
|
+
"kind": "type"
|
|
3004
|
+
},
|
|
3005
|
+
{
|
|
3006
|
+
"name": "EquivalenceValueBasis",
|
|
3007
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
3008
|
+
"kind": "type"
|
|
3009
|
+
},
|
|
2960
3010
|
{
|
|
2961
3011
|
"name": "EquivalentFocalLength35Mm",
|
|
2962
3012
|
"source": "src/camera/equivalent-focal-length.ts",
|
|
@@ -3277,6 +3327,21 @@
|
|
|
3277
3327
|
"source": "src/camera/field-of-view.ts",
|
|
3278
3328
|
"kind": "type"
|
|
3279
3329
|
},
|
|
3330
|
+
{
|
|
3331
|
+
"name": "FILTERED_EXPOSURE_DEFAULT_WAVELENGTH_NANOMETERS",
|
|
3332
|
+
"source": "src/exposure/filtered-exposure-time.ts",
|
|
3333
|
+
"kind": "runtime"
|
|
3334
|
+
},
|
|
3335
|
+
{
|
|
3336
|
+
"name": "FilteredExposureDialSetting",
|
|
3337
|
+
"source": "src/exposure/filtered-exposure-time.ts",
|
|
3338
|
+
"kind": "type"
|
|
3339
|
+
},
|
|
3340
|
+
{
|
|
3341
|
+
"name": "FilteredExposureTime",
|
|
3342
|
+
"source": "src/exposure/filtered-exposure-time.ts",
|
|
3343
|
+
"kind": "type"
|
|
3344
|
+
},
|
|
3280
3345
|
{
|
|
3281
3346
|
"name": "FixedMultiFrameCaptureAcquisition",
|
|
3282
3347
|
"source": "src/sensor/capture-mode.ts",
|
|
@@ -3544,7 +3609,7 @@
|
|
|
3544
3609
|
},
|
|
3545
3610
|
{
|
|
3546
3611
|
"name": "GENERIC_LENS_CORRECTION_CHANNEL_WAVELENGTHS_NM",
|
|
3547
|
-
"source": "src/output/
|
|
3612
|
+
"source": "src/output/developed-lens-corrections.ts",
|
|
3548
3613
|
"kind": "runtime"
|
|
3549
3614
|
},
|
|
3550
3615
|
{
|
|
@@ -3557,6 +3622,16 @@
|
|
|
3557
3622
|
"source": "src/equipment/generic-lens-catalogue.ts",
|
|
3558
3623
|
"kind": "runtime"
|
|
3559
3624
|
},
|
|
3625
|
+
{
|
|
3626
|
+
"name": "GENERIC_ND_FILTER_PROFILES",
|
|
3627
|
+
"source": "src/optics/generic-nd-filter-presets.ts",
|
|
3628
|
+
"kind": "runtime"
|
|
3629
|
+
},
|
|
3630
|
+
{
|
|
3631
|
+
"name": "GENERIC_ND_FILTER_STOPS",
|
|
3632
|
+
"source": "src/optics/generic-nd-filter-presets.ts",
|
|
3633
|
+
"kind": "runtime"
|
|
3634
|
+
},
|
|
3560
3635
|
{
|
|
3561
3636
|
"name": "GENERIC_PRIME_EQUIVALENT_FOCAL_LENGTHS_MM",
|
|
3562
3637
|
"source": "src/equipment/generic-prime-lenses.ts",
|
|
@@ -3707,6 +3782,11 @@
|
|
|
3707
3782
|
"source": "src/equipment/generic-lens-catalogue.ts",
|
|
3708
3783
|
"kind": "type"
|
|
3709
3784
|
},
|
|
3785
|
+
{
|
|
3786
|
+
"name": "GenericNdFilterStops",
|
|
3787
|
+
"source": "src/optics/generic-nd-filter-presets.ts",
|
|
3788
|
+
"kind": "type"
|
|
3789
|
+
},
|
|
3710
3790
|
{
|
|
3711
3791
|
"name": "GenericOpticalEvidence",
|
|
3712
3792
|
"source": "src/optics/profile-contract.ts",
|
|
@@ -3892,6 +3972,11 @@
|
|
|
3892
3972
|
"source": "src/facade/chart-scenes.ts",
|
|
3893
3973
|
"kind": "type"
|
|
3894
3974
|
},
|
|
3975
|
+
{
|
|
3976
|
+
"name": "IDEAL_LENS_LIMITS",
|
|
3977
|
+
"source": "src/equipment/ideal-lens.ts",
|
|
3978
|
+
"kind": "runtime"
|
|
3979
|
+
},
|
|
3895
3980
|
{
|
|
3896
3981
|
"name": "IdealApertureGeometry",
|
|
3897
3982
|
"source": "src/optics/aperture.ts",
|
|
@@ -7827,6 +7912,21 @@
|
|
|
7827
7912
|
"source": "src/sensor/eqe-electron-rate.ts",
|
|
7828
7913
|
"kind": "type"
|
|
7829
7914
|
},
|
|
7915
|
+
{
|
|
7916
|
+
"name": "SensorEquivalence",
|
|
7917
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
7918
|
+
"kind": "type"
|
|
7919
|
+
},
|
|
7920
|
+
{
|
|
7921
|
+
"name": "SensorEquivalenceFieldOfView",
|
|
7922
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
7923
|
+
"kind": "type"
|
|
7924
|
+
},
|
|
7925
|
+
{
|
|
7926
|
+
"name": "SensorEquivalenceQuantity",
|
|
7927
|
+
"source": "src/camera/sensor-equivalence.ts",
|
|
7928
|
+
"kind": "type"
|
|
7929
|
+
},
|
|
7830
7930
|
{
|
|
7831
7931
|
"name": "SensorExpectedReadoutSignal",
|
|
7832
7932
|
"source": "src/sensor/raw-readout.ts",
|
|
@@ -8512,6 +8612,21 @@
|
|
|
8512
8612
|
"source": "src/facade/simulate-capture.ts",
|
|
8513
8613
|
"kind": "type"
|
|
8514
8614
|
},
|
|
8615
|
+
{
|
|
8616
|
+
"name": "simulateCaptureFromParts",
|
|
8617
|
+
"source": "src/facade/develop-joined-parts.ts",
|
|
8618
|
+
"kind": "runtime"
|
|
8619
|
+
},
|
|
8620
|
+
{
|
|
8621
|
+
"name": "SimulateCaptureLensCatalogueRecord",
|
|
8622
|
+
"source": "src/facade/simulate-capture.ts",
|
|
8623
|
+
"kind": "type"
|
|
8624
|
+
},
|
|
8625
|
+
{
|
|
8626
|
+
"name": "SimulateCaptureLensCorrections",
|
|
8627
|
+
"source": "src/facade/simulate-capture.ts",
|
|
8628
|
+
"kind": "type"
|
|
8629
|
+
},
|
|
8515
8630
|
{
|
|
8516
8631
|
"name": "SimulateCaptureLensDistortion",
|
|
8517
8632
|
"source": "src/facade/simulate-capture.ts",
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# exposure/filtered-exposure-time.ts public contracts
|
|
2
|
+
|
|
3
|
+
The package and root API versions are recorded once in [Navigation](../API_REFERENCE.md) · [Developer guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
|
|
4
|
+
|
|
5
|
+
## calculateFilteredExposureTime
|
|
6
|
+
|
|
7
|
+
Shutter time that keeps the same exposure after adding front-of-lens filters, such as a
|
|
8
|
+
neutral-density (ND) filter: t / T, with T the combined transmittance of the filter profiles.
|
|
9
|
+
Aperture and ISO are unchanged.
|
|
10
|
+
|
|
11
|
+
Exact under the linear sensor model (exposure H = E·t); film reciprocity failure is not modelled.
|
|
12
|
+
Nominal filters vary: a "10-stop" or ND1000 (OD 3.0, 9.97 stops) filter transmits roughly, not
|
|
13
|
+
exactly, its rating, so the result is only as good as the profile. The envelope is an
|
|
14
|
+
approximation whenever any profile's `scientificStatus` is `"approximation"`.
|
|
15
|
+
|
|
16
|
+
Example: 1/125 s with `GENERIC_ND_FILTER_PROFILES[10]` (exactly 2^-10) gives 1024/125 = 8.192 s;
|
|
17
|
+
on a third-stop dial, 8 s.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
export function calculateFilteredExposureTime(
|
|
21
|
+
input: CalculateFilteredExposureTimeInput
|
|
22
|
+
): CalculationResult<FilteredExposureTime>;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
26
|
+
|
|
27
|
+
## CalculateFilteredExposureTimeInput
|
|
28
|
+
|
|
29
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
export interface CalculateFilteredExposureTimeInput {
|
|
33
|
+
/** Shutter time without the filter, in seconds. */
|
|
34
|
+
shutterSeconds: number;
|
|
35
|
+
/**
|
|
36
|
+
* One front-of-lens filter profile, or several in light-path order (scene side first), as
|
|
37
|
+
* accepted by `composeFrontOfLensFilterTransmission`.
|
|
38
|
+
*/
|
|
39
|
+
filter: FrontOfLensFilterProfile | readonly FrontOfLensFilterProfile[];
|
|
40
|
+
/**
|
|
41
|
+
* Optional shutter dial, in seconds (for example `GENERIC_THIRD_STOP_SHUTTER_SECONDS`). When
|
|
42
|
+
* given, the result also reports the nearest dial value (nearest in stops, the shorter on a tie).
|
|
43
|
+
*/
|
|
44
|
+
shutterDialSeconds?: readonly number[];
|
|
45
|
+
/** Wavelength at which the filters are resolved. Defaults to 550 nm. Neutral filters do not depend on it. */
|
|
46
|
+
wavelengthNanometers?: number;
|
|
47
|
+
/** Wavelength basis; defaults to the first filter profile's basis and must match every profile. */
|
|
48
|
+
wavelengthBasis?: Exclude<SpectralWavelengthBasis, "unspecified">;
|
|
49
|
+
/** Incident polarization, which matters only when a polarizer is in the stack. Omitted means unpolarized. */
|
|
50
|
+
incidentPolarization?: LinearPolarizationState;
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## FILTERED_EXPOSURE_DEFAULT_WAVELENGTH_NANOMETERS
|
|
55
|
+
|
|
56
|
+
Wavelength used when the caller gives none: 550 nm, near the photopic peak. Neutral filters do not depend on it.
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
FILTERED_EXPOSURE_DEFAULT_WAVELENGTH_NANOMETERS = 550 as const
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## FilteredExposureDialSetting
|
|
63
|
+
|
|
64
|
+
The dial value nearest the exact filtered shutter time.
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
export interface FilteredExposureDialSetting {
|
|
68
|
+
/** Nearest dial value in seconds. */
|
|
69
|
+
shutterSeconds: number;
|
|
70
|
+
/**
|
|
71
|
+
* log2(dial / exact filtered time): exposure of the dial setting relative to the unfiltered
|
|
72
|
+
* exposure, in stops. Positive is brighter (longer), negative darker.
|
|
73
|
+
*/
|
|
74
|
+
exposureErrorStops: number;
|
|
75
|
+
/** `"maximum"` when the exact time is longer than every dial value (use bulb for the exact time), `"minimum"` when shorter than every one. */
|
|
76
|
+
clamped: false | "minimum" | "maximum";
|
|
77
|
+
/** How the dial value was chosen. */
|
|
78
|
+
quantizationPolicy: "nearest-log2-shorter-on-tie";
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## FilteredExposureTime
|
|
83
|
+
|
|
84
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
export interface FilteredExposureTime {
|
|
88
|
+
/** Shutter time without the filter, in seconds. */
|
|
89
|
+
shutterSeconds: number;
|
|
90
|
+
/** Shutter time that gives the same exposure with the filter: shutterSeconds / linearTransmissionFactor. */
|
|
91
|
+
filteredShutterSeconds: number;
|
|
92
|
+
/** Combined intensity transmittance T of the filter stack, in (0, 1]. */
|
|
93
|
+
linearTransmissionFactor: number;
|
|
94
|
+
/** Combined attenuation −log2 T, in stops. */
|
|
95
|
+
attenuationStops: number;
|
|
96
|
+
/** Shutter multiplier 1/T = 2^attenuationStops. */
|
|
97
|
+
exposureFactor: number;
|
|
98
|
+
/** Wavelength at which the filters were resolved, in nanometres. */
|
|
99
|
+
wavelengthNanometers: number;
|
|
100
|
+
/** The filter-stack transmission this result is based on, with each filter's identity and evidence. */
|
|
101
|
+
filterTransmission: ComposedFrontOfLensFilterTransmission;
|
|
102
|
+
/** Nearest shutter-dial value; present only when `shutterDialSeconds` was given. */
|
|
103
|
+
dial?: FilteredExposureDialSetting;
|
|
104
|
+
}
|
|
105
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# facade/develop-joined-parts.ts public contracts
|
|
2
|
+
|
|
3
|
+
The package and root API versions are recorded once in [Navigation](../API_REFERENCE.md) · [Developer guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
|
|
4
|
+
|
|
5
|
+
## simulateCaptureFromParts
|
|
6
|
+
|
|
7
|
+
Develops the whole frame of `options` from the packed RAW of region renders of the same request (#571), so a capture can
|
|
8
|
+
render its RAW in parallel parts and still take the development steps that filter across the whole image:
|
|
9
|
+
`output.diffractionCorrection` and `output.sharpening`, which a region render refuses, and `output.lensCorrections` (#570), which
|
|
10
|
+
runs on the whole developed frame here exactly as in `simulateCapture(options)`. The parts are joined exactly as
|
|
11
|
+
{@link serializeSimulatedCaptureDngFromParts } joins them (they must cover every native site and agree where they overlap),
|
|
12
|
+
and the joined RAW is the whole render's RAW, so the result's `image` (samples and JPEG or PNG bytes), `raw` codes and
|
|
13
|
+
`plan` are those of `simulateCapture(options)`, bit for bit.
|
|
14
|
+
|
|
15
|
+
`options` is the whole request (no `output.region`), with the development options it should have; render the parts with
|
|
16
|
+
the same request plus `output.region`, without `output.diffractionCorrection`, `output.sharpening` and `output.dng`, and with a
|
|
17
|
+
fixed white balance in place of `"auto"` (none of these change the RAW codes; auto white balance is measured here over the
|
|
18
|
+
joined frame). A part may keep or drop `output.lensCorrections` (a corrected region only widens its `region.nativeRect`).
|
|
19
|
+
Any `output.format` serves for a part.
|
|
20
|
+
|
|
21
|
+
`onProgress` reports the `white-balance` (with auto white balance), `development`, `diffraction-correction`, `sharpening` and
|
|
22
|
+
`jpeg` stages, the detail stages once per output row, so a host can show "Applying sharpening to the whole image". The lens
|
|
23
|
+
corrections report no stage of their own: they run between `diffraction-correction` and `sharpening`.
|
|
24
|
+
No `raw` stage is reported: no RAW is rendered. What differs from the whole render's result: `diagnostics.providerEvaluationCount`
|
|
25
|
+
is 0, `diagnostics.timingsMs` are this call's, `diagnostics.fast` and the `raw.*` assumptions of how the RAW was rendered are
|
|
26
|
+
not repeated (they are in the parts' results), and a `parts` assumption records the join.
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
export async function simulateCaptureFromParts(options: SimulateCaptureOptions, parts: readonly SimulateCaptureDngPart[]): Promise<SimulateCaptureResult>;
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
This call is asynchronous; byte hashing uses the caller runtime's Web Crypto.
|
|
@@ -144,7 +144,7 @@ a capture does. `motion.rotation` is a non-zero angular velocity; `sensor.tempor
|
|
|
144
144
|
SIMULATE_CAPTURE_COST_OPTIONS = Object.freeze(["lens.pupilSampling", "lens.projection", "lens.distortion", "lens.vignetting", "lens.psf",
|
|
145
145
|
"lens.diffraction", "lens.defocus", "lens.catalogue", "sensor.antiAliasing", "sensor.pixelAperture.box", "sensor.temporalSampleCount", "motion.rotation", "motion.shutter.rolling", "output.borderHandling.mirror", "output.region",
|
|
146
146
|
"output.whiteBalance.auto", "output.demosaic.ahd", "output.highlightMode.reconstruct", "output.colorEncoding.wide-gamut", "output.gamutMapping.perceptual",
|
|
147
|
-
"output.diffractionCorrection", "output.sharpening", "output.format.jpeg", "output.format.png", "output.format.dng"] as const)
|
|
147
|
+
"output.diffractionCorrection", "output.sharpening", "output.lensCorrections", "output.format.jpeg", "output.format.png", "output.format.dng"] as const)
|
|
148
148
|
```
|
|
149
149
|
|
|
150
150
|
## SIMULATE_CAPTURE_DEFAULT_ILLUMINANCE_LUX
|
|
@@ -173,7 +173,7 @@ the record form with `fast` and is reported in `diagnostics.fast.applied` when i
|
|
|
173
173
|
whether or not it has a fast method yet; one without runs exact and reports `false`.
|
|
174
174
|
|
|
175
175
|
```ts
|
|
176
|
-
SIMULATE_CAPTURE_FAST_OPTIONS = Object.freeze(["lens.diffraction", "sensor.antiAliasing", "sensor.pixelAperture.box", "output.demosaic.ahd"] as const)
|
|
176
|
+
SIMULATE_CAPTURE_FAST_OPTIONS = Object.freeze(["lens.diffraction", "lens.catalogue", "sensor.antiAliasing", "sensor.pixelAperture.box", "output.demosaic.ahd"] as const)
|
|
177
177
|
```
|
|
178
178
|
|
|
179
179
|
## SIMULATE_CAPTURE_METERING_MODES
|
|
@@ -459,6 +459,30 @@ export interface SimulateCaptureFastReport {
|
|
|
459
459
|
}
|
|
460
460
|
```
|
|
461
461
|
|
|
462
|
+
## SimulateCaptureLensCatalogueRecord
|
|
463
|
+
|
|
464
|
+
`lens.catalogue` as a record (#568): the lens id as `kind` and the `fast` override (see {@link SimulateCaptureOptions.fast}).
|
|
465
|
+
|
|
466
|
+
```ts
|
|
467
|
+
export interface SimulateCaptureLensCatalogueRecord { kind: string; fast?: boolean }
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
## SimulateCaptureLensCorrections
|
|
471
|
+
|
|
472
|
+
`output.lensCorrections` (#570): which of the catalogue lens's generic corrections (`createGenericLensCorrectionProfile`) the
|
|
473
|
+
development applies. Each is off unless set to true.
|
|
474
|
+
|
|
475
|
+
```ts
|
|
476
|
+
export interface SimulateCaptureLensCorrections {
|
|
477
|
+
/** Radial distortion r_d = r(1 + k1ρ²), inverted by resampling: it stretches the corners and lowers their resolution. */
|
|
478
|
+
distortion?: boolean;
|
|
479
|
+
/** Lateral colour: each channel rescaled by 1/(1 + L·D(λ_c)) into register; axial (longitudinal) colour stays. */
|
|
480
|
+
lateralColor?: boolean;
|
|
481
|
+
/** Vignetting: a gain 1/E(ρ) at each pixel's source point; corner noise rises with the signal, the SNR does not. */
|
|
482
|
+
vignetting?: boolean;
|
|
483
|
+
}
|
|
484
|
+
```
|
|
485
|
+
|
|
462
486
|
## SimulateCaptureLensDistortion
|
|
463
487
|
|
|
464
488
|
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
@@ -514,6 +538,19 @@ export interface SimulateCaptureOptions {
|
|
|
514
538
|
* focus distance below its minimum focus distance, is rejected. Not combinable with `focalLengthMm`.
|
|
515
539
|
*/
|
|
516
540
|
prime?: number;
|
|
541
|
+
/**
|
|
542
|
+
* Opt-in (#576): an ideal lens, an aberration-free thin lens of this physical focal length (1–4000 mm) on whatever sensor the
|
|
543
|
+
* frame is (output width × height × pixel pitch; no crop-factor scaling), at any `fNumber` from f/0.5 to f/128
|
|
544
|
+
* (`IDEAL_LENS_LIMITS`; beyond them the request is refused). It replaces the tier lens's focal length and f-number range (the
|
|
545
|
+
* transmission is kept); shutter priority and program may choose any aperture in that range. Recorded in the `lens.ideal`
|
|
546
|
+
* assumption. Its blur is that of `defocus`, `diffraction` and `vignetting`, the same models as with `prime`. It focuses at any
|
|
547
|
+
* distance beyond the focal length (no minimum focus distance; `subjectDistanceM` must be at least twice the focal length, as for
|
|
548
|
+
* every lens). Works in `simulateCapture` and the display view. Not combinable with `prime`, `catalogue` or `focalLengthMm`.
|
|
549
|
+
* Optional `widestFNumber` and `narrowestFNumber` (within `IDEAL_LENS_LIMITS`, widest ≤ narrowest; each defaults to its bound)
|
|
550
|
+
* narrow the range: `fNumber` must lie in it, and shutter priority and program choose apertures only in it (program limits its
|
|
551
|
+
* line to a range that does not hold f/4–f/16, #583). Default off.
|
|
552
|
+
*/
|
|
553
|
+
ideal?: { focalLengthMm: number; widestFNumber?: number; narrowestFNumber?: number };
|
|
517
554
|
/**
|
|
518
555
|
* Opt-in (#549): a lens of the generic lens catalogue by id (`GENERIC_LENS_IDS`, for example "pv-50-1.2-pro" or "pv-50-1.8";
|
|
519
556
|
* docs/LENS_CATALOGUE.md). Like `prime`, its focal length is the full-frame equivalent ÷ the simulated frame's diagonal crop
|
|
@@ -522,9 +559,12 @@ export interface SimulateCaptureOptions {
|
|
|
522
559
|
* colour, at the resolved f-number and focus) through the environment PSF quadrature, its radial distortion, its vignetting
|
|
523
560
|
* and, for the fisheyes, the equisolid projection. Flare, focus breathing and bokeh shape are not rendered. Not combinable
|
|
524
561
|
* with `prime`, `focalLengthMm`, `projection`, `distortion`, `vignetting`, `psf`, `diffraction` or `pupilSampling` (the
|
|
525
|
-
* lens sets them); `defocus` convolves the disc into the lens's PSF.
|
|
562
|
+
* lens sets them); `defocus` convolves the disc into the lens's PSF. The display view renders it with the PSF taken per field zone (#569; docs/DISPLAY_VIEW.md). Default off.
|
|
563
|
+
* #568: the record form `{ kind: <lens id>, fast }` overrides the top-level `fast` flag for this option; the fast method
|
|
564
|
+
* blends the PSF between exactly resolved kernels on a field grid and tabulates each site's expected signal
|
|
565
|
+
* (docs/LENS_CATALOGUE.md, "Fast method").
|
|
526
566
|
*/
|
|
527
|
-
catalogue?: string;
|
|
567
|
+
catalogue?: string | SimulateCaptureLensCatalogueRecord;
|
|
528
568
|
/**
|
|
529
569
|
* Opt-in (#549), with `catalogue` only: a seeded autofocus error (`simulateGenericLensFocusError`). The focus distance becomes
|
|
530
570
|
* the sampled one for (seed, shotIndex), reported in the `lens.focusScatter` assumption; it is visible with `defocus`. Default off.
|
|
@@ -715,6 +755,16 @@ export interface SimulateCaptureOptions {
|
|
|
715
755
|
* (not the wide-gamut or perceptual PNG paths); not combinable with `region`. The DNG's RAW codes are not changed. Default off.
|
|
716
756
|
*/
|
|
717
757
|
sharpening?: SimulateCaptureSharpening;
|
|
758
|
+
/**
|
|
759
|
+
* Opt-in (#570), with `lens.catalogue`: the lens's generic corrections (see {@link SimulateCaptureLensCorrections}) on the
|
|
760
|
+
* developed linear colour, after demosaic, colour, white balance and `diffractionCorrection`, before the tone curve; for the JPEG,
|
|
761
|
+
* PNG and samples. The RAW and the DNG are never corrected. To keep the output size with no missing pixels, the corrected image is
|
|
762
|
+
* magnified by the smallest factor 1/m ≥ 1 that keeps every pixel's source inside the frame (recorded in the
|
|
763
|
+
* `output.lensCorrections` assumption). Works with `region`: a region develops the frame pixels its corrected pixels read
|
|
764
|
+
* (`region.nativeRect`, `raw` and `plan` describe that rectangle) and its pixels are the whole render's. All off (or omitted):
|
|
765
|
+
* the development is unchanged.
|
|
766
|
+
*/
|
|
767
|
+
lensCorrections?: SimulateCaptureLensCorrections;
|
|
718
768
|
};
|
|
719
769
|
/** Camera motion and shutter type. Default: still camera, global electronic shutter. */
|
|
720
770
|
motion?: SimulateCaptureMotion;
|
|
@@ -748,12 +798,12 @@ export interface SimulateCaptureOptions {
|
|
|
748
798
|
* Exact or fast (#395). `false` or omitted: every option runs its exact method, the engine reference. `true`: each option
|
|
749
799
|
* listed in {@link SIMULATE_CAPTURE_FAST_OPTIONS} runs its fast method where it has one, a measured, bounded approximation of
|
|
750
800
|
* the exact one; an option without a fast method runs exact. An option's own record `fast` overrides this for that option
|
|
751
|
-
* only. `diagnostics.fast` reports what was requested and what ran.
|
|
801
|
+
* only. `diagnostics.fast` reports what was requested and what ran. `lens.catalogue` has a fast method (#568); the other options run exact.
|
|
752
802
|
*/
|
|
753
803
|
fast?: boolean;
|
|
754
804
|
/** Aborting cancels the running task; the promise rejects with a domain error and returns no partial image. */
|
|
755
805
|
signal?: AbortSignal;
|
|
756
|
-
/** Called after each committed RAW, development or JPEG tile. Cannot change output. */
|
|
806
|
+
/** Called after each committed RAW, development, detail or JPEG tile (see {@link SimulateCaptureProgress}). Cannot change output. */
|
|
757
807
|
onProgress?: (progress: SimulateCaptureProgress) => void;
|
|
758
808
|
}
|
|
759
809
|
```
|
|
@@ -776,11 +826,15 @@ export type SimulateCapturePixelAperture = "point" | "box" | { kind: "box"; samp
|
|
|
776
826
|
|
|
777
827
|
## SimulateCaptureProgress
|
|
778
828
|
|
|
779
|
-
|
|
829
|
+
One progress event of `onProgress`. Stages run in this order: `raw`, `white-balance` (with auto white balance), `development`
|
|
830
|
+
(rows), then, when requested, `diffraction-correction` and `sharpening` (#571: one event per output row of the whole image;
|
|
831
|
+
each stage's last event has `completedTileCount === totalTileCount`), then `jpeg`. `output.lensCorrections` (#570) runs between
|
|
832
|
+
`diffraction-correction` and `sharpening` and reports no stage of its own. {@link simulateCaptureFromParts }
|
|
833
|
+
reports no `raw` stage: its RAW comes from the parts.
|
|
780
834
|
|
|
781
835
|
```ts
|
|
782
836
|
export interface SimulateCaptureProgress {
|
|
783
|
-
stage: "raw" | "white-balance" | "development" | "jpeg";
|
|
837
|
+
stage: "raw" | "white-balance" | "development" | "diffraction-correction" | "sharpening" | "jpeg";
|
|
784
838
|
completedTileCount: number;
|
|
785
839
|
totalTileCount: number;
|
|
786
840
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# optics/generic-nd-filter-presets.ts public contracts
|
|
2
|
+
|
|
3
|
+
The package and root API versions are recorded once in [Navigation](../API_REFERENCE.md) · [Developer guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
|
|
4
|
+
|
|
5
|
+
## GENERIC_ND_FILTER_PROFILES
|
|
6
|
+
|
|
7
|
+
Frozen generic ND filter profiles keyed by stops: `GENERIC_ND_FILTER_PROFILES[10]` transmits
|
|
8
|
+
exactly 1/1024. Spectrally flat over 380–780 nm (air), idealized (`scientificStatus:
|
|
9
|
+
"approximation"`), unbranded. 1/125 s with the 10-stop preset gives 1024/125 ≈ 8.19 s in
|
|
10
|
+
`calculateFilteredExposureTime`.
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
GENERIC_ND_FILTER_PROFILES: Readonly<Record<GenericNdFilterStops, FrontOfLensFilterProfile>> = freezeOwnedData({
|
|
14
|
+
3: idealNdProfile(3),
|
|
15
|
+
6: idealNdProfile(6),
|
|
16
|
+
10: idealNdProfile(10)
|
|
17
|
+
})
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## GENERIC_ND_FILTER_STOPS
|
|
21
|
+
|
|
22
|
+
Attenuations, in stops, of the generic ND presets.
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
GENERIC_ND_FILTER_STOPS = Object.freeze([3, 6, 10] as const)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## GenericNdFilterStops
|
|
29
|
+
|
|
30
|
+
One of the generic ND preset attenuations: 3, 6 or 10 stops.
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
export type GenericNdFilterStops = (typeof GENERIC_ND_FILTER_STOPS)[number];
|
|
34
|
+
```
|
|
@@ -200,7 +200,9 @@ Kernel interpolation between regular-grid nodes.
|
|
|
200
200
|
- `rotationally-symmetric-radial-field-centroid-aligned`: for a rotationally symmetric lens. Nodes
|
|
201
201
|
are declared only along the +X field axis (fieldYmm = [0], fieldXmm >= 0). A query at field
|
|
202
202
|
(x, y) is interpolated, with centroid alignment, at radius hypot(x, y). The kernel is then
|
|
203
|
-
rotated by atan2(y, x) about its centre
|
|
203
|
+
rotated by atan2(y, x) about its centre, with the kernel row index increasing with image +Y (the
|
|
204
|
+
convention the environment PSF quadrature applies), so an asymmetric kernel points the same way
|
|
205
|
+
as in the 2-D grid modes. The sample pitch must be square.
|
|
204
206
|
Shifts and rotations use bilinear resampling. This smooths the kernel slightly (by at most about
|
|
205
207
|
one sample). Samples outside the kernel are zero, and the result is renormalised to unit energy.
|
|
206
208
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# output/developed-lens-corrections.ts public contracts
|
|
2
|
+
|
|
3
|
+
The package and root API versions are recorded once in [Navigation](../API_REFERENCE.md) · [Developer guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
|
|
4
|
+
|
|
5
|
+
## GENERIC_LENS_CORRECTION_CHANNEL_WAVELENGTHS_NM
|
|
6
|
+
|
|
7
|
+
Effective wavelengths of the red, green and blue channels for the lateral-colour map, nm: a generic approximation of where
|
|
8
|
+
a camera's channel responses peak, not a measured camera.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
GENERIC_LENS_CORRECTION_CHANNEL_WAVELENGTHS_NM: Readonly<Record<LensCorrectionChannel, number>> = Object.freeze({ red: 610, green: 540, blue: 465 })
|
|
12
|
+
```
|
|
@@ -28,12 +28,3 @@ export interface CreateGenericLensCorrectionProfileInput {
|
|
|
28
28
|
state: OpticalProfileState;
|
|
29
29
|
}
|
|
30
30
|
```
|
|
31
|
-
|
|
32
|
-
## GENERIC_LENS_CORRECTION_CHANNEL_WAVELENGTHS_NM
|
|
33
|
-
|
|
34
|
-
Effective wavelengths of the red, green and blue channels for the lateral-colour map, nm: a generic approximation of where
|
|
35
|
-
a camera's channel responses peak, not a measured camera.
|
|
36
|
-
|
|
37
|
-
```ts
|
|
38
|
-
GENERIC_LENS_CORRECTION_CHANNEL_WAVELENGTHS_NM: Readonly<Record<LensCorrectionChannel, number>> = Object.freeze({ red: 610, green: 540, blue: 465 })
|
|
39
|
-
```
|
package/llms.txt
CHANGED
|
@@ -24,8 +24,11 @@
|
|
|
24
24
|
- [resolveGenericLens()](https://github.com/Photivra/photivra/blob/main/docs/api/equipment-generic-lens-catalogue.md#resolvegenericlens): one of the 30 generic catalogue lenses ("PV 50 1.2 Pro") on a sensor, with its approximated optical character; `simulateCapture` renders it with `lens.catalogue`
|
|
25
25
|
- [calculateFieldOfView()](https://github.com/Photivra/photivra/blob/main/docs/api/camera-field-of-view.md#calculatefieldofview): angle of view from focal length and sensor size
|
|
26
26
|
- [calculateEquivalentFocalLength35Mm()](https://github.com/Photivra/photivra/blob/main/docs/api/camera-equivalent-focal-length.md#calculateequivalentfocallength35mm): crop factor and 35 mm-equivalent focal length
|
|
27
|
+
- [calculateSensorEquivalence()](https://github.com/Photivra/photivra/blob/main/docs/api/camera-sensor-equivalence.md#calculatesensorequivalence): equivalent focal length and f-number, sensor area ratio and angles of view of a lens on one sensor, each marked exact or approximated
|
|
28
|
+
- [calculateBlurShareOfFrame()](https://github.com/Photivra/photivra/blob/main/docs/api/camera-sensor-equivalence.md#calculateblurshareofframe): a blur circle as a share of the frame diagonal, or its size on a print
|
|
27
29
|
- [calculateCenteredCrop()](https://github.com/Photivra/photivra/blob/main/docs/api/output-crop.md#calculatecenteredcrop): pixels left after a centred crop
|
|
28
30
|
- [calculateProjectedMotionBlur()](https://github.com/Photivra/photivra/blob/main/docs/api/motion-projected-motion.md#calculateprojectedmotionblur): how far a moving subject smears on the sensor during the shutter time
|
|
31
|
+
- [calculateFilteredExposureTime()](https://github.com/Photivra/photivra/blob/main/docs/api/exposure-filtered-exposure-time.md#calculatefilteredexposuretime): shutter time that keeps the same exposure with an ND (or any front-of-lens) filter, and the nearest shutter-dial value; `GENERIC_ND_FILTER_PROFILES` gives idealized 3-, 6- and 10-stop filters (exactly 2^-N)
|
|
29
32
|
- [calculateAiryDisk()](https://github.com/Photivra/photivra/blob/main/docs/api/optics-diffraction.md#calculateairydisk): diffraction spot size from f-number and wavelength
|
|
30
33
|
- [calculateSignalToNoise()](https://github.com/Photivra/photivra/blob/main/docs/api/sensor-signal-noise.md#calculatesignaltonoise): expected SNR from signal and read noise in electrons
|
|
31
34
|
- [calculateChromaticityFromCorrelatedColorTemperature()](https://github.com/Photivra/photivra/blob/main/docs/api/color-illuminants.md#calculatechromaticityfromcorrelatedcolortemperature): white point for a colour temperature in kelvin
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@photivra/engine",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.19.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Scientific TypeScript engine for camera optics, exposure, focus, motion, sensor sampling, diffraction, and digital imaging calculations.",
|
|
6
6
|
"type": "module",
|