Let me debunk that dress debate that’s been going around. It is gold and white… well, depending on what image you view. In all honesty, the majority of the images I have seen contain blue and yellow (why has no one mentioned this?).
Before you get all defensive, read ahead, it isn’t your fault and I’ll prove it to you. Blame it on the camera or photo filters, the white balancing is all off.
I should note I originally saw the article on Wired.com and took their photo for further analysis.
First let me introduce myself, I am Austin Walters, a senior in CS at UIUC. I have spent the past two years working on my senior thesis in computer vision. I spend the majority of my time analyzing color spaces, designing camera drivers, creating calibration software, and testing edge detection, which is why this whole image thing is driving me nuts.
Here’s how I will prove to you that the dress you see is actually gold and white (or more accurately light blue and light yellow), at least according to this photo.
First, I converted the image to the Lab color space. The Lab color space is just like RGB, except it is designed to be the color space, that we as humans interpret the world. Once I convert it to the Lab color space it becomes exceedingly clear that the originally depicted is gold and white (or at least not blue), until they altered the white balance.
The Lab color space is often used in computer vision, because it filters out the light channel from an image (this does not mean it can fix a photo that has color issues such as the one below).
The a channel represents the green to red colors, the b channel represents the blue to yellow, and the L channel represents black to white.
You can do this in matlab using the following code (github):
img = imread(imgFile);
colorTransform = makecform('srgb2lab');
img = double(applycform(img, colorTransform));
Now, here’s the original image if you haven’t seen it (left is original, right is altered to appropriate white-balanced).
Here’s the image of the b-channel of the image (which contains the blue-to-yellow color channel):
- white or black should appear as white on the gray image
- Blue should be dark
- Yellow should be bright
Clearly the only one that should be interpreted as a strong blue color is the last image. The image on the left is arguably entirely void of blue, the middle has some, but very minimal blue, and all of the images contain some yellow around where the black should be. The other images contained very mixed results, and are weekly yellow and blue (none of them are completely black), my guess, is that the camera lens caused part of this issue.
Essentially, (according to the output) “the dress” should be considered yellow and blue.
Just for completeness, here is the a channel of the Lab space image (red to green color channel)
Apparently, some minor amount of red is also picked up in the a-channel, which makes sense because to me the altered image looks like dark gray and indigo. Indigo is picked up both in the a and b channel, (i.e. blue and red), and as such still wouldn’t technically be blue.
And, if you would like to see the whole image converted to the Lab color space, here you go
You can see the clear change as they alter the image.
No where in there is blue solely seen, and especially not in the first image. This isn’t an optical illusion, it’s just poor photography.
If you want to try it out yourself, here’s my Github Repo with the code. It was originally used for edge detection in the Lab color space, but it should output the Lab image, with the a and b channel for you.