1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#![warn(missing_docs, trivial_casts, trivial_numeric_casts, unused_qualifications)]
use ndarray::{Array, Array3, ArrayBase, Data, Dimension, Ix3, ShapeBuilder};
mod filters;
mod interpolation;
mod measurements;
mod morphology;
mod pad;
pub use filters::{gaussian_filter, gaussian_filter1d, median_filter};
pub use interpolation::{spline_filter, spline_filter1d};
pub use measurements::{label, label_histogram, largest_connected_components, most_frequent_label};
pub use morphology::{binary_dilation, binary_erosion};
pub use pad::{pad, PadMode};
pub type Mask = Array3<bool>;
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Kernel3d {
Star,
Full,
}
pub fn array_like<S, A, D, Sh>(arr: &ArrayBase<S, D>, shape: Sh, elem: A) -> Array<A, D>
where
S: Data<Elem = A>,
A: Clone,
D: Dimension,
Sh: ShapeBuilder<Dim = D>,
{
if arr.is_standard_layout() {
Array::from_elem(shape, elem)
} else {
Array::from_elem(shape.f(), elem)
}
}
pub fn dim_minus_1<S, A>(mask: &ArrayBase<S, Ix3>) -> (usize, usize, usize)
where
S: Data<Elem = A>,
A: Clone,
{
let (width, height, depth) = mask.dim();
(width - 1, height - 1, depth - 1)
}