Skip to main content

Epry

Struct Epry 

Source
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: usize

Number of complete passes through the acquisition schedule.

§object_step: f64

Relaxation factor applied to each object-spectrum correction.

§pupil_step: f64

Relaxation factor applied to each pupil correction.

§batch_size: usize

Number of measured frames supplied to each reconstruction step.

§recover_pupil: bool

Whether to update the complex pupil alongside the object.

§constrain_pupil_support: bool

Whether to zero recovered pupil values outside the compiled aperture.

§recover_frame_gains: bool

Whether to estimate one multiplicative intensity gain per frame.

§gain_step: f64

Fraction of each least-squares frame-gain estimate applied per update.

§minimum_gain: f64

Lower bound for recovered frame gains; must be positive.

§maximum_gain: f64

Upper bound for recovered frame gains.

§recover_background: bool

Whether to estimate one additive, spatially uniform background per frame.

§background_step: f64

Fraction of the mean frame residual added to the background per update.

§minimum_background: f64

Lower bound for recovered background intensities.

§maximum_background: f64

Upper bound for recovered background intensities.

§epsilon: f64

Positive numerical floor used in normalized updates.

§loss_type: LossType

Loss used for diagnostics; the projection itself always enforces the measured amplitude.

Implementations§

Source§

impl Epry

Source

pub fn iterations(self, iterations: usize) -> Self

Sets the number of complete acquisition-schedule passes; validation requires non-zero.

Source

pub fn object_step(self, step: f64) -> Self

Sets the finite positive object-spectrum relaxation.

Source

pub fn pupil_step(self, step: f64) -> Self

Sets the finite positive complex-pupil relaxation.

Source

pub fn recover_pupil(self, recover: bool) -> Self

Enables or disables simultaneous complex-pupil recovery.

Source

pub fn constrain_pupil_support(self, constrain: bool) -> Self

Selects whether pupil values outside the compiled binary support are forced to zero.

Source

pub fn recover_frame_gains(self, recover: bool) -> Self

Enables or disables one positive multiplicative gain estimate per acquisition frame.

Source

pub fn gain_step(self, step: f64) -> Self

Sets the finite gain-estimate relaxation in (0, 1].

Source

pub fn gain_bounds(self, minimum: f64, maximum: f64) -> Self

Sets finite positive inclusive lower and upper bounds for recovered frame gains.

Source

pub fn recover_background(self, recover: bool) -> Self

Enables or disables one spatially uniform additive intensity background per frame.

Source

pub fn background_step(self, step: f64) -> Self

Sets finite background-estimate relaxation in (0, 1].

Source

pub fn background_bounds(self, minimum: f64, maximum: f64) -> Self

Sets finite inclusive bounds for recovered additive intensity backgrounds.

Trait Implementations§

Source§

impl Clone for Epry

Source§

fn clone(&self) -> Epry

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Epry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Epry

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl ReconstructionAlgorithm for Epry

Source§

type IterationMetrics = NoIterationMetrics

Algorithm-specific metrics emitted by each step and appended to the trace.
Source§

fn validate(&self) -> Result<()>

Validates solver parameters independently of a reconstruction problem.
Source§

fn canonicalize_state<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, state: &mut ReconstructionState, ) -> Result<()>

Projects algorithm-owned ambiguities into a stable reported convention. Read more
Source§

fn step<M: MeasurementRead>( &mut self, problem: &ReconstructionProblem<M>, state: &mut ReconstructionState, batch: &Batch, _iteration: usize, ) -> Result<StepOutput<Self::IterationMetrics>>

Updates state for one scheduled batch in zero-based iteration.
Source§

fn iterations(&self) -> usize

Returns the requested number of complete schedule passes.
Source§

fn batch_size(&self) -> usize

Returns the number of measured frames combined into one step.
Source§

fn validate_problem<M: MeasurementRead>( &self, _problem: &ReconstructionProblem<M>, ) -> Result<()>

Validates solver requirements that depend on problem.
Source§

fn initialize<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, ) -> Result<ReconstructionState>

Creates the default CPU-backed state for problem.
Source§

fn initialize_with_backend<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, backend: Arc<dyn Backend>, ) -> Result<ReconstructionState>

Creates reconstruction state using the supplied execution backend.
Source§

fn supports_joint_reconstruction(&self) -> bool

Reports whether the algorithm may run inside physical joint calibration. Read more
Source§

fn run<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, ) -> Result<ReconstructionResult>
where Self: Sized,

Runs the algorithm with default sequential scheduling and no callbacks.
Source§

fn run_with_callbacks<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, callbacks: Vec<Box<dyn Callback>>, ) -> Result<ReconstructionResult>
where Self: Sized,

Runs the algorithm and invokes callbacks at their declared hooks.
Source§

fn run_from_checkpoint<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, checkpoint: ReconstructionCheckpoint, ) -> Result<ReconstructionResult>
where Self: Sized,

Resumes a run from a checkpoint after validating it against 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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Key for T
where T: Clone,

§

fn align() -> usize

The alignment necessary for the key. Must return a power of two.
§

fn size(&self) -> usize

The size of the key in bytes.
§

unsafe fn init(&self, ptr: *mut u8)

Initialize the key in the given memory location. Read more
§

unsafe fn get<'a>(ptr: *const u8) -> &'a T

Get a reference to the key from the given memory location. Read more
§

unsafe fn drop_in_place(ptr: *mut u8)

Drop the key in place. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,