After never-ending debate about quality of Camera profiles, I decided to try to measure how good these profiles realy are. For that purpose, I made a kind of custom raw file for D700, with a kind of test chart inside it. It was not physical test chart, photographed by the camera, but generated by the program.
I developped this chart with NX2 using standard profile, and with ACR using Camera Standard profiles version 1, 2 and 3. In case of NX2, I turned off all corrections (except standard profile). In case of ACR, I used default settings for each of those profiles and no noise reduction. Also, I developped this raw using ACR with my version of Standard profile, which was generated by modified code I used for calibrating Canon compacts that are not supported by ACR. Color space used was Adobe RGB, 16 bit.
After that, I made graphical interpretation of degree of mismatch between result from NX2 and ACR. Results are shown in attached picture. First picture from the top is a part of a test chart, as developped by NX2. Remaining pictures show the difference between that picture and pictures developped by ACR with these profiles, multiplied by 10 to emphasise the differences. Each pixel is calculated according to the formula
Red = 10 * Abs(Red_NX2 - Red_ACR)
Green = 10 * Abs(Green_NX2 - Green_ACR)
Blue = 10 * Abs(Blue_NX2 - Blue_ACR)
So, intensity of each color in those "delta pictures" shows the error for that color. For total match, this picture would be totaly black
So, it is visible that v2 beta profile (3rd picture from the top) was actually worse then the first version of this profile (2nd picture from the top). But, things improved considerably with v3 beta profile (4th picture). Anyway, there is still some room for improvement, as shown with last picture which is the best I could get with my code at the moment. On real life pictures it is very hard to see any difference between those two profiles
My profile for D700 (Standard only) can be downloaded here
This is not official release from Adobe, so take it as is. Default settings for this profile (that will match the result from NX2) are the same as for v3 beta, except that blacks should be 0 (default value for blacks is 5 for Camera standard v1, v2, v3)
I really like what you're doing here. I'm one who feels there should be at least one profile that provides an exact match to what the camera makers put out, and it seems to me you've accomplished just that. Bravo!
What does it take to make a Camera Raw profile for any given camera that matches so well? Do you just need to feed your software a raw file and an already converted reference image (e.g., by the camera maker's software) with all the colors in it?
Well, my point was that v3 beta profile is good enough (although calibration procedure can be slightly improved). On several D700 photos I had (thanks menno1000 for the samples, because I don't have D700), it's very hard to see any difference between results from NX2 and ACR using whether v3 beta or my profile
There are also slight differences between jpeg from D700 and from NX2. It's the same with my Canon 400D - I compared some jpegs from the camera with results from Raw Image Task and Digital Photo Pro and all versions are slightly diferent from each other
The main reason why I don't like older camera profiles is because of some issues in highlights (already discussed here), but this was addressed with v2/v3 profiles. But doing similar test on 400D shown me that there are also some highlight issues with in-camera processing (also addressed with new models). It's quite complex stuff
Also, in case of Canon, there are considerable differences between sRGB profiles and Adobe RGB profiles in DPP software (even well inside sRGB gamut), that is also a reason for some mismatches between results from ACR and DPP when using sRGB, because there are no separate versions of camera profiles for these color spaces. In case of NX2, these differences are much smaller
In short, I don't think we need an absoulte match with manufacturer's profiles and I completely agree with Jeff's opinion about that
About calibrating procedure, it consists of making testing raw file (with a program) and developping it by the camera (in case of Canon compacts) or NX2 or DPP (in case of DSLR-s). After that, I calculate a profile on the differences between input and output. Since my profile in most parts looks very similar to v3 beta, I suppose that Adobe team used very similar approach. However, it's quite tricky to do it right, especially with the compacts, where I have relatively low quality data to play with (10 bit raw and 8 bit compressed jpeg output), so it took a lots of experimenting.
Try thinking about it this way:
Blacks = 5 actually clips the shadows. For that reason, tone curve in v3 beta (and other profiles from Adobe) is slightly raised to compensate. But very dark shadows (below RGB level about 10) are still too dark and the darkest tones are clipped
Blacks = 0 don't clip shadows (according to dng sdk source code) and tone curve in this profile is calculated to that. Of course, if you set blacks to 5, shadows will be too dark (darker than with v3 beta with blacks = 5; they will be also darker with blacks=0 than with v3 beta, as you noticed, because v3 is calibrated to blacks = 5)
Here is similar comparison for the bottom part of gray scale (levels 0-85) with default settings for each profile (including blacks)
Top chart - grayscale developped by NX2
middle chart - delta frame with v3 beta showing amount of mismatch in the far bottom part
bottom chart - delta frame with this profile showing amount of mismatch in the far bottom part
It's evident that tone curve in this profile is slightly better matched to NX2 tone curve. But these are really extremly dark tones and this difference is quite unimportant
Hi Vit, thank you for pursuing this and sharing your results. Nice work!
Out of curiosity, what did you do for the V == 0 case? Did you sample many dark (low V) points, then apply some (weighted) averaging to estimate the appropriate values for the bottom plane of the HSV cylinder?
Here is the last version of the chart I used for calibrating D700
It's a 16 bit, linear, whitebalanced representation of actual chart in raw color space, with marked sampling areas (I had to do this visualization when optimising the procedure for compacts, because of low quality data). In this case, I used 12 bit uncompressed raw. Size and a method of sampling is probably the reason of slightly more accurate calibration than v3 beta overall. For D700 and 400D, I didn't perform any additional LUT smoothing, but performed some smoothing for TC, which is sampled with 1024 points and then resampled to smaller number of points.
For V==0 (value segment 0 in LUT), I sampled points at V = 0.4 / (ValueSegments-1). This position is just because I could't go much lower on jpegs from compacts. But, on last version of the code, I came to conclusion that I'm not interested in determining actual LUT values for the very bottom of HSV cylinder, which is black, but I'm interested that I have such values in LUT that LookupTableInterpolate procedure during raw development returns correct values for area around bottom sampled points (optimal position for these points can be slightly higher or lower to minimise average error in the bottom part). After calculating all LUT points, I recalculated SatScale and ValScale for bottom points of LUT to get this. I didn't find very important to recalculate HueShift, so I left it as is.
If you are interested in some additional details, contact me on PM and I'll explain, since this very technical stuff won't be interesting for other members