eimage-core 0.0.1-alpha.13

Core primitives and operations for processing image collections in 3D space.
Documentation
use crate::error::Error;
use crate::error::Error::ContainsNoImageSeries;
use crate::image_series::ImageSeries;
use ecoord::{FrameId, TransformTree};
use std::collections::{HashMap, HashSet};

#[derive(Debug, Clone)]
pub struct ImageCollection {
    pub(crate) image_series: HashMap<FrameId, ImageSeries>,
    pub(crate) transform_tree: TransformTree,
}

impl ImageCollection {
    pub fn new(
        image_series: HashMap<FrameId, ImageSeries>,
        transform_tree: TransformTree,
    ) -> Result<Self, Error> {
        if image_series.is_empty() {
            return Err(ContainsNoImageSeries);
        }

        let image_collection = Self {
            image_series,
            transform_tree,
        };
        Ok(image_collection)
    }

    pub fn get_frame_ids(&self) -> HashSet<FrameId> {
        HashSet::from_iter(self.image_series.keys().cloned())
    }

    pub fn get_image_series(&self, frame_id: &FrameId) -> Result<&ImageSeries, Error> {
        self.image_series.get(frame_id).ok_or(ContainsNoImageSeries)
    }

    pub fn total_image_count(&self) -> usize {
        self.image_series.values().map(|x| x.len()).sum()
    }
}