From 4fcf68aef23a0615469ce8ef62d35a81913baddb Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 14 Mar 2025 18:23:19 +0100 Subject: [PATCH] Add euclid-in-oklab distance option --- mark-bin/src/main.rs | 4 ++++ mark/src/dither.rs | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mark-bin/src/main.rs b/mark-bin/src/main.rs index 359c32b..1d11964 100644 --- a/mark-bin/src/main.rs +++ b/mark-bin/src/main.rs @@ -94,6 +94,8 @@ enum DitherDifference { HyAbClamp, Ciede2000, Ciede2000Clamp, + Oklab, + OklabClamp, Manhattan, ManhattanClamp, } @@ -187,6 +189,8 @@ impl DitherCmd { HyAbClamp => self.run_cd::>(image), Ciede2000 => self.run_cd::(image), Ciede2000Clamp => self.run_cd::>(image), + Oklab => self.run_cd::(image), + OklabClamp => self.run_cd::>(image), Manhattan => self.run_cd::(image), ManhattanClamp => self.run_cd::>(image), } diff --git a/mark/src/dither.rs b/mark/src/dither.rs index 8112d27..f81266a 100644 --- a/mark/src/dither.rs +++ b/mark/src/dither.rs @@ -9,8 +9,8 @@ use std::marker::PhantomData; use image::RgbaImage; use palette::{ - Clamp, IntoColor, Lab, Srgb, - color_difference::{Ciede2000, HyAb}, + Clamp, IntoColor, Lab, Oklab, Srgb, + color_difference::{Ciede2000, EuclideanDistance, HyAb}, }; use rand::{Rng, SeedableRng, rngs::SmallRng}; @@ -65,6 +65,16 @@ impl> Difference for DiffCiede2000 { } } +pub struct DiffOklab; + +impl> Difference for DiffOklab { + fn diff(a: C, b: C) -> f32 { + let a: Oklab = a.into_color(); + let b: Oklab = b.into_color(); + a.distance(b) + } +} + pub struct DiffManhattan; impl> Difference for DiffManhattan {