pub struct Epry {Show 16 fields
pub iterations: usize,
pub object_step: f64,
pub pupil_step: f64,
pub batch_size: usize,
pub recover_pupil: bool,
pub constrain_pupil_support: bool,
pub recover_frame_gains: bool,
pub gain_step: f64,
pub minimum_gain: f64,
pub maximum_gain: f64,
pub recover_background: bool,
pub background_step: f64,
pub minimum_background: f64,
pub maximum_background: f64,
pub epsilon: f64,
pub loss_type: LossType,
}Expand description
Embedded pupil-recovery reconstruction for Fourier ptychographic microscopy.
§Method
EPRY alternates detector-amplitude projection with two normalized updates: the exit-wave error is divided by pupil power to update the overlapping object-spectrum patch and by object-patch power to update the pupil. Jointly recovering these two complex functions lets the pupil absorb aberrations that would otherwise be imprinted on the reconstructed object. The pupil can be projected back onto the known aperture support after every update.
This implementation also optionally estimates a relative gain and an additive, spatially uniform background for each frame. Those calibration updates and incoherent multiplexing support are crate extensions to the reference EPRY method.
§Gauge convention
When pupil recovery is enabled, iteration-boundary results use the compiled pupil as a fixed gauge reference. The supported pupil energy is matched to that reference, its supported overlap is made positive real, and the centered object-spectrum coefficient is made non-negative real. Reciprocal object/pupil factors preserve the forward prediction. Affine pupil phase is removed independently on axes whose effective subpixel offsets are zero; it is retained on axes with fractional offsets because the model’s bilinear crop interpolation does not preserve that ambiguity exactly. The runner applies this projection before iteration callbacks, checkpoints, and final result construction, including after checkpoint restoration.
§References
X. Ou, G. Zheng, and C. Yang, “Embedded pupil function recovery for Fourier ptychographic microscopy” (2014), Optics Express 22(5), 4960–4972.
The blind object/pupil ambiguities follow A. Fannjiang and P. Chen, “Blind ptychography: uniqueness and ambiguities” (2020), Inverse Problems 36, 045005; this implementation uses a Fourier-domain object and retains affine phase on fractionally interpolated axes.
Fields§
§iterations: usizeNumber of complete passes through the acquisition schedule.
object_step: f64Relaxation factor applied to each object-spectrum correction.
pupil_step: f64Relaxation factor applied to each pupil correction.
batch_size: usizeNumber of measured frames supplied to each reconstruction step.
recover_pupil: boolWhether to update the complex pupil alongside the object.
constrain_pupil_support: boolWhether to zero recovered pupil values outside the compiled aperture.
recover_frame_gains: boolWhether to estimate one multiplicative intensity gain per frame.
gain_step: f64Fraction of each least-squares frame-gain estimate applied per update.
minimum_gain: f64Lower bound for recovered frame gains; must be positive.
maximum_gain: f64Upper bound for recovered frame gains.
recover_background: boolWhether to estimate one additive, spatially uniform background per frame.
background_step: f64Fraction of the mean frame residual added to the background per update.
minimum_background: f64Lower bound for recovered background intensities.
maximum_background: f64Upper bound for recovered background intensities.
epsilon: f64Positive numerical floor used in normalized updates.
loss_type: LossTypeLoss used for diagnostics; the projection itself always enforces the measured amplitude.
Implementations§
Source§impl Epry
impl Epry
Sourcepub fn iterations(self, iterations: usize) -> Self
pub fn iterations(self, iterations: usize) -> Self
Sets the number of complete acquisition-schedule passes; validation requires non-zero.
Sourcepub fn object_step(self, step: f64) -> Self
pub fn object_step(self, step: f64) -> Self
Sets the finite positive object-spectrum relaxation.
Sourcepub fn pupil_step(self, step: f64) -> Self
pub fn pupil_step(self, step: f64) -> Self
Sets the finite positive complex-pupil relaxation.
Sourcepub fn recover_pupil(self, recover: bool) -> Self
pub fn recover_pupil(self, recover: bool) -> Self
Enables or disables simultaneous complex-pupil recovery.
Sourcepub fn constrain_pupil_support(self, constrain: bool) -> Self
pub fn constrain_pupil_support(self, constrain: bool) -> Self
Selects whether pupil values outside the compiled binary support are forced to zero.
Sourcepub fn recover_frame_gains(self, recover: bool) -> Self
pub fn recover_frame_gains(self, recover: bool) -> Self
Enables or disables one positive multiplicative gain estimate per acquisition frame.
Sourcepub fn gain_bounds(self, minimum: f64, maximum: f64) -> Self
pub fn gain_bounds(self, minimum: f64, maximum: f64) -> Self
Sets finite positive inclusive lower and upper bounds for recovered frame gains.
Sourcepub fn recover_background(self, recover: bool) -> Self
pub fn recover_background(self, recover: bool) -> Self
Enables or disables one spatially uniform additive intensity background per frame.
Sourcepub fn background_step(self, step: f64) -> Self
pub fn background_step(self, step: f64) -> Self
Sets finite background-estimate relaxation in (0, 1].
Sourcepub fn background_bounds(self, minimum: f64, maximum: f64) -> Self
pub fn background_bounds(self, minimum: f64, maximum: f64) -> Self
Sets finite inclusive bounds for recovered additive intensity backgrounds.
Trait Implementations§
Source§impl ReconstructionAlgorithm for Epry
impl ReconstructionAlgorithm for Epry
Source§type IterationMetrics = NoIterationMetrics
type IterationMetrics = NoIterationMetrics
Source§fn validate(&self) -> Result<()>
fn validate(&self) -> Result<()>
Source§fn canonicalize_state<M: MeasurementRead>(
&self,
problem: &ReconstructionProblem<M>,
state: &mut ReconstructionState,
) -> Result<()>
fn canonicalize_state<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, state: &mut ReconstructionState, ) -> Result<()>
Source§fn step<M: MeasurementRead>(
&mut self,
problem: &ReconstructionProblem<M>,
state: &mut ReconstructionState,
batch: &Batch,
_iteration: usize,
) -> Result<StepOutput<Self::IterationMetrics>>
fn step<M: MeasurementRead>( &mut self, problem: &ReconstructionProblem<M>, state: &mut ReconstructionState, batch: &Batch, _iteration: usize, ) -> Result<StepOutput<Self::IterationMetrics>>
state for one scheduled batch in zero-based iteration.Source§fn iterations(&self) -> usize
fn iterations(&self) -> usize
Source§fn batch_size(&self) -> usize
fn batch_size(&self) -> usize
Source§fn validate_problem<M: MeasurementRead>(
&self,
_problem: &ReconstructionProblem<M>,
) -> Result<()>
fn validate_problem<M: MeasurementRead>( &self, _problem: &ReconstructionProblem<M>, ) -> Result<()>
problem.Source§fn initialize<M: MeasurementRead>(
&self,
problem: &ReconstructionProblem<M>,
) -> Result<ReconstructionState>
fn initialize<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, ) -> Result<ReconstructionState>
problem.Source§fn initialize_with_backend<M: MeasurementRead>(
&self,
problem: &ReconstructionProblem<M>,
backend: Arc<dyn Backend>,
) -> Result<ReconstructionState>
fn initialize_with_backend<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, backend: Arc<dyn Backend>, ) -> Result<ReconstructionState>
backend.Source§fn supports_joint_reconstruction(&self) -> bool
fn supports_joint_reconstruction(&self) -> bool
Source§fn run<M: MeasurementRead>(
self,
problem: &ReconstructionProblem<M>,
) -> Result<ReconstructionResult>where
Self: Sized,
fn run<M: MeasurementRead>(
self,
problem: &ReconstructionProblem<M>,
) -> Result<ReconstructionResult>where
Self: Sized,
Source§fn run_with_callbacks<M: MeasurementRead>(
self,
problem: &ReconstructionProblem<M>,
callbacks: Vec<Box<dyn Callback>>,
) -> Result<ReconstructionResult>where
Self: Sized,
fn run_with_callbacks<M: MeasurementRead>(
self,
problem: &ReconstructionProblem<M>,
callbacks: Vec<Box<dyn Callback>>,
) -> Result<ReconstructionResult>where
Self: Sized,
callbacks at their declared hooks.Source§fn run_from_checkpoint<M: MeasurementRead>(
self,
problem: &ReconstructionProblem<M>,
checkpoint: ReconstructionCheckpoint,
) -> Result<ReconstructionResult>where
Self: Sized,
fn run_from_checkpoint<M: MeasurementRead>(
self,
problem: &ReconstructionProblem<M>,
checkpoint: ReconstructionCheckpoint,
) -> Result<ReconstructionResult>where
Self: Sized,
problem.Auto Trait Implementations§
impl Freeze for Epry
impl RefUnwindSafe for Epry
impl Send for Epry
impl Sync for Epry
impl Unpin for Epry
impl UnsafeUnpin for Epry
impl UnwindSafe for Epry
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