@photivra/engine 0.2.0 → 0.5.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 +79 -0
- package/CITATION.cff +1 -1
- package/README.md +59 -10
- package/dist/camera/equivalent-focal-length.d.ts +34 -0
- package/dist/camera/equivalent-focal-length.d.ts.map +1 -0
- package/dist/camera/equivalent-focal-length.js +33 -0
- package/dist/camera/equivalent-focal-length.js.map +1 -0
- package/dist/camera/field-of-view.d.ts +40 -3
- package/dist/camera/field-of-view.d.ts.map +1 -1
- package/dist/camera/field-of-view.js +66 -24
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/core/calculation-result.d.ts.map +1 -1
- package/dist/core/calculation-result.js +14 -2
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/configuration-error.d.ts +9 -0
- package/dist/core/configuration-error.d.ts.map +1 -0
- package/dist/core/configuration-error.js +13 -0
- package/dist/core/configuration-error.js.map +1 -0
- package/dist/core/evidence-provenance.d.ts +40 -0
- package/dist/core/evidence-provenance.d.ts.map +1 -0
- package/dist/core/evidence-provenance.js +79 -0
- package/dist/core/evidence-provenance.js.map +1 -0
- package/dist/core/image-formation.d.ts +70 -0
- package/dist/core/image-formation.d.ts.map +1 -0
- package/dist/core/image-formation.js +335 -0
- package/dist/core/image-formation.js.map +1 -0
- package/dist/index.d.ts +15 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +91 -0
- package/dist/motion/camera-rotation.d.ts.map +1 -0
- package/dist/motion/camera-rotation.js +157 -0
- package/dist/motion/camera-rotation.js.map +1 -0
- package/dist/optics/focus-breathing.d.ts +73 -0
- package/dist/optics/focus-breathing.d.ts.map +1 -0
- package/dist/optics/focus-breathing.js +77 -0
- package/dist/optics/focus-breathing.js.map +1 -0
- package/dist/optics/illumination-vignetting.d.ts +59 -0
- package/dist/optics/illumination-vignetting.d.ts.map +1 -0
- package/dist/optics/illumination-vignetting.js +107 -0
- package/dist/optics/illumination-vignetting.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +117 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.js +228 -0
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -0
- package/dist/optics/psf-foundation.d.ts +102 -0
- package/dist/optics/psf-foundation.d.ts.map +1 -0
- package/dist/optics/psf-foundation.js +164 -0
- package/dist/optics/psf-foundation.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +131 -0
- package/dist/optics/radial-distortion.d.ts.map +1 -0
- package/dist/optics/radial-distortion.js +227 -0
- package/dist/optics/radial-distortion.js.map +1 -0
- package/dist/output/capture-geometry.d.ts +278 -0
- package/dist/output/capture-geometry.d.ts.map +1 -0
- package/dist/output/capture-geometry.js +562 -0
- package/dist/output/capture-geometry.js.map +1 -0
- package/dist/schema/validation.d.ts +1 -8
- package/dist/schema/validation.d.ts.map +1 -1
- package/dist/schema/validation.js +2 -11
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/architecture.d.ts +40 -0
- package/dist/sensor/architecture.d.ts.map +1 -0
- package/dist/sensor/architecture.js +98 -0
- package/dist/sensor/architecture.js.map +1 -0
- package/dist/sensor/radiometry-readiness.d.ts +111 -0
- package/dist/sensor/radiometry-readiness.d.ts.map +1 -0
- package/dist/sensor/radiometry-readiness.js +294 -0
- package/dist/sensor/radiometry-readiness.js.map +1 -0
- package/dist/sensor/sensor-geometry.d.ts +99 -0
- package/dist/sensor/sensor-geometry.d.ts.map +1 -0
- package/dist/sensor/sensor-geometry.js +71 -0
- package/dist/sensor/sensor-geometry.js.map +1 -0
- package/dist/simulation/poc-simulation.d.ts +93 -1
- package/dist/simulation/poc-simulation.d.ts.map +1 -1
- package/dist/simulation/poc-simulation.js +308 -24
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/docs/API_STYLE.md +36 -2
- package/docs/ARCHITECTURE.md +179 -1
- package/docs/IMAGE_FORMATION.md +151 -0
- package/docs/MOTION_AND_SIGNAL.md +52 -1
- package/docs/PHYSICS_FOUNDATION.md +190 -3
- package/docs/POC_API.md +73 -7
- package/docs/PROVENANCE.md +24 -0
- package/docs/PSF_FOUNDATION.md +133 -0
- package/docs/STABILIZATION.md +17 -4
- package/docs/USAGE.md +714 -3
- package/package.json +3 -2
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { type CalculationResult } from "../core/calculation-result.js";
|
|
2
|
+
/**
|
|
3
|
+
* Physical photosensitive imaging area used for image formation.
|
|
4
|
+
*
|
|
5
|
+
* This is deliberately not a sensor package/die dimension.
|
|
6
|
+
*/
|
|
7
|
+
export interface SensorImagingArea {
|
|
8
|
+
/** Physical active imaging width in millimetres. */
|
|
9
|
+
widthMm: number;
|
|
10
|
+
/** Physical active imaging height in millimetres. */
|
|
11
|
+
heightMm: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Native effective image-sampling raster associated with an imaging area.
|
|
15
|
+
*
|
|
16
|
+
* The raster describes effective image samples. It does not imply that each
|
|
17
|
+
* sample corresponds one-to-one with a physical photodiode/photosite.
|
|
18
|
+
*/
|
|
19
|
+
export interface RasterDimensions {
|
|
20
|
+
/** Horizontal image-sample/pixel count. */
|
|
21
|
+
pixelWidth: number;
|
|
22
|
+
/** Vertical image-sample/pixel count. */
|
|
23
|
+
pixelHeight: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Native effective image-sampling raster associated with an imaging area.
|
|
27
|
+
*
|
|
28
|
+
* This alias identifies semantic role; generic active/output rasters should
|
|
29
|
+
* use RasterDimensions instead.
|
|
30
|
+
*/
|
|
31
|
+
export type NativeImageRaster = RasterDimensions;
|
|
32
|
+
export interface ImagingAreaMetrics {
|
|
33
|
+
/** Physical imaging-area diagonal in millimetres. */
|
|
34
|
+
diagonalMm: number;
|
|
35
|
+
/** Physical width divided by physical height. */
|
|
36
|
+
aspectRatio: number;
|
|
37
|
+
/**
|
|
38
|
+
* Diagonal crop factor relative to a 36 × 24 mm reference frame.
|
|
39
|
+
*
|
|
40
|
+
* This is a physical imaging-area quantity and does not include later
|
|
41
|
+
* digital/output cropping.
|
|
42
|
+
*/
|
|
43
|
+
cropFactor35Mm: number;
|
|
44
|
+
}
|
|
45
|
+
export interface CalculateSensorGeometryMetricsInput {
|
|
46
|
+
imagingArea: SensorImagingArea;
|
|
47
|
+
nativeRaster: NativeImageRaster;
|
|
48
|
+
}
|
|
49
|
+
export interface SensorGeometryMetrics {
|
|
50
|
+
imagingArea: ImagingAreaMetrics;
|
|
51
|
+
nativeRaster: {
|
|
52
|
+
/** Exact product of native raster width and height. */
|
|
53
|
+
totalImageSamples: number;
|
|
54
|
+
/** Derived megapixels from the exact native raster. */
|
|
55
|
+
megapixels: number;
|
|
56
|
+
/** Native raster width divided by native raster height. */
|
|
57
|
+
aspectRatio: number;
|
|
58
|
+
};
|
|
59
|
+
sampling: {
|
|
60
|
+
/**
|
|
61
|
+
* Horizontal geometric sampling pitch in micrometres.
|
|
62
|
+
*
|
|
63
|
+
* This is image-sample spacing, not physical photodiode active area.
|
|
64
|
+
*/
|
|
65
|
+
pitchXMicrometers: number;
|
|
66
|
+
/**
|
|
67
|
+
* Vertical geometric sampling pitch in micrometres.
|
|
68
|
+
*
|
|
69
|
+
* This is image-sample spacing, not physical photodiode active area.
|
|
70
|
+
*/
|
|
71
|
+
pitchYMicrometers: number;
|
|
72
|
+
/** Horizontal sampling pitch divided by vertical sampling pitch. */
|
|
73
|
+
pitchAspectRatio: number;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Calculates physical imaging-area metrics independently from native raster
|
|
78
|
+
* density.
|
|
79
|
+
*
|
|
80
|
+
* Crop factor uses the diagonal ratio to a 36 × 24 mm reference frame.
|
|
81
|
+
* Digital/output crops are not part of this physical imaging-area quantity.
|
|
82
|
+
*
|
|
83
|
+
* @param imagingArea Physical photosensitive imaging area.
|
|
84
|
+
* @returns Physical diagonal, aspect ratio, and diagonal 35 mm crop factor.
|
|
85
|
+
*/
|
|
86
|
+
export declare function calculateImagingAreaMetrics(imagingArea: SensorImagingArea): CalculationResult<ImagingAreaMetrics>;
|
|
87
|
+
/**
|
|
88
|
+
* Calculates physical imaging-area, native-raster, and geometric sampling
|
|
89
|
+
* metrics without coupling sensor size to resolution.
|
|
90
|
+
*
|
|
91
|
+
* The supplied raster is assumed to span the supplied imaging area. Derived
|
|
92
|
+
* sampling pitch is geometric sample spacing only and must not be interpreted
|
|
93
|
+
* as photosite fill factor or photon-collection area.
|
|
94
|
+
*
|
|
95
|
+
* @param input Physical imaging area and native effective image raster.
|
|
96
|
+
* @returns Derived imaging-area, raster, and sampling metrics.
|
|
97
|
+
*/
|
|
98
|
+
export declare function calculateSensorGeometryMetrics(input: CalculateSensorGeometryMetricsInput): CalculationResult<SensorGeometryMetrics>;
|
|
99
|
+
//# sourceMappingURL=sensor-geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensor-geometry.d.ts","sourceRoot":"","sources":["../../src/sensor/sensor-geometry.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAcvC;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mCAAmC;IAClD,WAAW,EAAE,iBAAiB,CAAC;IAC/B,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE;QACZ,uDAAuD;QACvD,iBAAiB,EAAE,MAAM,CAAC;QAC1B,uDAAuD;QACvD,UAAU,EAAE,MAAM,CAAC;QACnB,2DAA2D;QAC3D,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE;QACR;;;;WAIG;QACH,iBAAiB,EAAE,MAAM,CAAC;QAC1B;;;;WAIG;QACH,iBAAiB,EAAE,MAAM,CAAC;QAC1B,oEAAoE;QACpE,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,iBAAiB,GAC7B,iBAAiB,CAAC,kBAAkB,CAAC,CAmBvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,mCAAmC,GACzC,iBAAiB,CAAC,qBAAqB,CAAC,CAmD1C"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import { calculatedResult } from "../core/calculation-result.js";
|
|
3
|
+
import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
|
|
4
|
+
const REFERENCE_35MM_WIDTH_MM = 36;
|
|
5
|
+
const REFERENCE_35MM_HEIGHT_MM = 24;
|
|
6
|
+
const REFERENCE_35MM_DIAGONAL_MM = Math.hypot(REFERENCE_35MM_WIDTH_MM, REFERENCE_35MM_HEIGHT_MM);
|
|
7
|
+
/**
|
|
8
|
+
* Calculates physical imaging-area metrics independently from native raster
|
|
9
|
+
* density.
|
|
10
|
+
*
|
|
11
|
+
* Crop factor uses the diagonal ratio to a 36 × 24 mm reference frame.
|
|
12
|
+
* Digital/output crops are not part of this physical imaging-area quantity.
|
|
13
|
+
*
|
|
14
|
+
* @param imagingArea Physical photosensitive imaging area.
|
|
15
|
+
* @returns Physical diagonal, aspect ratio, and diagonal 35 mm crop factor.
|
|
16
|
+
*/
|
|
17
|
+
export function calculateImagingAreaMetrics(imagingArea) {
|
|
18
|
+
requirePositiveFinite("imagingArea.widthMm", imagingArea.widthMm);
|
|
19
|
+
requirePositiveFinite("imagingArea.heightMm", imagingArea.heightMm);
|
|
20
|
+
const diagonalMm = Math.hypot(imagingArea.widthMm, imagingArea.heightMm);
|
|
21
|
+
return calculatedResult({
|
|
22
|
+
diagonalMm,
|
|
23
|
+
aspectRatio: imagingArea.widthMm / imagingArea.heightMm,
|
|
24
|
+
cropFactor35Mm: REFERENCE_35MM_DIAGONAL_MM / diagonalMm
|
|
25
|
+
}, "sensor-imaging-area", "1.0.0", [
|
|
26
|
+
"35 mm reference frame is 36 × 24 mm and crop factor is diagonal-based.",
|
|
27
|
+
"Digital/output cropping is excluded from physical imaging-area crop factor."
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Calculates physical imaging-area, native-raster, and geometric sampling
|
|
32
|
+
* metrics without coupling sensor size to resolution.
|
|
33
|
+
*
|
|
34
|
+
* The supplied raster is assumed to span the supplied imaging area. Derived
|
|
35
|
+
* sampling pitch is geometric sample spacing only and must not be interpreted
|
|
36
|
+
* as photosite fill factor or photon-collection area.
|
|
37
|
+
*
|
|
38
|
+
* @param input Physical imaging area and native effective image raster.
|
|
39
|
+
* @returns Derived imaging-area, raster, and sampling metrics.
|
|
40
|
+
*/
|
|
41
|
+
export function calculateSensorGeometryMetrics(input) {
|
|
42
|
+
requirePositiveFinite("imagingArea.widthMm", input.imagingArea.widthMm);
|
|
43
|
+
requirePositiveFinite("imagingArea.heightMm", input.imagingArea.heightMm);
|
|
44
|
+
requirePositiveInteger("nativeRaster.pixelWidth", input.nativeRaster.pixelWidth);
|
|
45
|
+
requirePositiveInteger("nativeRaster.pixelHeight", input.nativeRaster.pixelHeight);
|
|
46
|
+
const totalImageSamples = input.nativeRaster.pixelWidth * input.nativeRaster.pixelHeight;
|
|
47
|
+
if (!Number.isSafeInteger(totalImageSamples)) {
|
|
48
|
+
throw new InvalidScientificInputError("nativeRaster total image-sample count must be a positive safe integer.");
|
|
49
|
+
}
|
|
50
|
+
const imagingAreaMetrics = calculateImagingAreaMetrics(input.imagingArea).value;
|
|
51
|
+
const pitchXMicrometers = (input.imagingArea.widthMm / input.nativeRaster.pixelWidth) * 1000;
|
|
52
|
+
const pitchYMicrometers = (input.imagingArea.heightMm / input.nativeRaster.pixelHeight) * 1000;
|
|
53
|
+
return calculatedResult({
|
|
54
|
+
imagingArea: imagingAreaMetrics,
|
|
55
|
+
nativeRaster: {
|
|
56
|
+
totalImageSamples,
|
|
57
|
+
megapixels: totalImageSamples / 1_000_000,
|
|
58
|
+
aspectRatio: input.nativeRaster.pixelWidth / input.nativeRaster.pixelHeight
|
|
59
|
+
},
|
|
60
|
+
sampling: {
|
|
61
|
+
pitchXMicrometers,
|
|
62
|
+
pitchYMicrometers,
|
|
63
|
+
pitchAspectRatio: pitchXMicrometers / pitchYMicrometers
|
|
64
|
+
}
|
|
65
|
+
}, "sensor-imaging-area-native-raster", "1.0.0", [
|
|
66
|
+
"35 mm reference frame is 36 × 24 mm and crop factor is diagonal-based.",
|
|
67
|
+
"The native effective image raster is assumed to span the supplied physical imaging area.",
|
|
68
|
+
"Derived sampling pitch is geometric image-sample spacing, not physical photodiode active area or fill factor."
|
|
69
|
+
]);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=sensor-geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensor-geometry.js","sourceRoot":"","sources":["../../src/sensor/sensor-geometry.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,0BAA0B,GAAG,IAAI,CAAC,KAAK,CAC3C,uBAAuB,EACvB,wBAAwB,CACzB,CAAC;AAkFF;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CACzC,WAA8B;IAE9B,qBAAqB,CAAC,qBAAqB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAClE,qBAAqB,CAAC,sBAAsB,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEzE,OAAO,gBAAgB,CACrB;QACE,UAAU;QACV,WAAW,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,QAAQ;QACvD,cAAc,EAAE,0BAA0B,GAAG,UAAU;KACxD,EACD,qBAAqB,EACrB,OAAO,EACP;QACE,wEAAwE;QACxE,6EAA6E;KAC9E,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAC5C,KAA0C;IAE1C,qBAAqB,CAAC,qBAAqB,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACxE,qBAAqB,CAAC,sBAAsB,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1E,sBAAsB,CACpB,yBAAyB,EACzB,KAAK,CAAC,YAAY,CAAC,UAAU,CAC9B,CAAC;IACF,sBAAsB,CACpB,0BAA0B,EAC1B,KAAK,CAAC,YAAY,CAAC,WAAW,CAC/B,CAAC;IAEF,MAAM,iBAAiB,GACrB,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,2BAA2B,CACnC,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,kBAAkB,GAAG,2BAA2B,CACpD,KAAK,CAAC,WAAW,CAClB,CAAC,KAAK,CAAC;IACR,MAAM,iBAAiB,GACrB,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACrE,MAAM,iBAAiB,GACrB,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAEvE,OAAO,gBAAgB,CACrB;QACE,WAAW,EAAE,kBAAkB;QAC/B,YAAY,EAAE;YACZ,iBAAiB;YACjB,UAAU,EAAE,iBAAiB,GAAG,SAAS;YACzC,WAAW,EACT,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW;SACjE;QACD,QAAQ,EAAE;YACR,iBAAiB;YACjB,iBAAiB;YACjB,gBAAgB,EAAE,iBAAiB,GAAG,iBAAiB;SACxD;KACF,EACD,mCAAmC,EACnC,OAAO,EACP;QACE,wEAAwE;QACxE,0FAA0F;QAC1F,+GAA+G;KAChH,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { CalculationProvenance } from "../core/calculation-result.js";
|
|
2
|
+
import { type ActiveCaptureFieldOfView, type CaptureOrientation, type OutputFieldOfView, type PhysicalBoundsFromOpticalAxisMm, type RasterRect, type RasterVector, type ResolvedCaptureGeometry } from "../output/capture-geometry.js";
|
|
3
|
+
import { type RasterDimensions, type SensorGeometryMetrics, type SensorImagingArea } from "../sensor/sensor-geometry.js";
|
|
2
4
|
import type { Vector3 } from "../schema/scene.js";
|
|
5
|
+
export declare const POC_SIMULATION_API_VERSION: "0.20.0";
|
|
3
6
|
export interface PocSimulationRequest {
|
|
4
7
|
sensor: {
|
|
5
8
|
widthMm: number;
|
|
@@ -25,8 +28,24 @@ export interface PocSimulationRequest {
|
|
|
25
28
|
};
|
|
26
29
|
};
|
|
27
30
|
crop: {
|
|
31
|
+
/**
|
|
32
|
+
* Legacy centered same-aspect crop factor.
|
|
33
|
+
*
|
|
34
|
+
* When capture geometry is supplied this must remain 1. New callers should
|
|
35
|
+
* use capture.activeCaptureRect/outputCropRect instead of stacking two
|
|
36
|
+
* independent crop models.
|
|
37
|
+
*/
|
|
28
38
|
factor: number;
|
|
29
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* Opt-in staged capture geometry. Omit for exact legacy POC behavior.
|
|
42
|
+
*/
|
|
43
|
+
capture?: {
|
|
44
|
+
orientation: CaptureOrientation;
|
|
45
|
+
activeCaptureRect?: RasterRect;
|
|
46
|
+
outputCropRect?: RasterRect;
|
|
47
|
+
outputRaster?: RasterDimensions;
|
|
48
|
+
};
|
|
30
49
|
diffraction: {
|
|
31
50
|
wavelengthNm: number;
|
|
32
51
|
};
|
|
@@ -77,8 +96,20 @@ interface FieldOfViewSummary {
|
|
|
77
96
|
verticalDegrees: number;
|
|
78
97
|
diagonalDegrees: number;
|
|
79
98
|
}
|
|
99
|
+
interface CaptureSubjectFraming {
|
|
100
|
+
additionalCropFactor: number;
|
|
101
|
+
raster: RasterDimensions;
|
|
102
|
+
megapixels: number;
|
|
103
|
+
subjectHeightFraction: number;
|
|
104
|
+
subjectClipped: boolean;
|
|
105
|
+
additionalCropApplied: boolean;
|
|
106
|
+
retainedImagingArea: SensorImagingArea;
|
|
107
|
+
physicalBoundsFromOpticalAxisMm: PhysicalBoundsFromOpticalAxisMm;
|
|
108
|
+
effectiveFieldOfView: FieldOfViewSummary;
|
|
109
|
+
basis: "centered-output-framing";
|
|
110
|
+
}
|
|
80
111
|
export interface PocSimulationResponse {
|
|
81
|
-
apiVersion:
|
|
112
|
+
apiVersion: typeof POC_SIMULATION_API_VERSION;
|
|
82
113
|
projection: {
|
|
83
114
|
kind: "focus-aware-thin-lens";
|
|
84
115
|
focusDistanceM: number;
|
|
@@ -95,7 +126,66 @@ export interface PocSimulationResponse {
|
|
|
95
126
|
diagonalDegrees: number;
|
|
96
127
|
};
|
|
97
128
|
sensor: {
|
|
129
|
+
/** Physical imaging-area/native-raster metrics from the shared sensor foundation. */
|
|
130
|
+
geometry: SensorGeometryMetrics;
|
|
131
|
+
/**
|
|
132
|
+
* Backwards-compatible representative pitch used by the current composed
|
|
133
|
+
* POC calculations. This remains the horizontal pitch.
|
|
134
|
+
*/
|
|
98
135
|
pixelPitchMicrometers: number;
|
|
136
|
+
pitchXMicrometers: number;
|
|
137
|
+
pitchYMicrometers: number;
|
|
138
|
+
pitchAxisRelativeDifference: number;
|
|
139
|
+
};
|
|
140
|
+
capture?: {
|
|
141
|
+
geometry: ResolvedCaptureGeometry;
|
|
142
|
+
activeFieldOfView: ActiveCaptureFieldOfView;
|
|
143
|
+
outputFieldOfView: OutputFieldOfView;
|
|
144
|
+
focalLength: {
|
|
145
|
+
actualFocalLengthMm: number;
|
|
146
|
+
equivalentFocalLength35Mm: number;
|
|
147
|
+
cropFactor35Mm: number;
|
|
148
|
+
activeImagingAreaDiagonalMm: number;
|
|
149
|
+
basis: "diagonal";
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Axis-aware pixel-domain mapping from oriented active-capture samples to
|
|
153
|
+
* the declared output raster. Subject framing is a later crop, not another
|
|
154
|
+
* resampling step.
|
|
155
|
+
*/
|
|
156
|
+
outputSamplingScale: {
|
|
157
|
+
x: number;
|
|
158
|
+
y: number;
|
|
159
|
+
axisRelativeDifference: number;
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* Additional post-output subject framing. This does not mutate physical
|
|
163
|
+
* sensor identity, active capture, or active-capture focal equivalence.
|
|
164
|
+
*/
|
|
165
|
+
subjectFraming?: CaptureSubjectFraming;
|
|
166
|
+
motion: {
|
|
167
|
+
nativeRasterDeltaPixels: RasterVector;
|
|
168
|
+
orientedCaptureDeltaPixels: RasterVector;
|
|
169
|
+
outputDeltaPixels: RasterVector;
|
|
170
|
+
};
|
|
171
|
+
motionSamples?: readonly {
|
|
172
|
+
id: string;
|
|
173
|
+
nativeRasterDeltaPixels: RasterVector;
|
|
174
|
+
orientedCaptureDeltaPixels: RasterVector;
|
|
175
|
+
outputDeltaPixels: RasterVector;
|
|
176
|
+
}[];
|
|
177
|
+
cameraShake?: {
|
|
178
|
+
unstabilized: {
|
|
179
|
+
nativeRasterDeltaPixels: RasterVector;
|
|
180
|
+
orientedCaptureDeltaPixels: RasterVector;
|
|
181
|
+
outputDeltaPixels: RasterVector;
|
|
182
|
+
};
|
|
183
|
+
stabilized: {
|
|
184
|
+
nativeRasterDeltaPixels: RasterVector;
|
|
185
|
+
orientedCaptureDeltaPixels: RasterVector;
|
|
186
|
+
outputDeltaPixels: RasterVector;
|
|
187
|
+
};
|
|
188
|
+
};
|
|
99
189
|
};
|
|
100
190
|
crop: {
|
|
101
191
|
cropFactor: number;
|
|
@@ -112,6 +202,8 @@ export interface PocSimulationResponse {
|
|
|
112
202
|
source: "equivalent-viewing-approximation";
|
|
113
203
|
circleOfConfusionMm: number;
|
|
114
204
|
scaleFactor: number;
|
|
205
|
+
targetBasis: "full-sensor" | "final-retained-output";
|
|
206
|
+
targetImagingArea: SensorImagingArea;
|
|
115
207
|
provenance: {
|
|
116
208
|
kind: "approximation";
|
|
117
209
|
model: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poc-simulation.d.ts","sourceRoot":"","sources":["../../src/simulation/poc-simulation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"poc-simulation.d.ts","sourceRoot":"","sources":["../../src/simulation/poc-simulation.ts"],"names":[],"mappings":"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"}
|