[−][src]Function imageproc::morphology::close
pub fn close(image: &GrayImage, norm: Norm, k: u8) -> GrayImage
Dilation followed by erosion.
See the erode
and dilate
documentation for definitions of dilation and erosion.
Examples
use imageproc::morphology::close; use imageproc::distance_transform::Norm; // Small holes are closed - hence the name. let small_hole = gray_image!( 255, 255, 255, 255; 255, 0, 0, 255; 255, 0, 0, 255; 255, 255, 255, 255 ); let closed_small_hole = gray_image!( 255, 255, 255, 255; 255, 255, 255, 255; 255, 255, 255, 255; 255, 255, 255, 255 ); assert_pixels_eq!( close(&small_hole, Norm::LInf, 1), closed_small_hole ); // Large holes survive unchanged. let large_hole = gray_image!( 255, 255, 255, 255, 255; 255, 0, 0, 0, 255; 255, 0, 0, 0, 255; 255, 0, 0, 0, 255; 255, 255, 255, 255, 255 ); assert_pixels_eq!( close(&large_hole, Norm::LInf, 1), large_hole ); // A dot gains a layer of foreground pixels // when dilated and loses them again when eroded, // resulting in no change. let dot = gray_image!( 0, 0, 0, 0, 0; 0, 0, 0, 0, 0; 0, 0, 255, 0, 0; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0 ); assert_pixels_eq!( close(&dot, Norm::LInf, 1), dot ); // A dot near the boundary gains pixels in the top-left // of the image which are not within distance 1 of any // background pixels, so are not removed by erosion. let dot_near_boundary = gray_image!( 0, 0, 0, 0, 0; 0, 255, 0, 0, 0; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0 ); let closed_dot_near_boundary = gray_image!( 255, 255, 0, 0, 0; 255, 255, 0, 0, 0; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0; 0, 0, 0, 0, 0 ); assert_pixels_eq!( close(&dot_near_boundary, Norm::LInf, 1), closed_dot_near_boundary );