Frequent readers of this blog have watched me try to get a handle on what’s going on with the microlenses in the Fujifilm GFx 50S. Jack Hogan took a crack at it earlier in the summer, but his business required his attention. Brandon Dube volunteered, and it looks like he has pretty much figured it out. This is a guest post from Brandon explaining what he did and what he found. And just so I don’t bury the lede, the effective fill factor of the GFX 50s turns out to be about 76%
But first, you may be wondering who Brandon is? Here you go:
Brandon Dube is a senior optics student at the Institute of Optics, University of Rochester. He works in Dr. Jannick Rolland’s Optical Diagnostics and Testing Lab (ODALAB), as well as the Center for Freeform Optics (CeFO) at the institute, and is also the Director of Metrology at Olaf Optical Testing, which many readers know as Lensrentals, as Olaf is heavily featured on the LR blog. This summer, he has been working at JPL on the cameras for the Mars 2020 rover. Earlier this year, he received the Kevin P. Thompson prize, the highest award given to undergraduate optics students. You can read his resume here,
Brandon has helped me from time to time on optical issues that go beyond my extremely limited abilties, like this problem. I am grateful for all you do, Brandon. Take it away.
Take it away, Brandon.
This is an effort to weasel out what the fill factor of Fuji’s new G50s camera is. Jim has recorded spectacular MTF for the GFX lenses with this camera, and Fuji claims that “Both the shape of the light-gathering micro-lenses and the processing from the photodiodes have been optimized to achieve a high level of sharpness and broad dynamic range.” It seems that the lack of optical low-pass filter and possibly undersized microlenses, combined with very good lenses for the system is a recipe for aliasing. Many users actually are in favor of this, as aliased images lead to the impression that their pictures are very sharp. They are sharp indeed, but not faithful.
I will use Powell’s directional search method of nonlinear optimization to first build a model of the lens against MTF data from Olaf, then use another solve to find the pixel aperture. Powell’s method is overkill the second time, since the problem only has a single dimension, but it will not underperform another algorithm.
The code for this is available here .
Jim has provided me with images of a razor blade taken at a distance of about 2 meters with a Zeiss Otus 85mm f/1.4 lens, at f/4. I chose this lens because it is largely free of color aberrations, something I did not want to model, and at relatively wide apertures is very close to the diffraction limit. I wanted a relatively wide aperture so that the contribution to the system MTF is at least as much to do with the sensor as the lens, reducing the influence of modeling error in the lens from the result.
I used dcraw to convert the raw files to linear 16-bit TIFF without demosaicing, and MTF Mapper to compute the MTF for the red color channel. I could analyze any channel, red was an arbitrary choice.
First I’ll use knowledge of aberration theory to build a model for the lens which neglects chromatic aberrations. Because we are on or near the optical axis, coma, astigmatism, trefoil, and other higher order aberrations should be 0 because of rotational symmetry. In practice they can actually be quite large because of misalignment, but I assume Jim’s lens is well aligned. Alignment issues are not common with the Otus 85, and at f/4 there is not much variation between copies of the lens.
Without these aberrations, we are left with axial color, which I choose to ignore, and the various orders of spherical aberration. Spherical aberration has a 4th, 6th order, or higher dependence on the radial coordinate in the aperture of the lens depending which variety it is. Higher orders are usually balanced with lower orders, and the magnitude decays as the order increases. f/4 is the same as f/1.4 in the pupil plane, but the edges of the aperture have been blocked. Since the higher orders of spherical are more dependent on the radial coordinate, they are more greatly reduced by stopping down and thus we expect more 4th order spherical than 6th order.
I should also model defocus, as we cannot take for granted that any data we have is for absolutely perfect focus. However, I will constrain defocus to be “reasonable”, enforcing that our model is near the peak of the through-focus MTF curve. Lastly, aperture mechanisms aren’t perfect, so we’ll let the f/# vary too but also constrain it to be close to f/4.
I will use the fringe Zernike notation for aberrations; the orthogonal basis helps convergence during optimization and guarantees our focus criteria, which is not true of e.g. the Seidel notation.
After optimization, I acquire this result for the lens MTF curve:
The red and blue lines are the tan/sag MTF modeled, and the dots are the measured values from Olaf, which are the same for tan/sag. The optimizer retrieved the following parameters:
- Z3 (defocus) = 10nm RMS, a 0.4 micron focus error in the image plane
- Z8 (low-order spherical) = 9.98nm RMS
- Z15 (high-order spherical) = 2.5nm RMS
I did not include a focal length variable, as it has no impact on the MTF if the f/# is free to vary (the two are completely covariate).
With these inputs, I modeled the PSF of the lens, which looks like this:
It’s close to, but not quite an airy disk, as we expect for small aberrations. The PSF is simply the Fourier transform of the pupil.
Finally, I run another optimization with the pixel aperture as the only variable, matching against the curve produced by MTF Mapper from 0cy/px to Nyquist. I do not fit above Nyquist, because aliasing in the images, caused by a less-than-100% fill factor, will skew the MTF above nyquist. Combining all the results produces the following plot,
If we divide the model pixel aperture by the pixel pitch, ands square it, we get a fill factor of 76%. I don’t know how this compares to other cameras. Some quick sanity checks on the error of our model,
The fit seems good, except at very high frequencies. If we adjust the x axis,
The fit is very good indeed. There should be no error at 0 cy/mm, but the spline interpolation I used to resample the curves onto the same grid did not do a good job fitting at very low frequencies. I would ignore the error below 10 cy/mm. Less than 0.25% error is pretty good. Good enough for government work.