diff --git a/src/hough.rs b/src/hough.rs index 4d31519..3cb4377 100644 --- a/src/hough.rs +++ b/src/hough.rs @@ -40,8 +40,8 @@ pub fn lines( ) -> Vec { let hough = transform(img); - let mu = mean((&hough.pixels).into_iter().map(|p| *p)); - let sigma = stddev((&hough.pixels).into_iter().map(|p| *p), mu); + let mu = stats::mean((&hough.pixels).into_iter().map(|p| *p)); + let sigma = stats::stddev((&hough.pixels).into_iter().map(|p| *p), mu); let mut lines = Vec::::new(); for y in 0..hough.extent.y { @@ -59,29 +59,9 @@ pub fn lines( } } } - lines + lines } fn theta_from(x: usize) -> f32 { - x as f32 * std::f32::consts::PI / THETA_N as f32 -} - -fn mean(xs: impl Iterator) -> f32 { - let mut n = 0; - let mut sum = 0.0; - for x in xs { - sum += x; - n += 1; - } - sum / n as f32 -} - -fn stddev(xs: impl Iterator, mean: f32) -> f32 { - let mut n = 0; - let mut sum = 0.0; - for x in xs { - sum += (x - mean).powf(2.0); - n += 1; - } - (sum / (n - 1) as f32).sqrt() + x as f32 * std::f32::consts::PI / THETA_N as f32 } diff --git a/src/lib.rs b/src/lib.rs index a176d15..5ec1ea5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,3 +5,4 @@ pub mod filter; pub mod hough; pub mod image; pub mod kernel; +pub mod stats; diff --git a/src/stats.rs b/src/stats.rs new file mode 100644 index 0000000..da5bc1e --- /dev/null +++ b/src/stats.rs @@ -0,0 +1,19 @@ +pub fn mean(xs: impl Iterator) -> f32 { + let mut n = 0; + let mut sum = 0.0; + for x in xs { + sum += x; + n += 1; + } + sum / n as f32 +} + +pub fn stddev(xs: impl Iterator, mean: f32) -> f32 { + let mut n = 0; + let mut sum = 0.0; + for x in xs { + sum += (x - mean).powf(2.0); + n += 1; + } + (sum / (n - 1) as f32).sqrt() +}