Originally Published: 2015-07-08

A while back (July 2010 going by Git commit history), I hacked together a program for automatically finding the GretagMacbeth ColorChecker in an image, and cheekily named it Macduff.

The algorithm I developed used adaptive thresholding against the RGB channel images, followed by contour finding with heuristics to try to filter down to ColorChecker squares, then using k-means clustering to cluster squares (in order to handle the case of images with an X-Rite ColorChecker Passport), then computing the average square colors and trying to find if any layout/orientation of square clusters would match ColorChecker reference values (within some Euclidean distance in RGB space). Because of the original use case I was developing this for (automatically calibrating images against an image of a ColorChecker on a copy stand), I could assume that the ColorChecker would take up a relatively large portion of the input image, and coded Macduff using this assumption.

I recently decided to briefly revisit this problem and see if any additional work had been done, and I thought a quick survey of what I turned up might be generally useful:

Data Sets