pub use scirs2_ndimage::*;
#[cfg(test)]
mod tests {
use super::*;
use scirs2_core::ndarray::Array2;
#[test]
fn test_gaussian_filter_basic() {
let image =
Array2::<f64>::from_shape_fn((5, 5), |(i, j)| if i == 2 && j == 2 { 1.0 } else { 0.0 });
let sigma = 1.0;
let result = filters::gaussian_filter(&image, sigma, None, None)
.expect("gaussian_filter should succeed");
assert!(result[[2, 2]] > result[[0, 0]]);
assert!(result[[2, 2]] > result[[4, 4]]);
}
#[test]
fn test_binary_dilation_basic() {
let mut image = Array2::<bool>::from_elem((5, 5), false);
image[[2, 2]] = true;
let struct_elem = Array2::<bool>::from_elem((3, 3), true);
let result =
morphology::binary_dilation(&image, Some(&struct_elem), None, None, None, None, None)
.expect("binary_dilation should succeed");
assert!(result[[2, 2]]);
assert!(result[[1, 2]]);
assert!(result[[3, 2]]);
assert!(result[[2, 1]]);
assert!(result[[2, 3]]);
}
#[test]
fn test_label_basic() {
let mut image = Array2::<bool>::from_elem((5, 5), false);
image[[1, 1]] = true;
image[[1, 2]] = true;
image[[3, 3]] = true;
image[[3, 4]] = true;
let (labeled, num_features) =
morphology::label(&image, None, None, None).expect("label should succeed");
assert!(num_features > 0);
assert_ne!(labeled[[1, 1]], 0);
assert_ne!(labeled[[3, 3]], 0);
}
#[test]
fn test_center_of_mass() {
let mut image = Array2::<f64>::zeros((5, 5));
image[[2, 2]] = 1.0;
let com = measurements::center_of_mass(&image).expect("center_of_mass should succeed");
assert!((com[0] - 2.0).abs() < 1e-10);
assert!((com[1] - 2.0).abs() < 1e-10);
}
#[test]
fn test_median_filter_basic() {
let mut image = Array2::<f64>::from_elem((5, 5), 0.5);
image[[0, 0]] = 0.0; image[[4, 4]] = 1.0;
let result =
filters::median_filter(&image, &[3, 3], None).expect("median_filter should succeed");
assert!((result[[0, 0]] - 0.5).abs() < 0.2);
assert!((result[[4, 4]] - 0.5).abs() < 0.2);
}
#[test]
fn test_sobel_edge_detection() {
let image = Array2::<f64>::from_shape_fn((5, 5), |(_, j)| if j < 2 { 0.0 } else { 1.0 });
let result = filters::sobel(&image, 1, None).expect("sobel should succeed");
assert!(result[[2, 2]].abs() > 0.1);
}
#[test]
fn test_binary_erosion() {
let mut image = Array2::<bool>::from_elem((5, 5), false);
for i in 1..4 {
for j in 1..4 {
image[[i, j]] = true;
}
}
let struct_elem = Array2::<bool>::from_elem((3, 3), true);
let result =
morphology::binary_erosion(&image, Some(&struct_elem), None, None, None, None, None)
.expect("binary_erosion should succeed");
assert!(result[[2, 2]]);
assert!(!result[[1, 1]]);
assert!(!result[[3, 3]]);
}
#[test]
fn test_disk_structuring_element() {
let disk = morphology::disk_structure(2.0, Some(2)).expect("disk_structure should succeed");
assert!(disk.ndim() == 2);
assert!(!disk.is_empty());
}
}