When we first started buying filaments, all we had to go on was the name of the color given by the manufacturers. Over time, as more colors became available, some vendors started adding #HEX values to their descriptions. For instance, both Bambu Labs and Marswork provide charts of the #HEX TARGET values of each of their filaments. The term TARGET is added to the word HEX because in reality RGB() (HEX) values are device dependent references for displaying colors on a monitor. As such, they are CLOSE to a certain color; but, will be seen differently on individual displays.
By giving us a HEX value for a particular filament, the manufacture is saying "The filament will be close to the color you see on the screen." And, that is very helpful.
But, when it comes to being able to comparing filaments, it is not at all that helpful.
A HEX COLOR number is simply a shortcut way of writing out the RED, GREEN and BLUE color values in 256 increments. Lower number are darker and higher numbers are Lighter. These numbers are translated into the intensity of Red, Green and Blue dots or lines on a monitor. While convenient, there is no simple math that we can use to translate these numbers into comparison algorithms neatly. Moreover, having to rely on the 0-256 levels for each color value, severely limits the number of colors that can be defined in the RGB() color space. Our eyes can differentiate many more than that.
These limitations had to do with the "gamut" of colors that a screen can actually product, not all the colors our eyes are able to discern.
LAB COLOR SPACE (or CIELAB)
Wikipedia desribes the CIELAB color space this way...
CIELAB (also called Lab* ) is a color space defined by the International Commission on Illumination (CIE) in 1976 that represents color using three values: L* for perceptual lightness, a* for the red–green direction, and b* for the yellow–blue direction. It is device-independent, meaning the colors relate to a CIE standard observer rather than a specific monitor or printer.
Unlike the RGB() color space, the LAB (L*, a*, b*) color space definition was designed to replicate how our eyes perceive color in Three Dimensional Space and is not limited by what a screen can produce. Not only does this definition define color PRECISELY, but, The 3D aspect allows for very easy color comparison.
Z AXIS (Vertical) - L* (Lightness) 0 to 100
The L* is charted on the vertical axis using a scale of 0 to 100 representing how dark or light a color is perceived by our eyes. The "L" value always gives us the "perceptual lightness" of a color. Unlike the RBG() values, decimal places are used so there are infinite steps from dark to light.
X AXIS - a* (Green-Red) -127 to 127
Negative -a* values indicate "Greeness". The lower the value, the more Green the color. Positive a* values indicate "Redness", The higher the value the more Red the color.
Y AXIS - b* (Blue-Yellow) -127 to 127
Negative -b* values indicate "Blueness". The lower the value, the more Blue the color. Positive b* values indicate "Yellowness", The higher the value the more Yellow the color.
Together, the L* (Z), a* (X), and b* (Y) values define the position of the color in 3D space.
![]() |
| LAB COLOR IN 3D SPACE |
DISTANCE
The net effect of this positioning of any color is a 3D space, is that it becomes very easy to determine how closely any two colors are located in that space. And, it has also been recognized that the distance of one color from another determines if the human eye can perceive* a difference. Moreover, these distances are easy to calculate with a very simple formula.
* Obviously, this perception varies from person to person but a baseline distance of 2.00 has been identified for the discerning printing industry.
The distance in any direction is called the "Delta" using the Δ symbol.
The formula for calculating the distance of one color from another in 3D space is this:
Since my background is programming in FoxPro, my code would look something like this:
We first calculate the Delta (difference) in each direction;
DeltaL = ABS(BaselineL - SampleL)
DeltaA = ABS(BaselineA - SampleA)
DeltaB = ABS(BaselineB - SampleB)
Then, using these Delta values we calculate the cumulative difference using the Square Root of the sums of the values.
lnDifference = SQRT((lnDeltaL^2)+((lnDeltaA)^2)+((lnDeltaB)^2))The ABS() function ensures that the square root function is only dealing with positive values.
This simple formula allows us to quickly sort through hundreds of filament colors to find those filaments most closely matching our target. This is exactly how the FilamentColors.xyz web site works. And, it is exactly how we can use the software provided by Linshang and Veykolor to make our own comparisons so quickly and easily. We would have a MUCH more difficult time if all we had to rely on was RGB() values!
While I started out using colorimeters that soley rely on phone apps, I have come to appreciate the value of those colorimeters that also connect to full Windows applications for their more complete Difference analysis and versatility.

No comments:
Post a Comment