pub struct BrightfieldCircleInitializer {
pub parameters: PlanarArrayCalibrationParameters,
pub options: BrightfieldCircleOptions,
}Expand description
Bright-field detector and bounded physical planar-array fitter.
The detector uses circular pupil edges in centered intensity spectra only
to obtain a physical warm start. It then fits those observed centers to the
canonical PlanarLedArray mapping.
It does not reconstruct an object and does not produce independent source
shifts. Measurement-loss refinement remains the responsibility of
IlluminationCalibration.
§Assumptions
Selected frames must be single-source, strictly bright-field exposures of a thin coherent specimen with enough reference interference and texture to expose the circular pupil edge. The compiled pupil support must be circular and shift invariant. The initializer uses two deterministic streaming measurement passes and preserves pupil values, backgrounds, source powers, frame gains, sampling, and acquisition topology in its returned model.
§Example
use fpm_rs::{
Result,
experiment::{Illumination, Optics},
illumination_calibration::{
CalibrationParameterSpec, PlanarArrayCalibrationParameters,
},
illumination_initialization::BrightfieldCircleInitializer,
measurements::MeasurementStack,
model::ImagePlaneModel,
};
let lateral = CalibrationParameterSpec::new(-1e-3, 1e-3, 0.2e-3)
.finite_difference_step(1e-6);
let parameters = PlanarArrayCalibrationParameters::builder()
.translation_specs([Some(lateral.clone()), Some(lateral), None])
.build()?;
let initialized = BrightfieldCircleInitializer::new(parameters)
.initialize(measurements, optics, nominal, model)?;
let warm_model = initialized.initialized_model;§References
- J. Sun, Q. Chen, Y. Zhang, and C. Zuo, “Efficient positional misalignment correction method for Fourier ptychographic microscopy,” Biomedical Optics Express 7(4), 1336–1350 (2016). Sun et al. search independent apertures during reconstruction and subsequently regress a planar misalignment model; this initializer instead fits detected circle centers directly to the crate’s bounded physical geometry.
- R. Eckert, Z. F. Phillips, and L. Waller, “Efficient illumination angle self-calibration in Fourier ptychography,” Applied Optics 57(19), 5434–5442 (2018). This implementation adopts only the bright-field circular-edge initialization concept, not their iterative spectral-correlation stage or three-dimensional variants.
Fields§
§parameters: PlanarArrayCalibrationParametersGlobal physical parameters selected for fitting.
options: BrightfieldCircleOptionsDetector, rank, and fit controls.
Implementations§
Source§impl BrightfieldCircleInitializer
impl BrightfieldCircleInitializer
Sourcepub fn new(parameters: PlanarArrayCalibrationParameters) -> Self
pub fn new(parameters: PlanarArrayCalibrationParameters) -> Self
Creates an initializer for explicitly selected global physical parameters.
Sourcepub fn options(self, options: BrightfieldCircleOptions) -> Self
pub fn options(self, options: BrightfieldCircleOptions) -> Self
Replaces circle-detection and physical-fit options.
Sourcepub fn validate_for(&self, illumination: &Illumination) -> Result<()>
pub fn validate_for(&self, illumination: &Illumination) -> Result<()>
Validates this initializer for the nominal planar-array illumination.
Sourcepub fn initialize<M: MeasurementRead>(
&self,
measurements: &M,
optics: &Optics,
nominal_illumination: &Illumination,
model: &ImagePlaneModel,
) -> Result<PlanarArrayInitializationResult>
pub fn initialize<M: MeasurementRead>( &self, measurements: &M, optics: &Optics, nominal_illumination: &Illumination, model: &ImagePlaneModel, ) -> Result<PlanarArrayInitializationResult>
Detects bright-field circles and fits a physical warm start using the CPU backend.
Sourcepub fn initialize_with_backend<M: MeasurementRead>(
&self,
measurements: &M,
optics: &Optics,
nominal_illumination: &Illumination,
model: &ImagePlaneModel,
backend: Arc<dyn Backend>,
) -> Result<PlanarArrayInitializationResult>
pub fn initialize_with_backend<M: MeasurementRead>( &self, measurements: &M, optics: &Optics, nominal_illumination: &Illumination, model: &ImagePlaneModel, backend: Arc<dyn Backend>, ) -> Result<PlanarArrayInitializationResult>
Detects and fits using an explicit FFT backend.
Sourcepub fn initialize_with_callback<M: MeasurementRead>(
&self,
measurements: &M,
optics: &Optics,
nominal_illumination: &Illumination,
model: &ImagePlaneModel,
backend: Arc<dyn Backend>,
callback: &mut dyn PlanarArrayInitializationCallback,
) -> Result<PlanarArrayInitializationResult>
pub fn initialize_with_callback<M: MeasurementRead>( &self, measurements: &M, optics: &Optics, nominal_illumination: &Illumination, model: &ImagePlaneModel, backend: Arc<dyn Backend>, callback: &mut dyn PlanarArrayInitializationCallback, ) -> Result<PlanarArrayInitializationResult>
Detects and fits with an explicit backend and initializer-specific callback.
Trait Implementations§
Source§impl Clone for BrightfieldCircleInitializer
impl Clone for BrightfieldCircleInitializer
Source§fn clone(&self) -> BrightfieldCircleInitializer
fn clone(&self) -> BrightfieldCircleInitializer
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for BrightfieldCircleInitializer
impl RefUnwindSafe for BrightfieldCircleInitializer
impl Send for BrightfieldCircleInitializer
impl Sync for BrightfieldCircleInitializer
impl Unpin for BrightfieldCircleInitializer
impl UnsafeUnpin for BrightfieldCircleInitializer
impl UnwindSafe for BrightfieldCircleInitializer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more