Skip to main content

CameraModel

Struct CameraModel 

Source
pub struct CameraModel {
    pub photons_per_pixel: f64,
    pub gain_counts_per_electron: f64,
    pub offset_counts: f64,
    pub read_noise_electrons: f64,
    pub dark_current_electrons: f64,
    pub shot_noise: bool,
    pub pixel_sensitivity: Option<Vec<f64>>,
    pub bit_depth: Option<u8>,
    pub saturation_counts: Option<f64>,
    pub quantize: bool,
    pub bad_pixels: Vec<usize>,
    pub bad_pixel_value_counts: Option<f64>,
}
Expand description

Concrete detector pipeline from optical intensity to digital counts.

Fields§

§photons_per_pixel: f64

Expected photoelectrons per pixel at unit optical intensity.

§gain_counts_per_electron: f64

Linear conversion gain in digital camera counts per collected electron.

§offset_counts: f64

Additive electronic bias in camera counts.

§read_noise_electrons: f64

Gaussian read-noise standard deviation in electrons per pixel.

§dark_current_electrons: f64

Expected dark-current electrons per pixel per simulated exposure.

§shot_noise: bool

Whether to Poisson-sample photoelectrons and dark current.

§pixel_sensitivity: Option<Vec<f64>>

Multiplicative detector sensitivity for each pixel.

§bit_depth: Option<u8>

Optional digitizer bit depth; maximum code is 2^bits - 1 counts.

§saturation_counts: Option<f64>

Optional upper clipping threshold in camera counts.

§quantize: bool

Whether to round final camera counts to the nearest integer.

§bad_pixels: Vec<usize>

Row-major pixel indices replaced after all other detector effects.

§bad_pixel_value_counts: Option<f64>

Replacement value for Self::bad_pixels, in camera counts.

Implementations§

Source§

impl CameraModel

Source

pub fn new() -> Self

Creates the default noiseless linear detector with 1000 photons per unit intensity.

Source

pub fn ideal() -> Self

Unit detector response without noise, clipping, or quantization.

Source

pub fn photons_per_pixel(self, value: f64) -> Self

Sets the positive expected photoelectrons per pixel at unit optical intensity.

Source

pub fn gain(self, counts_per_electron: f64) -> Self

Sets positive linear gain in camera counts per electron.

Source

pub fn offset_counts(self, value: f64) -> Self

Sets finite additive camera-count bias.

Source

pub fn read_noise_electrons(self, value: f64) -> Self

Sets non-negative Gaussian read-noise standard deviation in electrons.

Source

pub fn dark_current_electrons(self, value: f64) -> Self

Sets non-negative expected dark-current electrons per pixel and exposure.

Source

pub fn shot_noise(self, enabled: bool) -> Self

Enables or disables Poisson sampling of photoelectrons plus dark current.

Source

pub fn pixel_sensitivity(self, values: Vec<f64>) -> Self

Sets one finite non-negative sensitivity multiplier per row-major detector pixel.

Source

pub fn bit_depth(self, bits: u8) -> Self

Sets digitizer bit depth in 1..=53, enabling the corresponding maximum code.

Source

pub fn saturation(self, counts: f64) -> Self

Sets a finite non-negative saturation threshold in camera counts.

Source

pub fn quantize(self, enabled: bool) -> Self

Enables or disables rounding final counts to integer-valued f64 values.

Source

pub fn bad_pixels(self, indices: Vec<usize>, value_counts: f64) -> Self

Replaces unique row-major detector indices with value_counts after measurement.

Source

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

Validates gains, noise parameters, clipping/quantization settings, sensitivities, and uniqueness of bad-pixel indices independently of frame shape.

Source

pub fn validate_for_frame(&self, frame_len: usize) -> Result<()>

Additionally checks sensitivity length and bad-pixel bounds for frame_len pixels.

Source

pub fn measure_frame<R: Rng + ?Sized>( &self, intensity: &mut [f64], rng: &mut R, ) -> Result<()>

Converts one optical-intensity frame into detector counts in place.

Source

pub fn compile_reconstruction_model( &self, model: ImagePlaneModel, ) -> Result<ImagePlaneModel>

Compiles known uniform linear response into a reconstruction model.

Pixel sensitivity, stochastic noise, clipping, quantization, and bad pixels remain detector effects and are not compiled into the model.

Trait Implementations§

Source§

impl Clone for CameraModel

Source§

fn clone(&self) -> CameraModel

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 CameraModel

Source§

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

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

impl Default for CameraModel

Source§

fn default() -> Self

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

impl<'de> Deserialize<'de> for CameraModel

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for CameraModel

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

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,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

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