So I have finally figured out how to create linear raw monochrome DNG images that Photoshop can actually load (me trying to figure out how to do that was the topic of this thread What are the minimum required tags for a DNG file? ) but now I notice something unusual. Photoshop (or at least the Camera Raw plugin) doesn't use the transfer function I was expecting to convert linear raw monocrhome values to standard grayscale values that are ready to be displayed. I assumed that it would use the gamma 2.2 transfer function (like that used in sRGB and sGray color spaces), but it doesn't. Instead, it uses something drastically different. After creating a test monochrome DNG image with dimensions 256x256, and bit-depth of 16bpp, I loaded it into Photoshop with the Camera Raw plugin. For the Camera Raw settings, I disabled all of the raw processing options (Exposure, Contrast, etc controls on the "Basic" tab, all set to 0, and all sharpening and noise reduction values on the "Detail" tab, also set to 0), and the Process (on the "Camera Calibration" tab) set to "2012 (Current)". The test image had one pixel at each possible 16bit value, so that for the entire 256x256 image, all possible 16bit values were in present.
After loading it into Photoshop, I then proceded to convert it to Grayscale (since it loads as an RGB image, even when it's a monochrome DNG image file). I then saved it as an uncompressed TIF file, and used a hex editor to extract just the portion of the file that was the bytes of image data and saved this to a new file (I couldn't save as raw image byte array from Photoshop directly, because I'm using Elements). I then wrote my own program that compared those values, to the the linear raw values, and graphed the resulting curve. This allowed me to visualize the transfer function that Photoshop was using. I also did the same thing with the sRGB/sGray transfer function (which is a piece-wise function that is very close to being output=input^(1/2.2) but not quite, where part of it is a power function, and part of it is linear), as well as the actual gamma function with output=input^(1/2.2). I displayed all 3 of these curves on the same graph, and was amazed at just how FAR AWAY the Photoshop monochrome DNG transfer function was from the standard gamma function. Sadly, I don't know the actual equation used here, and I just hope that it isn't proprietary. I was able to get a fairly close approximation to it by using the ATan (inverse tangent) function. The equation I came up with that approximates it is:
output=ATan(input / 8986.905) * 45684.399
And the fact that the main function of ATan happens to work I found just by trial and error. I also tried various power functions and logarithms. I don't think the actual function Photoshop is using is based on ATan, it's just that ATan closely mimics Photoshop's transfer function here. If somebody here knows the actual transfer function that Photoshop uses for converting monochrome linear DNG image files to standard grayscale images, please let me know.
And by the way, I've included a picture of the graph that I had generated showing 3 different transfer functions.
The black line is the one Photoshop is using.
The red line is the the sRGB/sGray transfer function
The blue line is the power function: output=input^(1/2.2)
And here's the comparison of Photoshop's transfer function, and the transfer function I came up with after about an hour or two of trying different base functions and different values for multipliers.
The black line is the transfer function that Photoshop is using
The red line is the one I came up with after an hour or two of trial and error: output=ATan(input / 8986.905) * 45684.399
Again, if anybody can tell me what transfer function Photoshop is using here, please let me know. Thanks in advance.
What will be used in the exported TIFF is the transfer function of the TIFF color space. So, e.g., if the color space is ProPhoto, it will be a 1.8 gamma transfer function., etc
Since I'm using Photoshop Elements I don't have much control over color space. However, I have switched it to "No Color Management" in the dialog box that comes from pressing ctrl+shift+K. I believe what is being saved in the TIF file is a direct memory dump of the image-bytes in Photoshop (same as when saving RAW as you could do in normal Photoshop, but that I can't do because I have Elements), and not any kind of color profile or color space based color conversion of those bytes.
After running exiftool on the TIF file though, I notice something interesting in the metadata it was able to pull.
|Tone Curve Name||: Medium Contrast|
|Tone Curve||: 0, 0, 32, 22, 64, 56, 128, 128, 192, 196, 255, 255|
I don't recall seeing any Tone Curve in any settings, so this may be something that would normally be available to configure in settings in Photoshop, but because I'm using Elements it is hardcoded into the program. I'm not exactly sure though what the curve algorithm is. However, it may just be a piecewise linear curve, as it appears contain an even number of entries, that appear to be number pairs (each entry is somewhat close to the number next to it, like 0,0 and 64,56). I'm not sure if this tone curve is the only thing that is producing the results I noticed with Photoshop's transfer function, or if it's just one of several steps in computing the transfer function.
Photoshop and Lightroom (and probably Photoshop Elements) can apply automated settings, including a tone curve, when images are imported. Generally, that will happen if a CFA image is loaded, but shouldn't happen if a linear raw image is loaded. But (a) I don't know under what exact circumstances what automated adjustments happen, and (b) Photoshop Elements as distinct from Photoshop may well play by it's own rules.
If you simply plot the pairs listed in the Tone Curve, you will see it is an S-curve. There seems to be no S-Curve component in your black line plot, so apparently this tone curve is not affecting the black line transfer function. I have no idea why the black curve is so strong, as I don't know of any display device or standard that specifies such a high value for gamma.