diff --git a/src/interpolation/mod.rs b/src/interpolation/mod.rs index cf95ce3..78c8bc6 100644 --- a/src/interpolation/mod.rs +++ b/src/interpolation/mod.rs @@ -32,9 +32,9 @@ pub trait InterpolatedRemapper<'a>: Sync { } type ColorTree = KdTree; -fn squared_euclidean(a: &[f64; 3], b: &[f64; 3]) -> f64 { +fn euclidean(a: &[f64; 3], b: &[f64; 3]) -> f64 { let dl = (a[0] - b[0]).powi(2); let da = (a[1] - b[1]).powi(2); let db = (a[2] - b[2]).powi(2); - dl + da + db + (dl + da + db).sqrt() } diff --git a/src/interpolation/nearest_neighbor.rs b/src/interpolation/nearest_neighbor.rs index 56fd130..90a1ca7 100644 --- a/src/interpolation/nearest_neighbor.rs +++ b/src/interpolation/nearest_neighbor.rs @@ -1,7 +1,7 @@ use image::Rgb; use oklab::{srgb_to_oklab, Oklab}; -use super::{squared_euclidean, ColorTree, InterpolatedRemapper}; +use super::{euclidean, ColorTree, InterpolatedRemapper}; use crate::{GenerateLut, Image}; /// Simple remapper that doesn't do any interpolation. Mostly used internally by the other @@ -40,7 +40,7 @@ impl<'a> InterpolatedRemapper<'a> for NearestNeighborRemapper<'a> { let Oklab { l, a, b } = srgb_to_oklab(pixel.0.into()); let (_, nearest) = self.tree.nearest_one( &[l as f64 * self.lum_factor, a as f64, b as f64], - &squared_euclidean, + &euclidean, ); *pixel = Rgb(self.palette[nearest as usize]); } diff --git a/src/interpolation/rbf/mod.rs b/src/interpolation/rbf/mod.rs index 8c29b81..8b4730b 100644 --- a/src/interpolation/rbf/mod.rs +++ b/src/interpolation/rbf/mod.rs @@ -2,7 +2,7 @@ use std::f64; use kiddo::float::{kdtree::KdTree, neighbour::Neighbour}; -use super::{squared_euclidean, ColorTree, InterpolatedRemapper}; +use super::{euclidean, ColorTree, InterpolatedRemapper}; use crate::GenerateLut; pub mod gaussian; @@ -70,7 +70,7 @@ impl<'a, F: RadialBasisFn> InterpolatedRemapper<'a> for RBFRemapper { match &self.tree { None => { for p_color in self.palette.iter() { - let distance = squared_euclidean(&color, p_color); + let distance = euclidean(&color, p_color); let weight = self.rbf.radial_basis(distance); numerator[0] += p_color[0] * weight; @@ -81,7 +81,7 @@ impl<'a, F: RadialBasisFn> InterpolatedRemapper<'a> for RBFRemapper { }, Some((nearest, tree)) => { for Neighbour { item, distance } in - tree.nearest_n(&color, *nearest, &squared_euclidean) + tree.nearest_n(&color, *nearest, &euclidean) { let weight = self.rbf.radial_basis(distance); let p_color = self.palette[item as usize];