From 38efd731dd77a2eb78268525c5affe56ac96316c Mon Sep 17 00:00:00 2001 From: cc Date: Thu, 28 Aug 2025 02:33:06 -0700 Subject: Analysis Packaging --- src/analysis.rs | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 3 +++ 2 files changed, 79 insertions(+) create mode 100644 src/analysis.rs (limited to 'src') diff --git a/src/analysis.rs b/src/analysis.rs new file mode 100644 index 0000000..9cf0b6a --- /dev/null +++ b/src/analysis.rs @@ -0,0 +1,76 @@ +use crate::{LabelFormat,LabelU16}; + +use avl_tree::*; + +#[derive(Debug)] +struct Data { + label: u16, + area: usize, + perimeter: usize, + cell_cell: usize, + cell_tissue: usize, +} + +impl Data { + const fn new(label: u16, area: usize, perimeter: usize, cell_cell: usize, cell_tissue: usize) -> Self { + Self { + label, + area, + perimeter, + cell_cell, + cell_tissue, + } + } +} + + +impl LabelFormat { + fn get_tree(&self) -> AVLTree { + let mut avt = avl_tree::AVLTree::::new(); + for y in 0..self.height { + for x in 0..self.width { + let index = x + y * self.width; + let key = self.buffer[index]; + if key.is_zero() { + continue; + } + if let Some(data) = avt.get(key) { + let mut new_data = Data::new( + data.label, + data.area, + data.perimeter, + data.cell_cell, + data.cell_tissue, + ); + new_data.area += 1; + avt.insert(key, new_data); + } else { + avt.insert(key, Data::new(key, 1, 0, 0, 0)); + } + } + } + avt + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn get_areas_test() { + const DIM: usize = 6; + let mut test_data = LabelFormat:: { + buffer: vec![0u16; DIM*DIM], + width: DIM, + height: DIM, + }; + test_data.buffer[2+3*DIM] = 1; + test_data.buffer[3+3*DIM] = 1; + test_data.buffer[4+3*DIM] = 2; + + for (key,val) in test_data.get_tree().iter() { + println!("{} -> {:?}",key,val) + } + } +} diff --git a/src/lib.rs b/src/lib.rs index ace2fb7..c479f76 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,8 @@ +extern crate avl_tree; + mod label_format; pub mod binfile; +pub mod analysis; pub use crate::label_format::{LabelFormat,LabelU16}; -- cgit v1.2.1