@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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
import {
|
|
2
|
+
import { calculateEquivalentFocalLength35Mm } from "../camera/equivalent-focal-length.js";
|
|
3
|
+
import { calculateFieldOfView, calculateFieldOfViewBounds } from "../camera/field-of-view.js";
|
|
3
4
|
import { calculateProjectedObjectSize } from "../camera/projected-object-size.js";
|
|
4
5
|
import { InvalidScientificInputError, requirePositiveFinite } from "../core/validation.js";
|
|
5
6
|
import { calculateExposureValue100 } from "../exposure/exposure.js";
|
|
@@ -9,10 +10,14 @@ import { estimateEquivalentViewingCircleOfConfusion } from "../optics/circle-of-
|
|
|
9
10
|
import { calculateAiryDisk } from "../optics/diffraction.js";
|
|
10
11
|
import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
|
|
11
12
|
import { calculateDefocusCircle, calculateDepthOfField } from "../optics/depth-of-field.js";
|
|
13
|
+
import { calculateActiveCaptureFieldOfView, calculateOutputFieldOfView, resolveCaptureGeometry, transformNativeRasterVectorToOriented } from "../output/capture-geometry.js";
|
|
12
14
|
import { calculateCenteredCrop } from "../output/crop.js";
|
|
13
15
|
import { calculateSubjectFramingCrop } from "../output/subject-framing-crop.js";
|
|
14
16
|
import { calculatePixelPitch } from "../sensor/pixel-pitch.js";
|
|
17
|
+
import { calculateSensorGeometryMetrics } from "../sensor/sensor-geometry.js";
|
|
15
18
|
import { estimateCameraShakeBlur } from "../stabilization/camera-shake.js";
|
|
19
|
+
export const POC_SIMULATION_API_VERSION = "0.20.0";
|
|
20
|
+
const POC_MAX_PITCH_AXIS_RELATIVE_DIFFERENCE = 0.01;
|
|
16
21
|
function calculateCroppedFieldOfView(sensorWidthMm, sensorHeightMm, focalLengthMm, focusDistanceM, cropFactor) {
|
|
17
22
|
const diagonalMm = Math.hypot(sensorWidthMm, sensorHeightMm);
|
|
18
23
|
return {
|
|
@@ -49,6 +54,80 @@ function requireUniqueSampleIds(label, samples) {
|
|
|
49
54
|
seen.add(normalizedId);
|
|
50
55
|
}
|
|
51
56
|
}
|
|
57
|
+
function centeredPhysicalCropBounds(bounds, retainedFractionX, retainedFractionY) {
|
|
58
|
+
const centerX = (bounds.left + bounds.right) / 2;
|
|
59
|
+
const centerY = (bounds.top + bounds.bottom) / 2;
|
|
60
|
+
const halfWidth = ((bounds.right - bounds.left) * retainedFractionX) / 2;
|
|
61
|
+
const halfHeight = ((bounds.bottom - bounds.top) * retainedFractionY) / 2;
|
|
62
|
+
return {
|
|
63
|
+
left: centerX - halfWidth,
|
|
64
|
+
right: centerX + halfWidth,
|
|
65
|
+
top: centerY - halfHeight,
|
|
66
|
+
bottom: centerY + halfHeight
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function calculateFieldOfViewForPhysicalBounds(bounds, focalLengthMm, focusDistanceM) {
|
|
70
|
+
const horizontal = calculateFieldOfViewBounds({
|
|
71
|
+
focalLengthMm,
|
|
72
|
+
minimumSensorCoordinateMm: bounds.left,
|
|
73
|
+
maximumSensorCoordinateMm: bounds.right,
|
|
74
|
+
focusDistanceM
|
|
75
|
+
}).value;
|
|
76
|
+
const vertical = calculateFieldOfViewBounds({
|
|
77
|
+
focalLengthMm,
|
|
78
|
+
minimumSensorCoordinateMm: bounds.top,
|
|
79
|
+
maximumSensorCoordinateMm: bounds.bottom,
|
|
80
|
+
focusDistanceM
|
|
81
|
+
}).value;
|
|
82
|
+
const projectionDistanceMm = horizontal.projectionDistanceMm;
|
|
83
|
+
const corners = {
|
|
84
|
+
topLeft: { x: bounds.left, y: bounds.top },
|
|
85
|
+
topRight: { x: bounds.right, y: bounds.top },
|
|
86
|
+
bottomRight: { x: bounds.right, y: bounds.bottom },
|
|
87
|
+
bottomLeft: { x: bounds.left, y: bounds.bottom }
|
|
88
|
+
};
|
|
89
|
+
const angleBetween = (first, second) => {
|
|
90
|
+
const firstLength = Math.hypot(first.x, first.y, projectionDistanceMm);
|
|
91
|
+
const secondLength = Math.hypot(second.x, second.y, projectionDistanceMm);
|
|
92
|
+
const dot = first.x * second.x +
|
|
93
|
+
first.y * second.y +
|
|
94
|
+
projectionDistanceMm * projectionDistanceMm;
|
|
95
|
+
const cosine = Math.max(-1, Math.min(1, dot / (firstLength * secondLength)));
|
|
96
|
+
return (Math.acos(cosine) * 180) / Math.PI;
|
|
97
|
+
};
|
|
98
|
+
return {
|
|
99
|
+
horizontalDegrees: horizontal.degrees,
|
|
100
|
+
verticalDegrees: vertical.degrees,
|
|
101
|
+
diagonalDegrees: Math.max(angleBetween(corners.topLeft, corners.bottomRight), angleBetween(corners.topRight, corners.bottomLeft))
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function isPortraitOrientation(orientation) {
|
|
105
|
+
return (orientation === "portrait-clockwise" ||
|
|
106
|
+
orientation === "portrait-counter-clockwise");
|
|
107
|
+
}
|
|
108
|
+
function resolveCaptureVector(legacyImagePlaneVector, orientation, geometry) {
|
|
109
|
+
// Legacy projected-motion/camera-shake components use +X right and +Y up.
|
|
110
|
+
// Capture raster coordinates use +X right and +Y down. Preserve the legacy
|
|
111
|
+
// fields unchanged and convert explicitly before applying physical rotation.
|
|
112
|
+
const nativeRasterDeltaPixels = {
|
|
113
|
+
x: legacyImagePlaneVector.x,
|
|
114
|
+
y: -legacyImagePlaneVector.y
|
|
115
|
+
};
|
|
116
|
+
const orientedCaptureDeltaPixels = transformNativeRasterVectorToOriented({
|
|
117
|
+
vector: nativeRasterDeltaPixels,
|
|
118
|
+
orientation
|
|
119
|
+
});
|
|
120
|
+
const scaleX = geometry.output.orientedCaptureToOutputScale.x;
|
|
121
|
+
const scaleY = geometry.output.orientedCaptureToOutputScale.y;
|
|
122
|
+
return {
|
|
123
|
+
nativeRasterDeltaPixels,
|
|
124
|
+
orientedCaptureDeltaPixels,
|
|
125
|
+
outputDeltaPixels: {
|
|
126
|
+
x: orientedCaptureDeltaPixels.x * scaleX,
|
|
127
|
+
y: orientedCaptureDeltaPixels.y * scaleY
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
52
131
|
/**
|
|
53
132
|
* Composes the validated POC calculations into a single renderer/agent-facing
|
|
54
133
|
* response without introducing any new photographic model.
|
|
@@ -59,6 +138,48 @@ function requireUniqueSampleIds(label, samples) {
|
|
|
59
138
|
export function simulatePocCamera(request) {
|
|
60
139
|
requirePositiveFinite("sensor.widthMm", request.sensor.widthMm);
|
|
61
140
|
requirePositiveFinite("sensor.heightMm", request.sensor.heightMm);
|
|
141
|
+
const sensorGeometry = calculateSensorGeometryMetrics({
|
|
142
|
+
imagingArea: {
|
|
143
|
+
widthMm: request.sensor.widthMm,
|
|
144
|
+
heightMm: request.sensor.heightMm
|
|
145
|
+
},
|
|
146
|
+
nativeRaster: {
|
|
147
|
+
pixelWidth: request.sensor.pixelWidth,
|
|
148
|
+
pixelHeight: request.sensor.pixelHeight
|
|
149
|
+
}
|
|
150
|
+
}).value;
|
|
151
|
+
const pitchXMicrometers = sensorGeometry.sampling.pitchXMicrometers;
|
|
152
|
+
const pitchYMicrometers = sensorGeometry.sampling.pitchYMicrometers;
|
|
153
|
+
const pitchAxisRelativeDifference = Math.abs(pitchXMicrometers - pitchYMicrometers) /
|
|
154
|
+
((pitchXMicrometers + pitchYMicrometers) / 2);
|
|
155
|
+
if (pitchAxisRelativeDifference >
|
|
156
|
+
POC_MAX_PITCH_AXIS_RELATIVE_DIFFERENCE) {
|
|
157
|
+
throw new InvalidScientificInputError("The composed POC currently requires approximately square geometric sampling; X/Y pitch differ by more than 1%. Use lower-level axis-aware engine primitives until the POC contract supports separate X/Y sampling.");
|
|
158
|
+
}
|
|
159
|
+
const capture = request.capture;
|
|
160
|
+
const subjectCropRequest = request.subjectCrop;
|
|
161
|
+
const captureGeometry = capture === undefined
|
|
162
|
+
? undefined
|
|
163
|
+
: resolveCaptureGeometry({
|
|
164
|
+
imagingArea: {
|
|
165
|
+
widthMm: request.sensor.widthMm,
|
|
166
|
+
heightMm: request.sensor.heightMm
|
|
167
|
+
},
|
|
168
|
+
nativeRaster: {
|
|
169
|
+
pixelWidth: request.sensor.pixelWidth,
|
|
170
|
+
pixelHeight: request.sensor.pixelHeight
|
|
171
|
+
},
|
|
172
|
+
orientation: capture.orientation,
|
|
173
|
+
...(capture.activeCaptureRect === undefined
|
|
174
|
+
? {}
|
|
175
|
+
: { activeCaptureRect: capture.activeCaptureRect }),
|
|
176
|
+
...(capture.outputCropRect === undefined
|
|
177
|
+
? {}
|
|
178
|
+
: { outputCropRect: capture.outputCropRect }),
|
|
179
|
+
...(capture.outputRaster === undefined
|
|
180
|
+
? {}
|
|
181
|
+
: { outputRaster: capture.outputRaster })
|
|
182
|
+
}).value;
|
|
62
183
|
requirePositiveFinite("lens.focalLengthMm", request.lens.focalLengthMm);
|
|
63
184
|
requirePositiveFinite("lens.aperture", request.lens.aperture);
|
|
64
185
|
requirePositiveFinite("exposure.shutterSeconds", request.exposure.shutterSeconds);
|
|
@@ -69,20 +190,10 @@ export function simulatePocCamera(request) {
|
|
|
69
190
|
if (hasExplicitCircleOfConfusion === hasEquivalentViewingCriterion) {
|
|
70
191
|
throw new InvalidScientificInputError("Provide exactly one focus circle-of-confusion criterion.");
|
|
71
192
|
}
|
|
72
|
-
const equivalentViewingCircleOfConfusion = request.focus.equivalentViewingCircleOfConfusion === undefined
|
|
73
|
-
? undefined
|
|
74
|
-
: estimateEquivalentViewingCircleOfConfusion({
|
|
75
|
-
sensorWidthMm: request.sensor.widthMm,
|
|
76
|
-
sensorHeightMm: request.sensor.heightMm,
|
|
77
|
-
...request.focus.equivalentViewingCircleOfConfusion
|
|
78
|
-
});
|
|
79
|
-
const circleOfConfusionMm = equivalentViewingCircleOfConfusion?.value.circleOfConfusionMm ??
|
|
80
|
-
request.focus.circleOfConfusionMm;
|
|
81
|
-
if (circleOfConfusionMm === undefined) {
|
|
82
|
-
throw new InvalidScientificInputError("A focus circle-of-confusion criterion is required.");
|
|
83
|
-
}
|
|
84
|
-
requirePositiveFinite("focus.circleOfConfusionMm", circleOfConfusionMm);
|
|
85
193
|
requirePositiveFinite("crop.factor", request.crop.factor);
|
|
194
|
+
if (capture !== undefined && request.crop.factor !== 1) {
|
|
195
|
+
throw new InvalidScientificInputError("capture geometry cannot be combined with legacy crop.factor other than 1.");
|
|
196
|
+
}
|
|
86
197
|
requirePositiveFinite("diffraction.wavelengthNm", request.diffraction.wavelengthNm);
|
|
87
198
|
requireUniqueSampleIds("defocusSamples", request.defocusSamples);
|
|
88
199
|
requireUniqueSampleIds("samplingSamples", request.samplingSamples);
|
|
@@ -107,6 +218,51 @@ export function simulatePocCamera(request) {
|
|
|
107
218
|
sensorDimensionMm: diagonalMm,
|
|
108
219
|
focusDistanceM: request.focus.focusDistanceM
|
|
109
220
|
});
|
|
221
|
+
const activeCaptureFieldOfView = captureGeometry === undefined || capture === undefined
|
|
222
|
+
? undefined
|
|
223
|
+
: calculateActiveCaptureFieldOfView({
|
|
224
|
+
imagingArea: {
|
|
225
|
+
widthMm: request.sensor.widthMm,
|
|
226
|
+
heightMm: request.sensor.heightMm
|
|
227
|
+
},
|
|
228
|
+
nativeRaster: {
|
|
229
|
+
pixelWidth: request.sensor.pixelWidth,
|
|
230
|
+
pixelHeight: request.sensor.pixelHeight
|
|
231
|
+
},
|
|
232
|
+
orientation: capture.orientation,
|
|
233
|
+
...(capture.activeCaptureRect === undefined
|
|
234
|
+
? {}
|
|
235
|
+
: { activeCaptureRect: capture.activeCaptureRect }),
|
|
236
|
+
focalLengthMm: request.lens.focalLengthMm,
|
|
237
|
+
focusDistanceM: request.focus.focusDistanceM
|
|
238
|
+
}).value;
|
|
239
|
+
const equivalentFocalLength = captureGeometry === undefined
|
|
240
|
+
? undefined
|
|
241
|
+
: calculateEquivalentFocalLength35Mm({
|
|
242
|
+
focalLengthMm: request.lens.focalLengthMm,
|
|
243
|
+
activeImagingArea: captureGeometry.activeCapture.imagingArea
|
|
244
|
+
}).value;
|
|
245
|
+
const outputFieldOfView = captureGeometry === undefined || capture === undefined
|
|
246
|
+
? undefined
|
|
247
|
+
: calculateOutputFieldOfView({
|
|
248
|
+
imagingArea: {
|
|
249
|
+
widthMm: request.sensor.widthMm,
|
|
250
|
+
heightMm: request.sensor.heightMm
|
|
251
|
+
},
|
|
252
|
+
nativeRaster: {
|
|
253
|
+
pixelWidth: request.sensor.pixelWidth,
|
|
254
|
+
pixelHeight: request.sensor.pixelHeight
|
|
255
|
+
},
|
|
256
|
+
orientation: capture.orientation,
|
|
257
|
+
...(capture.activeCaptureRect === undefined
|
|
258
|
+
? {}
|
|
259
|
+
: { activeCaptureRect: capture.activeCaptureRect }),
|
|
260
|
+
...(capture.outputCropRect === undefined
|
|
261
|
+
? {}
|
|
262
|
+
: { outputCropRect: capture.outputCropRect }),
|
|
263
|
+
focalLengthMm: request.lens.focalLengthMm,
|
|
264
|
+
focusDistanceM: request.focus.focusDistanceM
|
|
265
|
+
}).value;
|
|
110
266
|
const pixelPitch = calculatePixelPitch({
|
|
111
267
|
sensorWidthMm: request.sensor.widthMm,
|
|
112
268
|
pixelWidth: request.sensor.pixelWidth
|
|
@@ -117,12 +273,6 @@ export function simulatePocCamera(request) {
|
|
|
117
273
|
cropFactor: request.crop.factor
|
|
118
274
|
});
|
|
119
275
|
const cropFieldOfView = calculateCroppedFieldOfView(request.sensor.widthMm, request.sensor.heightMm, request.lens.focalLengthMm, request.focus.focusDistanceM, request.crop.factor);
|
|
120
|
-
const depthOfField = calculateDepthOfField({
|
|
121
|
-
focalLengthMm: request.lens.focalLengthMm,
|
|
122
|
-
aperture: request.lens.aperture,
|
|
123
|
-
focusDistanceM: request.focus.focusDistanceM,
|
|
124
|
-
circleOfConfusionMm
|
|
125
|
-
});
|
|
126
276
|
const diffraction = calculateAiryDisk({
|
|
127
277
|
aperture: request.lens.aperture,
|
|
128
278
|
wavelengthNm: request.diffraction.wavelengthNm
|
|
@@ -149,6 +299,70 @@ export function simulatePocCamera(request) {
|
|
|
149
299
|
focusDistanceM: request.focus.focusDistanceM,
|
|
150
300
|
pixelPitchMicrometers: pixelPitch.value.micrometers
|
|
151
301
|
}).value;
|
|
302
|
+
const captureSubjectFraming = captureGeometry === undefined ||
|
|
303
|
+
capture === undefined ||
|
|
304
|
+
subjectCropRequest === undefined ||
|
|
305
|
+
subjectSampling === undefined
|
|
306
|
+
? undefined
|
|
307
|
+
: (() => {
|
|
308
|
+
const orientedSubjectHeightPixels = isPortraitOrientation(capture.orientation)
|
|
309
|
+
? (subjectSampling.widthPixels ?? 0)
|
|
310
|
+
: (subjectSampling.heightPixels ?? 0);
|
|
311
|
+
const outputSubjectHeightPixels = orientedSubjectHeightPixels *
|
|
312
|
+
captureGeometry.output.orientedCaptureToOutputScale.y;
|
|
313
|
+
const framing = calculateSubjectFramingCrop({
|
|
314
|
+
pixelWidth: captureGeometry.output.raster.pixelWidth,
|
|
315
|
+
pixelHeight: captureGeometry.output.raster.pixelHeight,
|
|
316
|
+
subjectHeightPixels: outputSubjectHeightPixels,
|
|
317
|
+
targetSubjectHeightFraction: subjectCropRequest.targetSubjectHeightFraction
|
|
318
|
+
}).value;
|
|
319
|
+
const retainedBounds = centeredPhysicalCropBounds(captureGeometry.output.physicalBoundsFromOpticalAxisMm, framing.pixelWidth / captureGeometry.output.raster.pixelWidth, framing.pixelHeight / captureGeometry.output.raster.pixelHeight);
|
|
320
|
+
const retainedImagingArea = {
|
|
321
|
+
widthMm: retainedBounds.right - retainedBounds.left,
|
|
322
|
+
heightMm: retainedBounds.bottom - retainedBounds.top
|
|
323
|
+
};
|
|
324
|
+
return {
|
|
325
|
+
additionalCropFactor: framing.cropFactor,
|
|
326
|
+
raster: {
|
|
327
|
+
pixelWidth: framing.pixelWidth,
|
|
328
|
+
pixelHeight: framing.pixelHeight
|
|
329
|
+
},
|
|
330
|
+
megapixels: framing.megapixels,
|
|
331
|
+
subjectHeightFraction: framing.subjectHeightFraction,
|
|
332
|
+
subjectClipped: framing.subjectClipped,
|
|
333
|
+
additionalCropApplied: framing.cropped,
|
|
334
|
+
retainedImagingArea,
|
|
335
|
+
physicalBoundsFromOpticalAxisMm: retainedBounds,
|
|
336
|
+
effectiveFieldOfView: calculateFieldOfViewForPhysicalBounds(retainedBounds, request.lens.focalLengthMm, request.focus.focusDistanceM),
|
|
337
|
+
basis: "centered-output-framing"
|
|
338
|
+
};
|
|
339
|
+
})();
|
|
340
|
+
const equivalentViewingTargetArea = captureGeometry === undefined
|
|
341
|
+
? {
|
|
342
|
+
widthMm: request.sensor.widthMm,
|
|
343
|
+
heightMm: request.sensor.heightMm
|
|
344
|
+
}
|
|
345
|
+
: (captureSubjectFraming?.retainedImagingArea ??
|
|
346
|
+
captureGeometry.output.imagingArea);
|
|
347
|
+
const equivalentViewingCircleOfConfusion = request.focus.equivalentViewingCircleOfConfusion === undefined
|
|
348
|
+
? undefined
|
|
349
|
+
: estimateEquivalentViewingCircleOfConfusion({
|
|
350
|
+
sensorWidthMm: equivalentViewingTargetArea.widthMm,
|
|
351
|
+
sensorHeightMm: equivalentViewingTargetArea.heightMm,
|
|
352
|
+
...request.focus.equivalentViewingCircleOfConfusion
|
|
353
|
+
});
|
|
354
|
+
const circleOfConfusionMm = equivalentViewingCircleOfConfusion?.value.circleOfConfusionMm ??
|
|
355
|
+
request.focus.circleOfConfusionMm;
|
|
356
|
+
if (circleOfConfusionMm === undefined) {
|
|
357
|
+
throw new InvalidScientificInputError("A focus circle-of-confusion criterion is required.");
|
|
358
|
+
}
|
|
359
|
+
requirePositiveFinite("focus.circleOfConfusionMm", circleOfConfusionMm);
|
|
360
|
+
const depthOfField = calculateDepthOfField({
|
|
361
|
+
focalLengthMm: request.lens.focalLengthMm,
|
|
362
|
+
aperture: request.lens.aperture,
|
|
363
|
+
focusDistanceM: request.focus.focusDistanceM,
|
|
364
|
+
circleOfConfusionMm
|
|
365
|
+
});
|
|
152
366
|
const samplingSamples = request.samplingSamples === undefined
|
|
153
367
|
? undefined
|
|
154
368
|
: request.samplingSamples.map((sample) => {
|
|
@@ -191,13 +405,15 @@ export function simulatePocCamera(request) {
|
|
|
191
405
|
(pixelPitch.value.micrometers / 1000)
|
|
192
406
|
};
|
|
193
407
|
});
|
|
194
|
-
const subjectCrop =
|
|
408
|
+
const subjectCrop = capture !== undefined ||
|
|
409
|
+
subjectCropRequest === undefined ||
|
|
410
|
+
subjectSampling === undefined
|
|
195
411
|
? undefined
|
|
196
412
|
: calculateSubjectFramingCrop({
|
|
197
413
|
pixelWidth: crop.value.pixelWidth,
|
|
198
414
|
pixelHeight: crop.value.pixelHeight,
|
|
199
415
|
subjectHeightPixels: subjectSampling.heightPixels ?? 0,
|
|
200
|
-
targetSubjectHeightFraction:
|
|
416
|
+
targetSubjectHeightFraction: subjectCropRequest.targetSubjectHeightFraction
|
|
201
417
|
}).value;
|
|
202
418
|
const totalSubjectCropFactor = subjectCrop === undefined
|
|
203
419
|
? undefined
|
|
@@ -281,8 +497,39 @@ export function simulatePocCamera(request) {
|
|
|
281
497
|
(pixelPitch.value.micrometers / 1000)
|
|
282
498
|
};
|
|
283
499
|
});
|
|
500
|
+
const captureMotion = captureGeometry === undefined || capture === undefined
|
|
501
|
+
? undefined
|
|
502
|
+
: resolveCaptureVector({
|
|
503
|
+
x: motion.value.deltaXMm / (pixelPitch.value.micrometers / 1000),
|
|
504
|
+
y: motion.value.deltaYMm / (pixelPitch.value.micrometers / 1000)
|
|
505
|
+
}, capture.orientation, captureGeometry);
|
|
506
|
+
const captureMotionSamples = captureGeometry === undefined ||
|
|
507
|
+
capture === undefined ||
|
|
508
|
+
motionSamples === undefined
|
|
509
|
+
? undefined
|
|
510
|
+
: motionSamples.map((sample) => ({
|
|
511
|
+
id: sample.id,
|
|
512
|
+
...resolveCaptureVector({
|
|
513
|
+
x: sample.deltaXPixels,
|
|
514
|
+
y: sample.deltaYPixels
|
|
515
|
+
}, capture.orientation, captureGeometry)
|
|
516
|
+
}));
|
|
517
|
+
const captureCameraShake = captureGeometry === undefined ||
|
|
518
|
+
capture === undefined ||
|
|
519
|
+
cameraShake === undefined
|
|
520
|
+
? undefined
|
|
521
|
+
: {
|
|
522
|
+
unstabilized: resolveCaptureVector({
|
|
523
|
+
x: cameraShake.value.unstabilized.deltaXPixels ?? 0,
|
|
524
|
+
y: cameraShake.value.unstabilized.deltaYPixels ?? 0
|
|
525
|
+
}, capture.orientation, captureGeometry),
|
|
526
|
+
stabilized: resolveCaptureVector({
|
|
527
|
+
x: cameraShake.value.stabilized.deltaXPixels ?? 0,
|
|
528
|
+
y: cameraShake.value.stabilized.deltaYPixels ?? 0
|
|
529
|
+
}, capture.orientation, captureGeometry)
|
|
530
|
+
};
|
|
284
531
|
return {
|
|
285
|
-
apiVersion:
|
|
532
|
+
apiVersion: POC_SIMULATION_API_VERSION,
|
|
286
533
|
projection: {
|
|
287
534
|
kind: "focus-aware-thin-lens",
|
|
288
535
|
focusDistanceM: request.focus.focusDistanceM,
|
|
@@ -296,8 +543,39 @@ export function simulatePocCamera(request) {
|
|
|
296
543
|
diagonalDegrees: diagonalFov.value.degrees
|
|
297
544
|
},
|
|
298
545
|
sensor: {
|
|
299
|
-
|
|
546
|
+
geometry: sensorGeometry,
|
|
547
|
+
pixelPitchMicrometers: pixelPitch.value.micrometers,
|
|
548
|
+
pitchXMicrometers,
|
|
549
|
+
pitchYMicrometers,
|
|
550
|
+
pitchAxisRelativeDifference
|
|
300
551
|
},
|
|
552
|
+
...(captureGeometry === undefined ||
|
|
553
|
+
activeCaptureFieldOfView === undefined ||
|
|
554
|
+
outputFieldOfView === undefined ||
|
|
555
|
+
equivalentFocalLength === undefined ||
|
|
556
|
+
captureMotion === undefined
|
|
557
|
+
? {}
|
|
558
|
+
: {
|
|
559
|
+
capture: {
|
|
560
|
+
geometry: captureGeometry,
|
|
561
|
+
activeFieldOfView: activeCaptureFieldOfView,
|
|
562
|
+
outputFieldOfView,
|
|
563
|
+
focalLength: equivalentFocalLength,
|
|
564
|
+
outputSamplingScale: {
|
|
565
|
+
...captureGeometry.output.orientedCaptureToOutputScale
|
|
566
|
+
},
|
|
567
|
+
...(captureSubjectFraming === undefined
|
|
568
|
+
? {}
|
|
569
|
+
: { subjectFraming: captureSubjectFraming }),
|
|
570
|
+
motion: captureMotion,
|
|
571
|
+
...(captureMotionSamples === undefined
|
|
572
|
+
? {}
|
|
573
|
+
: { motionSamples: captureMotionSamples }),
|
|
574
|
+
...(captureCameraShake === undefined
|
|
575
|
+
? {}
|
|
576
|
+
: { cameraShake: captureCameraShake })
|
|
577
|
+
}
|
|
578
|
+
}),
|
|
301
579
|
crop: {
|
|
302
580
|
cropFactor: request.crop.factor,
|
|
303
581
|
...crop.value,
|
|
@@ -312,6 +590,12 @@ export function simulatePocCamera(request) {
|
|
|
312
590
|
source: "equivalent-viewing-approximation",
|
|
313
591
|
circleOfConfusionMm,
|
|
314
592
|
scaleFactor: equivalentViewingCircleOfConfusion.value.scaleFactor,
|
|
593
|
+
targetBasis: captureGeometry === undefined
|
|
594
|
+
? "full-sensor"
|
|
595
|
+
: "final-retained-output",
|
|
596
|
+
targetImagingArea: {
|
|
597
|
+
...equivalentViewingTargetArea
|
|
598
|
+
},
|
|
315
599
|
provenance: {
|
|
316
600
|
kind: "approximation",
|
|
317
601
|
model: equivalentViewingCircleOfConfusion.provenance.model,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poc-simulation.js","sourceRoot":"","sources":["../../src/simulation/poc-simulation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"poc-simulation.js","sourceRoot":"","sources":["../../src/simulation/poc-simulation.ts"],"names":[],"mappings":"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"}
|
package/docs/API_STYLE.md
CHANGED
|
@@ -16,6 +16,9 @@ The open engine should feel like one coherent library.
|
|
|
16
16
|
- Public calculation functions and meaningful public contracts require concise JSDoc covering purpose, units, assumptions, and return meaning.
|
|
17
17
|
- Do not expose renderer, framework, or UI-specific types through calculation APIs.
|
|
18
18
|
- Public configuration interfaces that are expected to cross JSON/untrusted boundaries should have corresponding runtime parsers; TypeScript types alone are not a validation boundary.
|
|
19
|
+
- Runtime parsers must reject unknown enum/string values rather than falling through to a default interpretation.
|
|
20
|
+
- Prefer semantic role types over reusing a narrower type in the wrong stage. For example, use `RasterDimensions` for generic active/output rasters and reserve `NativeImageRaster` for the native sampling grid.
|
|
21
|
+
- When a physical quantity is axis-dependent, preserve the axes explicitly instead of collapsing to a scalar unless the model documents and validates that simplification.
|
|
19
22
|
- Preserve backward compatibility after 1.0 unless a documented major version changes the contract.
|
|
20
23
|
|
|
21
24
|
## Preferred shape
|
|
@@ -37,6 +40,30 @@ calculateDepthOfField({
|
|
|
37
40
|
|
|
38
41
|
Avoid one-off positional signatures and inconsistent abbreviations.
|
|
39
42
|
|
|
43
|
+
## Coordinate and staged-geometry contracts
|
|
44
|
+
|
|
45
|
+
Coordinate systems and image-formation stages are part of the API contract, not implementation details.
|
|
46
|
+
|
|
47
|
+
- Native raster coordinates use a top-left origin with +X right and +Y down.
|
|
48
|
+
- Raster rectangles use integer half-open extents.
|
|
49
|
+
- Physical camera rotation does not redefine native sensor coordinates; transform points, vectors, and rectangles explicitly.
|
|
50
|
+
- Physical active capture and later digital/output crop are distinct concepts and should have distinct fields/types.
|
|
51
|
+
- Off-center physical capture must preserve position relative to the optical axis rather than being silently recentered.
|
|
52
|
+
- Crossing between an oriented physical raster region (+Y down) and the pre-orientation optical image plane (+Y up) must use the exported coordinate bridge rather than ad-hoc axis swaps or sign changes.
|
|
53
|
+
- Output resizing/cropping must not imply geometric stretching without an explicit transform or pixel-aspect contract.
|
|
54
|
+
- Conventional 35 mm-equivalent focal length is derived from active physical capture geometry; it must not replace physical focal length or silently include later digital crop.
|
|
55
|
+
|
|
56
|
+
## Image-formation ownership contracts
|
|
57
|
+
|
|
58
|
+
Cross-cutting optical/sensor effects must use the public image-formation contract rather than defining one-off stage ordering in a renderer or downstream app.
|
|
59
|
+
|
|
60
|
+
- Treat `requiredUpstreamStages` as hard scientific dependencies.
|
|
61
|
+
- Treat `coupledStages` as shared scientific state, not an instruction to serialize independent filters.
|
|
62
|
+
- Coordinate spaces are part of the public semantic contract.
|
|
63
|
+
- Time-dependent models use seconds from exposure start as the authoritative temporal coordinate.
|
|
64
|
+
- A reserved stage does not imply an implemented capability.
|
|
65
|
+
- Preview and reference implementations may differ in bounded fidelity but must consume the same engine-owned parameters and semantics.
|
|
66
|
+
|
|
40
67
|
## Result metadata
|
|
41
68
|
|
|
42
69
|
Primitive public scientific calculation functions return `CalculationResult<T>`, which carries model provenance and optional quality metadata.
|
|
@@ -60,6 +87,13 @@ Do **not** automatically sum, average, add in quadrature, or otherwise collapse
|
|
|
60
87
|
|
|
61
88
|
## Versioning
|
|
62
89
|
|
|
63
|
-
|
|
90
|
+
Photivra has multiple independent version surfaces:
|
|
91
|
+
|
|
92
|
+
- npm/package version: distribution/release version;
|
|
93
|
+
- `ENGINE_API_VERSION`: root browser-safe engine/public-contract version;
|
|
94
|
+
- `POC_SIMULATION_API_VERSION`: composed `simulatePocCamera()` request/response contract;
|
|
95
|
+
- schema-specific versions such as sensor-architecture or radiometry-readiness schemas.
|
|
96
|
+
|
|
97
|
+
Do not reuse one version as a proxy for another. A change to a parser/schema does not necessarily require changing the POC contract, and a POC response change does not necessarily mean the npm package has been released.
|
|
64
98
|
|
|
65
|
-
Before 1.0, public APIs may evolve with documented changes. After 1.0, breaking public-contract changes require an appropriate major-version transition.
|
|
99
|
+
Before 1.0, public APIs may evolve with documented changes. Breaking or semantically meaningful contract changes must update the relevant version surface, tests, changelog, and migration/compatibility documentation. After 1.0, breaking public-contract changes require an appropriate major-version transition.
|