I recently attended a show at the Institute for Contemporary Art in Boston featuring work by Shepard Fairey. It got me thinking how simple it can be in MATLAB to make a 4-color image and adjust it however you like.
First, let me get an image. This one is a gray-scale image.
Ic = imread('pout.tif'); imshow(Ic)
Next let me choose a palette of colors, and display them.
lilac = [.5 .4 .9]; darkblue = [.1 .3 .8]; lightblue = [0 .5 .6]; red = [.8 0 0]; cm = [darkblue; red; lightblue; lilac]; image([1 3;2 4]),colormap(cm), axis off
Next I choose levels for grouping pixel values into 4 color bins. The minimum and maximum values of my image are close enough to 0 and 255 to not bother stretching the range.
ans = 74 ans = 224
My first attempt at binning creates equal size bins.
levels = linspace(0,255,5)
levels = 0 63.75 127.5 191.25 255
Next I create a new image by combining 4 binary images with the appropriate multipliers.
Idb = (Ic <= levels(2)); Ir = Ic<=levels(3) & Ic>levels(2); Ilb = Ic<=levels(4) & Ic>levels(3); Ipy = Ic<=levels(5) & Ic>levels(4); Ic4 = Idb+2*Ir+3*Ilb+4*Ipy; imshow(Ic4,cm)
What happens when I change the color order? Features appear different with different color selections.
cm = [darkblue; lightblue; lilac; red]; imshow(Ic4,cm)
Now I finetune the color bins to emphasis more detail from the original image. I then recalculate the binary images according to the new bins and recombine them.
levels = [0 90 128 155 255] Idb = (Ic <= levels(2)); Ir = Ic<=levels(3) & Ic>levels(2); Ilb = Ic<=levels(4) & Ic>levels(3); Ipy = Ic<=levels(5) & Ic>levels(4); Ic4 = Idb+2*Ir+3*Ilb+4*Ipy; imshow(Ic4,cm)
levels = 0 90 128 155 255
Choosing appropriate colormaps for displaying data is very important. You need to be careful to not exaggerate unimportant details. Here's an interesting reference from one of my geophysics periodicals.
A. Light & P.J. Bartlein, "The End of the Rainbow? Color Schemes for Improved Data Graphics," Eos,Vol. 85, No. 40, 5 October 2004.
Do you have any special colormaps you use for exploring or displaying your data? If so, can you post information (perhaps with links of plots to look at) here?
Get the MATLAB code
Published with MATLAB® 7.8
Comments are closed.