Crate chanvese [−] [src]
This crate provides an implementation of Chan-Vese level-sets described in Active contours without edges by T. Chan and L. Vese. It is a port of the Python implementation by Kevin Keraudren on Github and of the Matlab implementation by Shawn Lankton.
Examples
To use the functions inside module chanvese::utils
you need to
compile this crate with the feature image-utils.
extern crate image; extern crate rand; extern crate chanvese; use std::f64; use std::fs::File; use image::ImageBuffer; use rand::distributions::{Sample, Range}; use chanvese::{FloatGrid, BoolGrid, chanvese}; use chanvese::utils; fn main() { // create an input image (blurred and noisy ellipses) let img = { let mut img = ImageBuffer::new(256, 128); for (x, y, pixel) in img.enumerate_pixels_mut() { if (x-100)*(x-100)+(y-70)*(y-70) <= 35*35 { *pixel = image::Luma([200u8]); } if (x-128)*(x-128)/2+(y-50)*(y-50) <= 30*30 { *pixel = image::Luma([150u8]); } } img = image::imageops::blur(&img, 5.); let mut noiserange = Range::new(0.0f32, 30.); let mut rng = rand::thread_rng(); for (_, _, pixel) in img.enumerate_pixels_mut() { *pixel = image::Luma([pixel.data[0] + noiserange.sample(&mut rng) as u8]); } let ref mut imgout = File::create("image.png").unwrap(); image::ImageLuma8(img.clone()).save(imgout, image::PNG).unwrap(); let mut result = FloatGrid::new(256, 128); for (x, y, pixel) in img.enumerate_pixels() { result.set(x as usize, y as usize, pixel.data[0] as f64); } result }; // create a rough mask let mask = { let mut result = BoolGrid::new(img.width(), img.height()); for (x, y, value) in result.iter_mut() { if (x >= 65 && x <= 180) && (y >= 20 && y <= 100) { *value = true; } } result }; utils::save_boolgrid(&mask, "mask.png"); // level-set segmentation by Chan-Vese let (seg, phi, _) = chanvese(&img, &mask, 500, 1.0, 0); utils::save_boolgrid(&seg, "out.png"); utils::save_floatgrid(&phi, "phi.png"); }
Functions
chanvese |
Runs the chanvese algorithm |
Type Definitions
BoolGrid |
two-dimensional grid of |
FloatGrid |
two-dimensional grid of |