eimage_core/
image_collection.rs1use 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}