use crate::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum StructuringElement {
#[default]
Cross,
Full,
}
pub trait BinaryMorphologyAlgorithms<R: Runtime<DType = DType>> {
fn binary_erosion(
&self,
input: &Tensor<R>,
structure: StructuringElement,
iterations: usize,
) -> Result<Tensor<R>>;
fn binary_dilation(
&self,
input: &Tensor<R>,
structure: StructuringElement,
iterations: usize,
) -> Result<Tensor<R>>;
fn binary_opening(
&self,
input: &Tensor<R>,
structure: StructuringElement,
iterations: usize,
) -> Result<Tensor<R>>;
fn binary_closing(
&self,
input: &Tensor<R>,
structure: StructuringElement,
iterations: usize,
) -> Result<Tensor<R>>;
fn binary_fill_holes(&self, input: &Tensor<R>) -> Result<Tensor<R>>;
}