For a scientific study, I have to classify pictures of crop canopy in two classes: vegetation / soil.

These picture are taken at several places, different times and date. The idea is to use the same range of "colorimetrics" to identy each pixels belonging to one class in each pictures. Basically, I want to define the color of the pixels that are soil and those that are vegetation.

Given the different configuration and exposition of the pictures, I would like to calibrate my pictures to get the same "green" in each of them.

I have read some articles on the color calibration using International Color Consortium (ICC) profiles, but they are very contradictory and I can figure out if I could use it for my purpose. Any suggestions ?


Given that you have to detect vegetation and soil in images your goal must be to make sure all vegetation and all soil are different looking in the resulting image or, that you can make them different enough to be detected. ICC profiles are not the best tool for this job. Essentially an ICC profile can be created from the camera's spectral sensitivities at a given illuminate, and will calibrate the resulting output so long as the illuminate doesn't change. Well in daylight photography, the illuminant will certainly change radically, and AWB will not compensate for the change in spectral inputs to the sensor, so that white point calibration would be far too critical to make an ICC profile approach viable.

The other reason this approach would be problematic, is due to the fact that foliage reflectivity can vary greatly depending on plant type. So it would be very difficult to create an ICC profile that takes a large number of green and maybe even blue or yellow color values and make them all one color or a much closer grouped set of colors with an ICC profile. Also of note that using any profile tool such as the ColorChecker passport etc. will only calibrate your camera to the colors in that target, and not to your foliage colors. There is also no provision in today's ICC profiling tools that enables you to make the structural changes to a profile like you wish to do. So this type of edit or profile creation technique is not possible with those tools.

I would recommend another approach. Change to an IR camera or an IR modified camera. In that range of color sensitivity, any sunny day image would provide immediate differences in light and dark tones between foliage and soil. Choose a camera with a higher IR sensitivity band over 730nm to make sure you get the maximum contrast.


You use color references to create an ICC color profile for the specific lighting conditions and camera settings, then take shots and the color information contained in the pictures plus the ICC profile provides you with the proper color information.

Check out some of the color targets through this link. I personally use the ColorChecker Passport.

Make sure you understand that you will have to take reference pictures if your lighting conditions or camera settings change, and you will have to create color profiles each time!


The other answers seem to be about correcting the image gathering rather than doing color based image processing, if I understand your question correctly.

To rephrase your question slightly, are you saying that you'd like a profile that would "classify" colors in an image into two groups, and then assign those colors to one of two values? (basically creating a very flat looking image with two colors)

Yes, this can be done but not with a normal ICC device profile (which are typically used to convert from some device (camera, scanner, display, etc) TO some other device (printer, display, etc).

An abstract ICC profile or device link profile might do the job but would need to be specifically built for the purpose. I've done that sort of thing in code but I don't know of a tool that would do it.

Either of these specialty profile types convert from Lab->Lab color values (abstract profile) or device->device values (device link, like RGB->RGB). If you are able to determine unique Lab or RGB ranges for each of your classes (Lab is likely easier to do this with), then you're part way there.

Interestingly, you might be able to perform a cruder but similar function in Photoshop using adjustment layers and thresholding.

  • Thx for the answer. You understood my need. Have you some material (doc, ref...) to recommend about the abstract profiles ? And if you can share your code or the method that you have used, I am really interested. – DJack May 20 '14 at 6:42
  • The only material that comes to mind is the ICC profile spec (color.org) which is quite arcane and painful. Otherwise you could either hire someone to create it in code or wait for our future ColorThink version which may allow you to do this (but is a year away or so....) – Steve Upton May 20 '14 at 21:07

Your best bet is probably to use a color target with known colors, but lighting throughout the scene is going to cause lots of variation in the scene so unless your threshold for the difference is pretty high, you are likely to run in to problems regardless.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.