use crate::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
use super::binary::StructuringElement;
#[derive(Debug, Clone)]
pub struct RegionProperties {
pub label: usize,
pub area: usize,
pub bbox: Vec<usize>,
}
pub trait MeasurementAlgorithms<R: Runtime<DType = DType>> {
fn label(&self, input: &Tensor<R>, structure: StructuringElement)
-> Result<(Tensor<R>, usize)>;
fn find_objects(&self, labels: &Tensor<R>, num_labels: usize) -> Result<Vec<RegionProperties>>;
fn sum_labels(
&self,
input: &Tensor<R>,
labels: &Tensor<R>,
num_labels: usize,
) -> Result<Tensor<R>>;
fn mean_labels(
&self,
input: &Tensor<R>,
labels: &Tensor<R>,
num_labels: usize,
) -> Result<Tensor<R>>;
fn center_of_mass(
&self,
input: &Tensor<R>,
labels: &Tensor<R>,
num_labels: usize,
) -> Result<Tensor<R>>;
}