use crate::border_mode::{BorderMode, MorphScalar};
use crate::op::morph_impl;
use crate::op_impl::make_morphology;
use crate::op_type::MorphOp;
use crate::structuring_element::KernelShape;
use crate::{ImageSize, MorphExOp, MorphologyThreadingPolicy};
pub fn dilate_u16(
src: &[u16],
dst: &mut [u16],
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
make_morphology::<u16, { MorphOp::Dilate as u8 }, 1>(
src,
dst,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn dilate_rgb_u16(
src: &[u16],
dst: &mut [u16],
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
make_morphology::<u16, { MorphOp::Dilate as u8 }, 3>(
src,
dst,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn erode_u16(
src: &[u16],
dst: &mut [u16],
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
make_morphology::<u16, { MorphOp::Erode as u8 }, 1>(
src,
dst,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn erode_rgb_u16(
src: &[u16],
dst: &mut [u16],
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
make_morphology::<u16, { MorphOp::Erode as u8 }, 3>(
src,
dst,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn erode_rgba_u16(
src: &[u16],
dst: &mut [u16],
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
make_morphology::<u16, { MorphOp::Erode as u8 }, 4>(
src,
dst,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn dilate_rgba_u16(
src: &[u16],
dst: &mut [u16],
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
make_morphology::<u16, { MorphOp::Dilate as u8 }, 4>(
src,
dst,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn erode_gray_alpha_u16(
src: &[u16],
dst: &mut [u16],
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
make_morphology::<u16, { MorphOp::Erode as u8 }, 2>(
src,
dst,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn dilate_gray_alpha_u16(
src: &[u16],
dst: &mut [u16],
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
make_morphology::<u16, { MorphOp::Dilate as u8 }, 2>(
src,
dst,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn morphology_gray_alpha_u16(
src: &[u16],
dst: &mut [u16],
morph_op: MorphExOp,
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
morph_impl::<u16, 2>(
src,
dst,
morph_op,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn morphology_gray_u16(
src: &[u16],
dst: &mut [u16],
morph_op: MorphExOp,
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
morph_impl::<u16, 1>(
src,
dst,
morph_op,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn morphology_rgb_u16(
src: &[u16],
dst: &mut [u16],
morph_op: MorphExOp,
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
morph_impl::<u16, 3>(
src,
dst,
morph_op,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}
pub fn morphology_rgba_u16(
src: &[u16],
dst: &mut [u16],
morph_op: MorphExOp,
image_size: ImageSize,
structuring_element: &[u8],
structuring_element_size: KernelShape,
border_mode: BorderMode,
border_scalar: MorphScalar,
threading_policy: MorphologyThreadingPolicy,
) -> Result<(), String> {
morph_impl::<u16, 4>(
src,
dst,
morph_op,
image_size,
structuring_element,
structuring_element_size,
border_mode,
border_scalar,
threading_policy,
)
}