SRL Archive - Simba Tasks

[DONE] [Medium] Add L*a*b support


Wizzup?

2011-05-28 13:13:01

I'd like to see some alternative colour spaces in Simba. For some class I have to write a small academic paper and I've decided to do it on colour spaces and colour differences. I won't be too special (it's a really small paper), but nevertheless I want to see if I can get Simba to benefit from this. :p

Useful functions would be:

  • ColorToLAB
  • LABToColor
  • RGBToLAB
  • LABToRGB

Though you'd probably want ColorToCIE1931 (although I think we have these, as XYZ) first, and then convert to L*a*b.

So you'd really just need XYZToLAB and LABToXYZ. (You can make the other functions with existing Simba functions)

And if you know of some other cool colour spaces, it may be worth adding or mentioning those conversions functions too.

Mind you, I'm not talking about adding new colour tolerance modes (or speeds, whatever you want to call them). Although I may want to later on, for now this task is just about adding conversion functions.

For reference, see https://secure.wikimedia.org/wikipedia/en/wiki/Lab_color_space#Measuring_differences
CIE1931 XYZ Colour space: https://secure.wikimedia.org/wikipedia/en/wiki/CIE_1931_color_space

TomTuff

2011-05-28 14:01:03

What's the benefit of having more "color spaces"?

Markus

2011-05-28 14:52:00

Well, you might use it to add a new CTS later (which might be useful, CTS3 used to be really useful for road autocolor and distinguishing oaks from regular trees and so).

Coh3n

2011-05-28 17:53:40

From: Markus
Well, you might use it to add a new CTS later (which might be useful, CTS3 used to be really useful for road autocolor and distinguishing oaks from regular trees and so).

CTS3! Of course! Do you know if it still makes a big difference in the new-ish graphics? Could solve some of MSI's accuracy problems.

Sorry for off-topic-ness.

any_one

2011-05-28 19:17:10

procedure XYZToLAB(X,Y,Z : Extended; var L, A, B : Extended);
var
var_y, var_x, var_z, a0, t0 : Extended;
begin
a0 := (pow(29.0 / 6, 2) / 3);
t0 := pow(6.0 / 29, 3);
var_X := X / 95.047; //ref_X = 95.047 Observer= 2°, Illuminant= D65
var_Y := Y / 100; //ref_Y = 100.000
var_Z := Z / 108.883; //ref_Z = 108.883

if (var_X > a0) then var_X := pow(var_X, 1.0/3)
else var_X := (t0 * var_X) + ( 4.0 / 29 );

if (var_Y > a0) then var_Y := pow(var_Y, 1.0/3)
else var_Y := (t0 * var_Y) + ( 4.0 / 29 );

if (var_Z > a0) then var_Z := pow(var_Z, 1.0/3)
else var_Z := (t0 * var_Z) + ( 4.0 / 29 );

L := (116 * var_Y) - 16;
A := 500 * (var_X - var_Y);
B := 200 * (var_Y - var_Z);
end;

procedure LABToXYZ(L, A, B : Extended; var X, Y, Z : Extended);
var
var_y, var_x, var_z, a0, t0 : Extended;
begin
a0 := (pow(29.0 / 6, 2) / 3);
t0 := pow(6.0 / 29, 3);
var_Y := (L + 16) / 116;
var_X := A / 500 + var_Y;
var_Z := var_Y - B / 200;

if (pow(var_Y, 3) > t0) then var_Y := pow(var_y, 3)
else var_Y := (var_Y - 4.0 / 29) / a0;

if (pow(var_X, 3) > t0) then var_X := pow(var_X, 3)
else var_X := (var_X - 4.0 / 29) / a0;

if (pow(var_Z, 3) > t0) then var_Z := pow(var_Z, 3)
else var_Z := (var_Z - 4.0 / 29) / a0;

X := 95.047 * var_X; //ref_X = 95.047 Observer= 2°, Illuminant= D65
Y := 100 * var_Y; //ref_Y = 100.000
Z := 108.883 * var_Z; //ref_Z = 108.883
end;

procedure ColorToLAB(color : Integer; var L, A, B : Extended);
var
x, y, z : Extended;
begin
ColorToXYZ(color, x, y, z);
XYZToLAB(x,y,z,L,A,B);
end;

procedure RGBToLAB(r,g,bl : Integer; var L, A, B : Extended);
var
x, y, z : Extended;
begin
RGBToXYZ(r,g,bl, x, y, z);
XYZToLAB(x,y,z,L,A,B);
end;

procedure LABToRGB(L, A, B : Extended; var r, g, bl : Integer);
var
x, y, z : Extended;
begin
LABToXYZ(l, a, b, x, y, z);
XYZToRGB(x,y,z,r,g,bl);
end;

Function LABToColor(L, A, B : Extended) : Integer;
var
x, y, z : Extended;
begin
LABToXYZ(l, a, b, x, y, z);
Result:=XYZToColor(x, y, z);
end;

Function LABSimilarColours(l,a,b,l1,a1,b1, lweight : Extended; tol : Integer ) : Boolean;
begin
Result := (sqrt((pow(l-l1, 2) * lweight) + pow(a-a1, 2) + pow(b-b1, 2)) < tol);
end;

Function XYZSimilarColours(x,y,z,x1,y1,z1 : Extended; tol, xyzmod : Integer) : Boolean;
var
nx1, ny1, nx2, ny2, val : Extended;
begin
NX1 := (xyzmod * 125) * (x + y + z) / x ;
NY1 := (xyzmod * 125) * (x + y + z) / y;
NX2 := (xyzmod * 125) * (x1 + y1 + z1) / x1;
NY2 := (xyzmod * 125) * (x1 + y1 + z1) / y1;
Val := pow(NX1 - NX2, 2) + pow(NY1 - NY2, 2);
Result := pow(Val, 2) <= pow(Tol, 2);
end;

Done. (I already had these.) What is up with certain chars being replaced with ***40; etc? I will attach a simba file with these as well..

Yago

2011-05-28 19:39:50

From: any_one
procedure XYZToLAB(X,Y,Z : Extended; var L, A, B : Extended);
var
var_y, var_x, var_z, a0, t0 : Extended;
begin
a0 := (pow(29.0 / 6, 2) / 3);
t0 := pow(6.0 / 29, 3);
var_X := X / 95.047; //ref_X = 95.047 Observer= 2°, Illuminant= D65
var_Y := Y / 100; //ref_Y = 100.000
var_Z := Z / 108.883; //ref_Z = 108.883

if (var_X > a0) then var_X := pow(var_X, 1.0/3)
else var_X := (t0 * var_X) + ( 4.0 / 29 );

if (var_Y > a0) then var_Y := pow(var_Y, 1.0/3)
else var_Y := (t0 * var_Y) + ( 4.0 / 29 );

if (var_Z > a0) then var_Z := pow(var_Z, 1.0/3)
else var_Z := (t0 * var_Z) + ( 4.0 / 29 );

L := (116 * var_Y) - 16;
A := 500 * (var_X - var_Y);
B := 200 * (var_Y - var_Z);
end;

procedure LABToXYZ(L, A, B : Extended; var X, Y, Z : Extended);
var
var_y, var_x, var_z, a0, t0 : Extended;
begin
a0 := (pow(29.0 / 6, 2) / 3);
t0 := pow(6.0 / 29, 3);
var_Y := (L + 16) / 116;
var_X := A / 500 + var_Y;
var_Z := var_Y - B / 200;

if (pow(var_Y, 3) > t0) then var_Y := pow(var_y, 3)
else var_Y := (var_Y - 4.0 / 29) / a0;

if (pow(var_X, 3) > t0) then var_X := pow(var_X, 3)
else var_X := (var_X - 4.0 / 29) / a0;

if (pow(var_Z, 3) > t0) then var_Z := pow(var_Z, 3)
else var_Z := (var_Z - 4.0 / 29) / a0;

X := 95.047 * var_X; //ref_X = 95.047 Observer= 2°, Illuminant= D65
Y := 100 * var_Y; //ref_Y = 100.000
Z := 108.883 * var_Z; //ref_Z = 108.883
end;

procedure ColorToLAB(color : Integer; var L, A, B : Extended);
var
x, y, z : Extended;
begin
ColorToXYZ(color, x, y, z);
XYZToLAB(x,y,z,L,A,B);
end;

procedure RGBToLAB(r,g,bl : Integer; var L, A, B : Extended);
var
x, y, z : Extended;
begin
RGBToXYZ(r,g,bl, x, y, z);
XYZToLAB(x,y,z,L,A,B);
end;

procedure LABToRGB(L, A, B : Extended; var r, g, bl : Integer);
var
x, y, z : Extended;
begin
LABToXYZ(l, a, b, x, y, z);
XYZToRGB(x,y,z,r,g,bl);
end;

Function LABToColor(L, A, B : Extended) : Integer;
var
x, y, z : Extended;
begin
LABToXYZ(l, a, b, x, y, z);
Result:=XYZToColor(x, y, z);
end;

Function LABSimilarColours(l,a,b,l1,a1,b1, lweight : Extended; tol : Integer ) : Boolean;
begin
Result := (sqrt((pow(l-l1, 2) * lweight) + pow(a-a1, 2) + pow(b-b1, 2)) < tol);
end;

Function XYZSimilarColours(x,y,z,x1,y1,z1 : Extended; tol, xyzmod : Integer) : Boolean;
var
nx1, ny1, nx2, ny2, val : Extended;
begin
NX1 := (xyzmod * 125) * (x + y + z) / x ;
NY1 := (xyzmod * 125) * (x + y + z) / y;
NX2 := (xyzmod * 125) * (x1 + y1 + z1) / x1;
NY2 := (xyzmod * 125) * (x1 + y1 + z1) / y1;
Val := pow(NX1 - NX2, 2) + pow(NY1 - NY2, 2);
Result := pow(Val, 2) <= pow(Tol, 2);
end;

Done. (I already had these.) What is up with certain chars being replaced with ***40; etc? I will attach a simba file with these as well..


VB error. ***40 and 41 are parenthesis.

Dgby714

2011-05-28 20:23:12

Here's the base for it in simba. "colour_conv.pas"

Notice: Haven't tested it yet.

procedure XYZtoLAB(x, y, z: extended; out l, a, b: extended);
function _f(x: extended): extended;
begin
if (x > power(6.0 / 29.0, 3)) then
Result := power(x, OneDivThree)
else
Result := ((power(29.0 / 6.0, 2) / 3) * x) + (4.0 / 29.0);
end;
const
xn = 95.047;
yn = 100;
zn = 108.883;
var
temp: extended;
begin
temp := _f(y / yn);

l := (116 * temp) - 16;
a := 500 * (_f(x / xn) - temp);
b := 200 * (temp - _f(z / zn));
end;

procedure LABtoXYZ(l, a, b: extended; out x, y, z: extended);
function _f(x: extended): extended;
begin
if (x > (6.0 / 29.0)) then
Result := power(x, 3)
else
Result := (power(6.0 / 29.0, 2) * 3) * (x - 4.0 / 29.0);
end;
const
xn = 95.047;
yn = 100;
zn = 108.883;
var
temp: extended;
begin
temp := 1.0 / 116.0 * (l + 16);

y := yn * _f(temp);
x := xn * _f(temp + (1.0 / 500.0 * a));
z := zn * _f(temp - (1.0 / 200.0 * b));
end;

Attached diff.
diff includes some standards fixing in the file also.

Wizzup, Is this what you want? If it is ill push to git later.

nielsie95

2011-05-29 14:53:55

Here's something I found in my "archive":


program New;


procedure RGBtoHSV(CR, CG, CB: Integer; var H, S, V: Extended);
var
aMax, aMin, Delta: Extended;
R, G, B: Extended;
begin
R := CR / 255.0;
G := CG / 255.0;
B := CB / 255.0;
aMin := MinE(R, MinE(G, B));
aMax := MaxE(R, MaxE(G, B));
delta := aMax - aMin;
V := aMax;

if aMax = 0 then
begin
S := 0;
H := 0;
end
else
begin
S := delta / aMax;
if R = aMax then
H := (G - B) / delta
else
if G = aMax then
H := 2 + (B - R) / delta
else
H := 4 + (R - G) / delta;
H := H / 6;
if H < 0 then
H := H + 1;
end;
H := H * 100;
S := S * 100;
V := V * 100;
end;

procedure HSVtoRGB(H, S, V: Extended; var R, G, B: Integer);
var
i, f, p, q, t: Integer;
begin
if S = 0 then
begin
R := Trunc(V);
G := Trunc(V);
B := Trunc(V);
end;
H := H / 60.0;
i := Trunc(H - 0.499999);
f := Trunc(H - i);
p := Trunc(V * (1 - S));
q := Trunc(V * (1 - S * f));
t := Trunc(V * (1 - S * (1 - f)));
Case i of
0:
begin
R := Trunc(V);
G := t;
B := p;
end;
1:
begin
R := p;
G := Trunc(v);
B := p;
end;
2:
begin
R := p;
G := Trunc(V);
B := t;
end;
3:
begin
R := p;
G := q;
B := Trunc(V);
end;
4:
begin
R := t;
G := p;
B := Trunc(V);
end;
else
begin
R := Trunc(V);
G := p;
B := q;
end;
end;
R := R * 255;
G := G * 255;
B := B * 255;
end;

procedure RGBtoHSL(R, G, B: Extended; var H, S, L : Extended);
var
D, Cmax, Cmin: Single;
begin
R := R / 255;
G := G / 255;
B := B / 255;
Cmax := MaxE(R, MaxE(G, B));
Cmin := MinE(R, MinE(G, B));
L := (Cmax + Cmin) / 2;

if Cmax = Cmin then
begin
H := 0;
S := 0
end
else
begin
D := Cmax - Cmin;
if L < 0.5 then S := D / (Cmax + Cmin)
else S := D / (2 - Cmax - Cmin);
if R = Cmax then H := (G - B) / D
else
if G = Cmax then
H := 2 + (B - R) / D
else
H := 4 + (R - G) / D;
h := h / 6;
if H < 0 then H := H + 1
end;
H := H * 100;
S := S * 100;
L := L * 100;
end;

function HuetoRGB(v1, v2, vH: Extended): Extended;
begin
if vH < 0 then
vH := vH + 1;
if vH > 1 then
vH := vH - 1;
if (6 * vH) < 1 then
Result := (v1 + ( v2 - v1 ) * 6 * vH)
else
if (2 * vH) < 1 then
Result := v2
else
if (3 * vH) < 2 then
Result := (v1 + ( v2 - v1 ) * ( ( 2.0 / 3.0 ) - vH ) * 6)
else
Result := v1;
end;

procedure HSLtoRGB2(H, S, L: Extended; var R, G, B: Integer);
var
temp1, temp2: Extended;
begin
H := H / 100;
S := S / 100;
L := L / 100;
if S = 0 then
begin
R := Round(L * 255);
G := Round(L * 255);
B := Round(L * 255);
end
else
begin
if L < 0.5 then
temp2 := L * (1.0 + S)
else
temp2 := (L + S) - (S * L);

if H > 1 then
H := H / 6.0;
temp1 := (2.0 * L) - temp2

R := Round(255 * HuetoRGB(temp1, temp2, H + ( 1.0 / 3.0 )));
G := Round(255 * HuetoRGB(temp1, temp2, H));
B := Round(255 * HuetoRGB(temp1, temp2, H - ( 1.0 / 3.0 )));
end;
end;

procedure RGBtoXYZ(CR, CG, CB: Integer; var X, Y, Z: Extended);
var
R, G, B: Extended;
begin
R := CR / 255.0;
G := CG / 255.0;
B := CB / 255.0;

if (R > 0.04045) then
R := Pow(((R + 0.055 ) / 1.055), 2.4)
else
R := R / 12.92;

if (G > 0.04045) then
G := Pow(((G + 0.055 ) / 1.055), 2.4)
else
G := G / 12.92;

if (B > 0.04045) then
B := Pow(((B + 0.055 ) / 1.055), 2.4)
else
B := B / 12.92;

R := R * 100;
G := G * 100;
B := B * 100;
X := (0.412453 * R) + (0.357580 * G) + (0.180423 * B);
Y := (0.212671 * R) + (0.715160 * G) + (0.072169 * B);
Z := (0.019334 * R) + (0.119193 * G) + (0.950227 * B);
end;

procedure XYZtoRGB(X, Y, Z: Extended; var CR, CG, CB: Integer) ;
var
R, G, B: Extended;
begin
X := X / 100.0;
Y := Y / 100.0;
Z := Z / 100.0;

R := (3.240479 * X) + (-1.537150 * Y) + (-0.498535 * Z)
G := (-0.969256 * X) + (1.875992 * Y) + (0.041556 * Z)
B := (0.055648 * X) + (-0.204043 * Y) + (1.057311 * Z)

if ( R > 0.0031308 ) then
R := 1.055 * Pow(R, 1 / 2.4) - 0.055
else
R := 12.92 * R;
if ( G > 0.0031308 ) then
G := 1.055 * Pow(G, 1 / 2.4) - 0.055
else
G := 12.92 * G;
if ( B > 0.0031308 ) then
B := 1.055 * Pow(B, 1 / 2.4) - 0.055
else
B := 12.92 * B;

CR := Trunc(R * 255);
CG := Trunc(G * 255);
CB := Trunc(B * 255);
end;

procedure XYZtoCIELab(X, Y, Z: Extended; var L, a, b: Extended);
begin
X := X / 95.047;
Y := Y / 100.000;
Z := Z / 108.883;

if ( X > 0.008856 ) then
X := Pow(X, 1.0/3.0)
else
X := ( 7.787 * X ) + ( 16.0 / 116.0 );
if ( Y > 0.008856 ) then
Y := Pow(Y, 1.0/3.0)
else
Y := ( 7.787 * Y ) + ( 16.0 / 116.0 );
if ( Z > 0.008856 ) then
Z := Pow(Z, 1.0/3.0)
else
Z := ( 7.787 * Z ) + ( 16.0 / 116.0 );

L := (116.0 * Y ) - 16.0;
a := 500.0 * ( X - Y );
b := 200.0 * ( Y - Z );
end;

procedure CIELabtoXYZ(L, a, b: Extended; var X, Y, Z: Extended);
begin
Y := ( L + 16 ) / 116.0
X := ( a / 500.0 )+ Y
Z := Y - ( b / 200.0 )

if ( Pow(Y, 3) > 0.008856 ) then
Y := Pow(Y, 3)
else
Y := ( Y - (16.0 / 116.0 )) / 7.787;
if ( Pow(X, 3) > 0.008856 ) then
X := Pow(X, 3)
else
X := ( X - (16.0 / 116.0) ) / 7.787;
if ( Pow(Z, 3) > 0.008856 ) then
Z := Pow(Z, 3)
else
Z := ( Z - (16.0 / 116.0) ) / 7.787;


X := 95.047 * X;
Y := 100.000 * Y;
Z := 108.883 * Z;
end;

procedure XYZtoCIELuv (X, Y, Z: Extended; var L, U, V: Extended);
var
refU, refV: Extended;
begin
U := ( 4 * X ) / ( X + ( 15 * Y ) + ( 3 * Z ) )
V := ( 9 * Y ) / ( X + ( 15 * Y ) + ( 3 * Z ) )

Y := Y / 100.0
if ( Y > 0.008856 ) then
Y := Pow(Y, 1/3.0)
else
Y := ( 7.787 * Y ) + ( 16 / 116.0 );

refU := ( 4 * 95.047 ) / ( 95.047 + ( 15 * 100.000 ) + ( 3 * 108.883 ) );
refV := ( 9 * 100.000 ) / ( 95.047 + ( 15 * 100.000 ) + ( 3 * 108.883 ) );

L := ( 116 * Y ) - 16;
U := 13 * L * ( U - refU );
V := 13 * L * ( V - refV );
end;

procedure CIELuvtoXYZ(L, U, V: Extended; var X, Y, Z: Extended);
var
refU, refV: Extended;
begin
Y := ( L + 16 ) / 116.0
if ( Pow(Y, 3) > 0.008856 ) then
Y := Pow(Y, 3)
else
Y := ( Y - (16 / 116.0) ) / 7.787;

refU := ( 4 * 95.047 ) / ( 95.047 + ( 15 * 100.000 ) + ( 3 * 108.883 ) );
refV := ( 9 * 100.000 ) / ( 95.047 + ( 15 * 100.000 ) + ( 3 * 108.883 ) );

U := U / ( 13 * L ) + refU;
V := U / ( 13 * L ) + refV;

Y := Y * 100;
X := - ( 9 * Y * U ) / ( ( U - 4 ) * V - U * V );
Z := ( 9 * Y - ( 15 * V * Y ) - ( V * X ) ) / ( 3 * V );
end;

procedure XYZtoHunterLab(X, Y, Z: Extended; var L, a, b: Extended);
begin
L := 10.0 * sqrt( Y );
a := 17.5 * ( ( ( 1.02 * X ) - Y ) / sqrt( Y ) );
b := 7.0 * ( ( Y - ( 0.847 * Z ) ) / sqrt( Y ) );
end;

procedure HunterLabtoXYZ (L, a, b: Extended; var X, Y, Z: Extended);
begin
Y := L / 10.0;
X := a / 17.5 * L / 10.0;
Z := b / 7.0 * L / 10.0;

Y := Pow(Y, 2);
X := ( X + Y ) / 1.02;
Z := -( Z - Y ) / 0.847;
end;

procedure RGBtoYIQ(R, G, B: Integer; var Y, I, Q: Extended);
begin
Y := (0.299 * R) + (0.587 * G) + (0.114 * B);
I := (0.596 * R) + (-0.275 * G) + (-0.321 * B);
Q := (0.212 * R) + (-0.523 * G) + (0.311 * B);
end;

procedure YIQtoRGB (Y, I, Q: Extended; var R, G, B: Integer);
begin
R := Trunc((1.0 * Y) + (0.956 * I) + (0.621 * Q));
G := Trunc((1.0 * Y) + (-0.272 * I) + (-0.647 * Q));
B := Trunc((1.0 * Y) + (-1.105 * I) + (1.702 * Q));
end;

procedure RGBtoYUV (R, G, B: Integer; var Y, U, V: Extended);
begin
Y := (0.299 * R) + (0.587 * G) + (0.114 * B);
U := (-0.147 * R) + (-0.289 * G) + (0.437 * B);
V := (0.615 * R) + (-0.515 * G) + (-0.100 * B);
end;

procedure YUVtoRGB(Y, U, V: Extended; var R, G, B: Integer);
begin
R := Trunc((1.0 * Y) + (0.0 * U) + (1.140 * V));
G := Trunc((1.0 * Y) + (-0.394 * U) + (-0.581 * V));
B := Trunc((1.0 * Y) + (2.028 * U) + (0.0 * V));
end;

function NiceFloat(Float: Extended): String;
begin
Result := Padr(FloatToStr(Round(Float)), 9);
end;

const
red = 255;
green = 255;
blue = 0;

var
a, b, c: Extended;
d, e, f: Integer;
begin
ClearDebug;
WriteLn('R: '+NiceFloat(red)+' G: '+NiceFloat(green)+' B: '+NiceFloat(blue)+ 'RGB');
RGBtoHSV(red, green, blue, a, b, c);
WriteLn('H: '+NiceFloat(a)+' S: '+NiceFloat(b)+' V: '+NiceFloat(c)+ 'HSV');
RGBtoHSL(red, green, blue, a, b, c);
WriteLn('H: '+NiceFloat(a)+' S: '+NiceFloat(b)+' L: '+NiceFloat(c)+ 'HSL');
RGBtoXYZ(red, green, blue, a, b, c);
WriteLn('X: '+NiceFloat(a)+' Y: '+NiceFloat(b)+' Z: '+NiceFloat(c)+ 'XYZ');
d := Round(a);
e := Round(b);
c := Round(c);
XYZtoCIELab(d, e, f, a, b, c);
WriteLn('L: '+NiceFloat(a)+' a: '+NiceFloat(b)+' b: '+NiceFloat(c)+ 'CIE Lab');
XYZtoHunterLab(d, e, f, a, b, c);
WriteLn('L: '+NiceFloat(a)+' a: '+NiceFloat(b)+' b: '+NiceFloat(c)+'Hunter Lab');
XYZtoCIELuv(d, e, f, a, b, c);
WriteLn('L: '+NiceFloat(a)+' u: '+NiceFloat(b)+' v: '+NiceFloat(c)+ 'Luv');
RGBtoYIQ(red, green, blue, a, b, c);
WriteLn('Y: '+NiceFloat(a)+' I: '+NiceFloat(b)+' Q: '+NiceFloat(c)+ 'YIQ');
RGBtoYUV(red, green, blue, a, b, c);
WriteLn('Y: '+NiceFloat(a)+' U: '+NiceFloat(b)+' V: '+NiceFloat(c)+ 'YUV');
end.

Echo_

2011-05-31 09:10:59

It's awesome when you can use your knowledge of color from macroing for real life purposes such as writing a research paper :p

I'm reading the articles now.

Wizzup?

2011-06-01 12:45:24

Awesome. Thanks guys. I'll commit this to Simba eventually. (Or when Dgby issues a pull request… :p )
Hopefully I'll be able to whip a few formulas with the other spaces. :)

Wizzup?

2011-06-05 15:43:27

Added L*a*b support in CIELab branch. (Cts 3) It needs to be optimised and to be honest we need to rewrite ColorSame…

Wizzup?

2011-06-06 16:55:00

Initial (silly and simple) benchmarks. All use the same colour and tolerance; which may not be a very benchmark. It seems to work well at least for the trees. Once someone adds it to all Simba's procedures I can tag 0.97-rc3 with full CTS 3 support. :)

[Temporary URL] Pictures: http://wizzup.org/dirlist/simba/res.tar.bz2