From cd2153f4543468eebfc04031f2cd1c979d9a6962 Mon Sep 17 00:00:00 2001 From: Stephan Loyd Date: Fri, 6 Jan 2023 21:27:48 +0800 Subject: [PATCH] Fix f_lab accuracy. This fixes GH-6 --- lib/PDL/Transform/Color.pm | 2 +- t/color.t | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/PDL/Transform/Color.pm b/lib/PDL/Transform/Color.pm index 5dfa066..2bb1346 100644 --- a/lib/PDL/Transform/Color.pm +++ b/lib/PDL/Transform/Color.pm @@ -1493,7 +1493,7 @@ sub f_lab { my $delta = 6/29; my $delta3 = $delta * $delta * $delta; return ( - ($in > $delta3) * ( $in * (($in->abs+($in==0)) ** (0.333-1)) ) + + ($in > $delta3) * ( $in * (($in->abs+($in==0)) ** (1/3-1)) ) + ($in <= $delta3) * ( $in / (3 * $delta * $delta) + 4/29 ) ); } diff --git a/t/color.t b/t/color.t index 297efa3..1527dcc 100644 --- a/t/color.t +++ b/t/color.t @@ -178,6 +178,14 @@ eval {$t = t_xyz2lab();}; is $@, '', "t_xyz2lab ran OK"; eval {$b=pdl(1,1,1)->apply($t);}; is $@, '', "t_xyz2lab applied OK"; -ok all(approx $b, pdl(100, 8.5859237, 5.5509345)), 't_xyz2lab right values' or diag "got=$b"; +ok all(approx $b, pdl(100, 8.5945916, 5.5564131)), 't_xyz2lab right values' or diag "got=$b"; + + +for my $rgb (pdl(255, 0, 0), pdl(0, 255, 0), pdl(0, 0, 255)) { + my $t = t_lab() x !t_srgb(); + my $lab = $rgb->apply($t); + my $rgb2 = $lab->invert($t); + ok(all(approx $rgb2, $rgb), "t_lab loop $rgb") or diag "got=$b"; +} done_testing;