dcb.lu

Hail to the Red, Wäiss, and Blauw

First, A Few Fun Flag Facts

Luxembourg and the Netherlands have nearly identical flags, save for two differences: a slightly different proportion1 and a different blue for the bottom stripe. I recently started wondering, though, how different are they?

The definition of Luxembourg’s blue is fairly straightforward. Because no one had really bothered to make the flag official for about a century, the precise definition of the flag wasn’t written until 1993 and used Pantone to define its colors, which are then pretty easy to look up sRGB values for.

The Dutch flag is a little trickier. It was formally defined back in 1949, predating Pantone. Here’s a translation of its defintion:

When illuminated by standard illuminant C with an incident angle 45 degrees to the surface, the values ​​of the trichromatic coordinates and the trichromatic coefficients when observed in a direction perpendicular to the surface are as follows:

X Y Z x2 y2
Red 18.3 10.0 3.0 0.5847 0.3195
Blue 7.5 6.6 25.3 0.1904 0.1675

The coordinate system is chosen in such a way that the following applies for an idealized white surface: Y=100.

The keen-eyed color nerd will recognize this as probably being the CIE 1931 color space. Conversion to sRGB is finicky, but after working through that you can find a good approximation with the color #21468B. But what really surprised me is that running this same process on the Dutch red also produces a different red than the Luxembourgish flag, despite usually being referred to as being identical: #AE1C28 for the Netherlands but the distinctly brighter #EF3340 for Luxembourg.

The next question for me is how these line up with my native red/white/blue flag, the United States' Old Glory. These used to be defined by a standard textile swatch that bore some resemblance to an old-school Pantone, and seem to have been incorporated into Pantone’s palettes. The exact Pantone colors can be found in the State Department’s extremely thorough style guide. After all that, we end up with these lovely hues:

United States
#041e42
Netherlands
#21468B
Luxembourg
#00A3E0

United States
#bf0d3e
Netherlands
#AE1C28
Luxembourg
#EF3340

Colorimetric Distance

Okay, they’re definitely all different colors, but you could probably swap out the American and Dutch red and no one would notice. Is there a good way of measuring the distance between two colors? Enter the lovely L*a*b* color space.

Created by CIE in 1976 (same folks from the XYZ color space used in the Dutch flag), L*a*b* is special because it is uniform, meaning that the euclidean distance between two colors often corresponds pretty closely to how similar two colors appear, called ΔE3. This has a few caveats for strongly saturated colors, but compared to the current state of the art its simplicity is worth a fair bit. A value of less than one means they’re likely imperceptibly similar, and a value between 2 and 10 usually means they’re pretty clearly different at a glance.

Great, so let’s convert from sRGB to L*a*b* and find ΔE! This is roughly as finicky as the translation to CIE XYZ with one more step to take us from XYZ to L*a*b*. With that out of the way, we end up with this lovely table:

Blue US NL LU
US 0 26.15 57.14
NL 26.15 0 41.50
LU 57.14 41.50 0

You obviously don’t need these numbers to tell you that these colors are different from one another, but it’s still an interesting exercise. The big thing that sticks for me while doing this calculation is that the Dutch and Luxembourgish blues differ almost purely in luminosity. If you set Luxembourg’s L* value to match the Netherlands, you end up with the near perceptual twin #005288:

Netherlands
#21468B
Dark Lux
#005288

However, the ΔE between these two is a fairly high 26.19 – supposedly as different as the American and Dutch blues are. I guess this highlights the shortcomings of the dE76 euclidean calculation for color similarity. But if we buckle down and try out the Delta E 2000 (dE00) algorithm, we get ΔE = 17.25, which still feels pretty high to me. I dunno, maybe I just have a bad intuition for these things.

Red US NL LU
US 0 12.65 20.69
NL 12.65 0 21.24
LU 20.69 21.24 0

Again I’m surprised by how high the ΔE is, this time between the US and Netherlands. I could’ve sworn it would be around 5. (I later ran this using the dE00 algorithm and got a ΔE of 4.72, which feels a lot closer to what I’d expect.)

Anyways, we’re done! Well, except…

Oops, Wrong White Point

All of these conversions between color spaces depend on what exactly we mean when we call something “white.” For nearly all modern applications, this refers to a white point known as D65, which is meant to represent the average spectral density of daylight. If you’re working with printing processes, you might be working with the slightly different illuminant D50, but almost everyone uses D65 for almost everything. Just about any color converter you’ll find online uses D65 implicitly. However, D65 wasn’t defined until 1976, long after the Dutch flag was standardized! The Dutch Minister of the Navy really did mean Standard Illuminant C, which was defined by CIE back in 1931 by using an incadescent lightbulb and a special liquid filter to mimic daylight. It turned out that it wasn’t a very good model so it’s been deprecated ever since the D series was formalized. So, what happens to our color when we account for this? Drumroll please…

Illuminant C
#1e4785
Illuminant D65
#21468b

Illuminant C
#ad1d25
Illuminant D65
#AE1C28

Hm. Not a whole lot, apparently. Algorithm dE00 spits out a ΔE of 0.86 and 1.73, respectively. Still! It’s worth being careful with these things. Every Wikipedia article I’ve seen uses the incorrect D65 illuminant for its sRGB conversion and as far as I can tell, there is zero mention of this corrected color in relation to the Dutch flag anywhere on the internet. I highly doubt that I’m the first person to run these calculations but I can’t find anyone else who has documented4 it.

It’s surprisingly difficult to find an image of the Dutch flag on any central goverment site. The central government has a logo that uses a blue similar to its flag, but as far as I can tell it isn’t intended to be identical. Still, even this specification is confusing. It was at one point specified to use #123552, but I think this may be out of date because just about every official website I checked uses #154273 instead – including its own.

Here’s what I could find, at least:

  • rvo.nl has a national factbook that uses slightly-off colors for Luxembourg’s flag, and (understandably) lacks a listing for the Netherlands. I did find this page though, which uses the wrong D65-calculated color.
  • ind.nl has a flag in the corner for its language selection, which uses the incorrect colors #d52b1e and #01679a.
  • Of the few hundred flags I sampled on Google Images, I didn’t find a single one that used the right color. #204488 made several appearances, though I’m not exactly sure why.

Conclusion

This isn’t where I expected this question to go! Any question regarding color leads to a functionally infinite rabbit hole to dive down, but this one had a fun historic flair to it that I haven’t needed to think about before. How colors are represented in law is also generally a pretty neat topic, and if it’s something that piques your interest I recommend digging into the wild world of trademarked colors. If you’re feeling a bit bold you might even decide to to grab some of these colors for yourself and go commit some color crimes :)


  1. Interestingly, the Luxembourgish flag has two officially accepted proportions – 1:2 and 3:5 are both considered fine. I don’t know of any other countries that do this, though I’m sure someone better versed in vexillology could come up with an example. ↩︎

  2. These coefficients just refer to an equivalent reformulation of the CIE XYZ color space called CIE xyY↩︎

  3. The E stands for Empfindung, German for sensation or impression. You know, just in case 3 Germanic languages weren’t enough for one blog post. ↩︎

  4. Just for replication’s sake, I ran this calculation with the colormath python module, version 3.0.0↩︎