When Perceptual Rendering Intent isn't Really Perceptual
In the world of color management, not all profiles are created equal. Simply put, some of them are smarter than others. When it comes to understanding rendering intent, not all of them know what you mean if you select Perceptual intent.
Some ICC profiles are based on look-up tables (LUT) that define a corresponding output color for a list of input colors. They can contain tables for multiple rendering intents since the conversion will yield different same results for different intents. Table-based profiles list only a subset of possible input colors and will interpolate between points for colors not listed. The more points they list, the more accurate they will be, but even a dozen points can often suffice to provide good results for many devices. Even small table-based profiles though contain a reasonable amount of data and will occupy a couple hundred kilobytes or more. Some are over a megabyte in size. Profiles for devices with complex color responses such as printers are generally LUT profiles.
Other profiles are matrix-based and contain simple descriptions of the corresponding color space in terms of its white point and gamma along with coordinates that define the chromaticity or colorant of each channel such as red, green and blue. They do a reasonable job of defining metrics of the color space but nothing too helpful in terms of how to map colors from it to anything else. Matrix profiles support only a single rendering intent: Relative Colorimetric. When converting between matrix-based profiles, any colors that don't fit in the target profile simply get chopped off. Matrix profiles tend to be quite small, only less than one kilobyte in size. Working space profiles such as Adobe RGB and sRGB are matrix-based as are most input and display profiles.
So if a profile doesn't understand a certain rendering intent, what happens if you select that intent in Photoshop when you convert? Good question. You might expect that Adobe wouldn't even let you select an unsupported intent but they do. The dropdown list in Photoshop's Convert to Profile always lists Perceptual, Saturation, Relative and Absolute Colorimetric intents no matter which profiles you are working with. Since matrix-based profiles only understand Colorimetric conversion, why are the other ones even listed? And perhaps more puzzling still, what happens if you select something else? Oddly, Photoshop will go ahead and use Relative Colorimetric no matter what you select. It won't complain or explain; it will just go ahead and use Relative Colorimetric since that's all a matrix profile knows how to do. The others are just there to give you a false sense of control over the conversion process perhaps. Who knows? But the bottom line is it doesn't matter what you select. Relative Colorimetric is what you get.
This may seem an esoteric "feature" at first, but it does have real world consequences. It's not at all uncommon to convert between working spaces for instance. I've done it myself countless times. Open a raw file into ProPhoto RGB, and then later convert to Adobe RGB for instance. If you select Perceptual rendering intent in order to avoid banding issues, you'll get Relative Colorimetric anyway along with its tendency to cause banding at the edges of the target gamut when going from a big color space to a smaller one. You probably won't realize since very few monitors themselves have a wide enough gamut to see the problem. Not good.
If instead you open a raw image into Photoshop and leave the document in ProPhoto RGB (or whatever initial space you converted to from raw) until it comes time to print, Perceptual intent will actually work since printer profiles are generally table-based and support it.
Try it yourself if you don't believe me. Open a blank document in ProPhoto RGB and cover it in a rainbow gradient. There's a standard one that comes with Photoshop that ranges though the whole spectrum quite nicely. Now use Image >> Duplicate to create a copy. Convert one using whichever printer profile you generally print with using Perceptual intent. Convert the other using the exact same profile but use Relative Colorimetric intent. Now copy one on top of the other and set the blending mode of the top layer to "Difference." Points that are identical between the two layers will result in black. Points that aren't the same will show a color based on how far apart the values in each channel are in the two layers. You may need to look close to see anything since you monitor likely isn't up to the task at hand. To see more clearly, try Image >> Adjustments >> Auto Levels. You may still not see much without a good monitor, but the histogram should show that the resulting two images are not identical.
Now do the same thing but instead of converting to a printer profile, convert one copy to sRGB using Perceptual and the other using Relative Colorimetric. Layer one on top of the other as we did before and do the Auto Levels thing. No matter how good your monitor is the image and the histogram will show the blended image to be nothing but pure black: both rendering intents produced identical images.
Strange, but true.