eimage_core/
image_collection.rs

1use crate::error::Error;
2use crate::error::Error::ContainsNoImageSeries;
3use crate::image_series::ImageSeries;
4use ecoord::{FrameId, TransformTree};
5use std::collections::{HashMap, HashSet};
6
7#[derive(Debug, Clone)]
8pub struct ImageCollection {
9    pub(crate) image_series: HashMap<FrameId, ImageSeries>,
10    pub(crate) transform_tree: TransformTree,
11}
12
13impl ImageCollection {
14    pub fn new(
15        image_series: HashMap<FrameId, ImageSeries>,
16        transform_tree: TransformTree,
17    ) -> Result<Self, Error> {
18        if image_series.is_empty() {
19            return Err(ContainsNoImageSeries);
20        }
21
22        let image_collection = Self {
23            image_series,
24            transform_tree,
25        };
26        Ok(image_collection)
27    }
28
29    pub fn get_frame_ids(&self) -> HashSet<FrameId> {
30        HashSet::from_iter(self.image_series.keys().cloned())
31    }
32
33    pub fn get_image_series(&self, frame_id: &FrameId) -> Result<&ImageSeries, Error> {
34        self.image_series.get(frame_id).ok_or(ContainsNoImageSeries)
35    }
36
37    pub fn total_image_count(&self) -> usize {
38        self.image_series.values().map(|x| x.len()).sum()
39    }
40}