Anyone have SSF Data for the A7III?

Made a profile based on SSF and ColorChecker SG for my A7RII and it blew me away how much better it looks than photographed target image profiles. I want to do the same thing for my A7III but I can’t find SSF data anywhere. If anyone has the capability to measure it I’ll gladly pay for your services!

1 Like

I am working on the same thing for my Nikon Z6.

There are research projects out there that have published data for the cameras they measured, but the list is short. Nikon D700 got the most love; three datasets I’ve found to date. rawtoaces has a couple of Sony A7 cameras, you might see if one of them matches your camera:

I don’t know what tool you’re using to make your profiles, but you’ll probably have to reformat the data. If you’re using dcamprof, I wrote a perl script:

#!/usr/bin/perl

$first = 1;
$lineno = 1;
open(FH, '<', $ARGV[0]) or die $!;

while(<FH>){
   $line =  $_;
   chomp $line;
   $line =~ s/ //g;
   $line =~ s/,$//;
   ($r, $g, $b) = split  ",", $line;
   if ($first) {
     $red   .= sprintf "\t%f", $r;
     $green .= sprintf "\t%f", $g;
     $blue  .= sprintf "\t%f", $b;
     $first = 0;
   }
   elsif ($lineno % 5 == 0) {
     $red   .= sprintf ", %f,\n", $r;
     $green .= sprintf ", %f,\n", $g;
     $blue  .= sprintf ", %f,\n", $b;
     $first = 1;
   }
   else {
     $red   .= sprintf ", %f", $r;
     $green .= sprintf ", %f", $g;
     $blue  .= sprintf ", %f", $b;
   }
   $lineno++;
}

close(FH);

$json = <<'JSON';
{
  // camera name, should preferably match established manufacturer and model
  // name used by raw converters
  "camera_name": "Nikon D7000",

  // bands in nanometers, described the same way as for spectrum format
  "ssf_bands": [ 380, 780, 5 ], // 400nm to 720nm in an interval of 10nm

  // Response functions for red, green and blue. Scaling for the responses
  // must be the same for all three, but it does not matter what it is, as
  // the response will be normalized before use. Setting the maximum to 1.0
  // is typical.
JSON

print $json;

print "  \"red_ssf\": [\n$red\n  ],\n";
print "  \"green_ssf\": [\n$green\n  ],\n";
print "  \"blue_ssf\": [\n$blue\n  ]\n}\n";

Now, here’s something to consider. I got to looking at SSF plots of recent Nikons, and they look quite similar. So, I tried my D7000 profile with my Z6 and lo, it works quite well! My hypothesis is they are specifying one dye supplier for the Bayer array of their sensors; you might run into something similar with Sony if the rawtoaces profiles aren’t a strict make/model match.

My COVID project is to find a way to measure this, cheaply. I’m in the middle of fabricating a spectrum-based contraption using a cheap school-grade diffraction grating, in the manner described by these folks:

https://www.hdm-stuttgart.de/open-film-tools/english/camera_characterization

They have a set of files to 3D print the box, but I have a lot of wood in the garage… I’m going to write up a series of posts for here on the whole thing.

Oh, by the way, welcome to the forum. This is a good place to discuss all things digital imaging…

1 Like

Thanks Glenn! I’ve been spending so much time working with raw files, ICC profiles, 3DLuts, film data sheets, etc, and trying to learn DcamProf and Argyll. Having no mathematic, coding or even Terminal experience at all, this has been a learning experience for sure, haha.

Yeah, RawtoAces is where I got the A7RII data. I ended up reformatting the data by hand in Numbers and using find/replace in TextEdit. For future how would I go about running your Perl script?

I’ve probably read a lot of the same research papers as you and bought a little stack of grade school style diffraction grating slides. It’s tough to get everything aligned precisely enough to get data that I’m confident in so I’m really interested in what you’re putting together.

Have you ever tried to digitize film sensotiveity curves for the purposes of digital emulation?

You’d need to install Perl; I’m running Linux, so it just comes with the distro. If Windows, I haven’t done that in a while; ActiveState Perl?

I just got a pack of those gratings from Arbor Scientific; I’m building a box similar to the Open Film Tools contraption, and I’ve put some tools in my hack software to pull the data from the images. I bought a Lowell Pro-Light for a tungsten-halogen source, with the intent to use it for slide and print copying in addition to the SSF thing. Not sure what to do for a calibration light; thinking about just wiring a red, green, and blue LED of known wavelength to a battery and switch.

By that, you mean, extract the X,Y values from a plot image? If so, I’ve considered doing that for SSF data, writing a tool to display the image and read the values as I select points on the curve.

I’ve written the first installment of my series, will probably put it up in a day or two. I think you probably know most of it, so the second installment on shooting the spectrum should be of interest. Hopefully I’ll have something on that in a week or so…

I believe Numbers and TextEdit are macOS apps.

I use a Mac. I’ll look into how to install Perl. Thanks for the script!

Yeah, there are already a number of apps out there that can digitize the x/y plotted curves, but I haven’t found any that let you specify the x axis increments. I used one to digitize the ssf curves for Portra 400 and converted the log density data to normalized linear, but the curves are traced using unevenly spaced increments and I can’t figure out how interpolate that data to, say, 5nm increments. I tried using the unevenly spaced wavelengths, but I couldn’t get dcamprof to parse the data for some reason, even though it says it can use unevenly spaced increments. I could send you my data if you know how to write something that can interpolate to 5nm.

There is a decent chance you already have Perl installed. If not, then homebrew, macports, or nixpkg will get it for you with ease.

Will also ping @David_Tschumperle. G’MIC can easily interpolate data.

Ok thanks! I just installed home brew the other day, but have to admit that I barely understand what it is/does, haha. Working with terminal apps is still very new to me. I’m sure I can do some googling and figure it out. That is for pointing me in the right direction!

Homebrew is a package manager. It is like a command line app store. Probably brew install perl

Here’s a spreadsheet with the Portra 400 SSF data. The first sheet is the raw, logarithmic data from the chart image that I digitized. In the second sheet I rounded the wavelengths to integers, deleted the integers that ended up duplicated, and converted the log data to linear. The sheet called “linear for export” is just that data transposed to columns for export to csv. I tried to use that irregularly spaced data in dcamprof but kept getting errors. Maybe it was my json formatting or something, I’m not sure. If anyone knows how to and would be willing to interpolate the data for 5nm intervals over the range needed for dcamprof profiles (400-700nm?) I’d really appreciate it!

regarding dcamprof json, for “bands:”, you need to list the bands in order if they’re not periodic. See the spectrum.json file for a description: