Skip to content

Commit

Permalink
Added image normalization to our proc blocks
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael-F-Bryan authored and Michael-F-Bryan committed May 29, 2021
1 parent 6af020d commit c959148
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 18 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 15 additions & 15 deletions proc_blocks/image-normalization/src/distribution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,21 @@ impl Default for Distribution {
}
}

impl From<[f32; 2]> for Distribution {
fn from([mean, standard_deviation]: [f32; 2]) -> Self {
Distribution {
mean,
standard_deviation,
}
}
}

impl From<[i32; 2]> for Distribution {
fn from([mean, standard_deviation]: [i32; 2]) -> Self {
Distribution::new(mean as f32, standard_deviation as f32)
}
}

impl<'a> TryFrom<[&'a str; 2]> for Distribution {
type Error = DistributionConversionError<'a>;

Expand All @@ -53,21 +68,6 @@ impl<'a> TryFrom<[&'a str; 2]> for Distribution {
}
}

impl From<[f32; 2]> for Distribution {
fn from([mean, standard_deviation]: [f32; 2]) -> Self {
Distribution {
mean,
standard_deviation,
}
}
}

impl From<[i32; 2]> for Distribution {
fn from([mean, standard_deviation]: [i32; 2]) -> Self {
Distribution::new(mean as f32, standard_deviation as f32)
}
}

impl<'a, T> TryFrom<&'a [T; 2]> for Distribution
where
Distribution: TryFrom<[T; 2]>,
Expand Down
1 change: 1 addition & 0 deletions python/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ doctest = false

[dependencies]
fft = { path = "../proc_blocks/fft" }
image-normalization = { path = "../proc_blocks/image-normalization" }
noise-filtering = { path = "../proc_blocks/noise-filtering" }
normalize = { path = "../proc_blocks/normalize" }
numpy = "0.13.1"
Expand Down
30 changes: 30 additions & 0 deletions python/src/proc_blocks/image_normalization.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
use pyo3::{
PyAny, PyObject, PyResult, Python, ToPyObject,
prelude::{pyclass, pymethods},
};
use runic_types::{Tensor, Transform};

use crate::proc_blocks::utils;

/// A proc block which will normalize each channel of an image by fitting each
/// channel to a standard normal distribution.
#[pyclass]
#[derive(Debug, Default, Clone, PartialEq)]
pub struct ImageNormalization {
inner: image_normalization::ImageNormalization,
}

#[pymethods]
impl ImageNormalization {
#[new]
pub fn new() -> ImageNormalization { ImageNormalization::default() }

#[call]
pub fn call(&mut self, py: Python, iter: &PyAny) -> PyResult<PyObject> {
let input: Tensor<f32> = utils::to_tensor(iter)?;

let spectrum = py.allow_threads(move || self.inner.transform(input));

utils::to_numpy(py, &spectrum).map(|obj| obj.to_object(py))
}
}
9 changes: 6 additions & 3 deletions python/src/proc_blocks/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
mod utils;

mod fft;
mod image_normalization;
mod noise_filtering;
mod normalize;

use self::fft::Fft;
use self::normalize::Normalize;
use self::noise_filtering::NoiseFiltering;
use self::{
fft::Fft, image_normalization::ImageNormalization,
noise_filtering::NoiseFiltering, normalize::Normalize,
};
use pyo3::{PyResult, Python, types::PyModule};

/// Bindings to proc blocks and Digital Signal Processing routines commonly used
Expand All @@ -16,6 +18,7 @@ pub fn register(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_class::<Fft>()?;
m.add_class::<Normalize>()?;
m.add_class::<NoiseFiltering>()?;
m.add_class::<ImageNormalization>()?;

Ok(())
}

0 comments on commit c959148

Please sign in to comment.