1. A non-transitory computer readable medium storing a computer program which when executed by at least one processing unit matches colors of a first image to colors of a second image, the program comprising sets of instructions for: identifying a first set of transforms for converting pixel values of the first and second images from first and second color spaces to a device-independent color space; modifying the first set of transforms to generate a second set of transforms that not only convert the pixel values of the first and second images to the device-independent color space, but also shift colors during the transform in order to segment the colors into more-defined color segments in the device-independent color space; applying the second set of transforms to pixel values of the first and second images; and modifying, for each color segment in the color segments, pixel values in the first image so that colors of pixels in the first image that fall within the color segment shift towards colors of pixels in the second image that fall within the color segment.