pub struct OcclusionModel {
pub prob: f64,
pub span_frames: usize,
}Expand description
Temporally-correlated occlusion: an insect is hidden from a camera for contiguous spans of frames — modeling it passing behind another insect or an arena feature.
This differs from ObservationModel::dropout_prob, which drops detections
i.i.d. per frame: independent single-frame misses rarely line up into a long
gap, whereas occlusion suppresses a whole span at once. Those multi-frame,
few-or-zero-observation stretches are what fragment live tracks: the live
EKF kills a coasting track that retrack, seeing all data at once, bridges.
Time is tiled into blocks of span_frames; each (camera, insect, block) is
independently occluded with probability prob. Adjacent occluded blocks
merge, so spans are at least one block and occasionally longer. Default
(prob == 0 or span_frames == 0) is never occluded, preserving the
perfect-world baseline.
Fields§
§prob: f64Probability in [0, 1] that any given block hides the insect from a
camera. Default 0 (never occluded).
span_frames: usizeBlock length in frames (the occlusion granularity / typical span).
Default 0 disables occlusion regardless of prob.
Implementations§
Trait Implementations§
Source§impl Clone for OcclusionModel
impl Clone for OcclusionModel
Source§fn clone(&self) -> OcclusionModel
fn clone(&self) -> OcclusionModel
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OcclusionModel
impl Debug for OcclusionModel
Source§impl Default for OcclusionModel
impl Default for OcclusionModel
Source§fn default() -> OcclusionModel
fn default() -> OcclusionModel
Source§impl<'de> Deserialize<'de> for OcclusionModel
impl<'de> Deserialize<'de> for OcclusionModel
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for OcclusionModel
impl PartialEq for OcclusionModel
Source§impl Serialize for OcclusionModel
impl Serialize for OcclusionModel
impl StructuralPartialEq for OcclusionModel
Auto Trait Implementations§
impl Freeze for OcclusionModel
impl RefUnwindSafe for OcclusionModel
impl Send for OcclusionModel
impl Sync for OcclusionModel
impl Unpin for OcclusionModel
impl UnsafeUnpin for OcclusionModel
impl UnwindSafe for OcclusionModel
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 moreSource§impl<T> Preferences for Twhere
T: Serialize + DeserializeOwned,
impl<T> Preferences for Twhere
T: Serialize + DeserializeOwned,
Source§fn save<S>(&self, app: &AppInfo, key: S) -> Result<(), PreferencesError>
fn save<S>(&self, app: &AppInfo, key: S) -> Result<(), PreferencesError>
Source§fn load<S>(app: &AppInfo, key: S) -> Result<T, PreferencesError>
fn load<S>(app: &AppInfo, key: S) -> Result<T, PreferencesError>
key. This is
an instance method which completely overwrites the object’s state with the serialized
data. Thus, it is recommended that you call this method immediately after instantiating
the preferences object. Read moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.