Jonathan Niehof
2016-07-04 16:31:19 UTC
In short, the attached snippet contains full (distortion + TCA +
vignetting) lens information for the Canon Powershot SD1100 IS/IXUS
80.
Caveats: the distortion information is from the existing IXUS 80
information in the database. I added TCA and vignetting data to the
IXUS 80 and copied it to the SD1100. This is the older database format
since I'm still running lensfun 0.2.8 (Ubuntu 15.10) and wanted to
make sure it worked with my current darktable. This camera doesn't
have an adjustable aperture, but an ND8 filter; when the filter is in,
the camera reports the "effective" aperture in the EXIF data, i.e. an
aperture that would give the same brightness. I'm assuming the ND
filter doesn't affect the vignetting or TCA.
The very long:
I shot with CHDK to DNG 1.3 raws. This is supposed to embed the
badpixels.bin data (bad pixels reported from the camera firmware) into
DNG opcodes so it can be removed by the raw converter; however, I
found a lot of obvious dead pixels (e.g. cyan blotches) in the dcraw
converted raws. I pulled the CHDK-generated badpixels.bin and parsed
it into the format that dcraw uses for its -P option. I converted all
vignetting images with no interpolation ("dcraw -v -t 0 -4 -o 0 -M -D
foo.DNG") and checked the pgm for zero-value (totally dead) pixels.
All the vignetting images gave identical results, which I merged with
the badpixels.bin list, and then edited calibrate.py to add the
appropriate -P option to all dcraw calls. Python code for all this is
available.
I made a lenses.txt file with the distortion from the existing IXUS80
in lensfun.xml, but with a changed first line: "Canon PowerShot SD1100
IS: Canon, canonSD100IS, 5.9". I edited line 169 of calibrate.py to
default to "Canon PowerShot SD1100 IS" (matching the exif) instead of
"Standard".
For TCA, I made several attempts with buildings before giving up. I
bought two black-and-white checkered tablecloths on Amazon, 137x274cm,
and hung them up. I set up a tripod about 6-7m away. Because at the
shorter focal lengths the pattern didn't fill the frame, I did five
shots: one with the pattern in each corner (filling as much of the
frame as possible) and one with the camera brought closer (about 4m
for the shortest focal length) so the pattern filled the frame. At
longer focal lengths (filling the frame), I took a couple of exposures
with slight movements of the camera between to get some differences. I
shot at ISO 80 (base), exposure on automatic, auto focus, with a 2sec
timer to avoid vibrations from pressing the shutter button. I shot at
all six. All exposure were without the ND filter (although I didn't
force that.)
I ran calibrate.py against all the images with a one-, two-, and
three-parameter fits. For each focal length, I parsed the .tca file
and plotted distortion vs. radius (r and b) for all images, looking
for reasonable agreement between the images. I took the mean of
parameters for all images at each focal length to plot parameter as a
function of focal length, looking for smooth variation with focal
length. (Code available.) The three-parameter (bcv) fit has poor
agreement between images and noisy variation with focal length. At the
shorter focal lengths, the two-parameter (b and v) was clearly very
good. The images taken closer in were clear outliers and I threw them
out. At longer focal length, neither one- nor two-parameter had
perfect agreemnt, but the two- had better, and in all cases the
deviation from no correction was larger than the difference between
the images. So I used the means of the two-parameter fits.
I shot vignetting images against a white ceiling about 2m from the
camera, mounted on a tripod facing up. A lamp was positioned right
next to the tripod and emitting from just above lens level, to avoid
camera shadow. I sandwiched a sheet of Rosco #216 white diffusion gel
between the lens below and glass above (two pieces, a sort of
"floating picture frame" that I had handy.) Focus distance was set at
maximum: I did not bring an image at infinity to focus. Again 80ISO,
auto exposure, 2sec timer, no ND filter. I shot all focal lengths,
then rotated the camera and gel so that the relationship between
ceiling, camera, and gel were all different (lamp and ceiling remained
in the same orientation) before shooting another set.
Using gnuplot output from calibrate.py, I verifying vignetting images
were generally smooth (and threw out two other sets of vignetting
photos where I tried a different approach to holding the gel, which
had obvious defects.) The two images for each focal length provided
very similar outputs.
For the XML, I copied the IXUS 80 verbatim (both camera and lens),
then changed model tag to match Exif.Image.Model (which is the same as
Exif.Image.UniqueCameraModel), made the lang en a short version, and
named the mount similarly. I populated both the IXUS 80 and the copied
SD1100 lens calibration with the new TCA and vignetting data. The
vignetting already had two lines per focal length (near and far
distances); I added two more lines for smaller aperture, based on the
camera-reported effective aperture with the ND filter in. Note that,
as with the IXUS 80, the crop factor is 6.1 for the camera and 5.9 for
the lens (based perhaps on full area vs. JPEG area?) I haven't managed
to get darktable to automatically recognize even the camera from the
exiv, but it works if I manually select the camera and then the lens.
Next on the agenda is vignetting on the Canon EF-S18-135mm f/3.5-5.6
IS (Rebel T2i), then full cal for the Fujifilm XF-1. Then darktable-y
stuff, if anyone's interested: base curves and color matrices and such
(probably try for the zero/dead pixel correction in DT, extending the
hot pixel module.)
vignetting) lens information for the Canon Powershot SD1100 IS/IXUS
80.
Caveats: the distortion information is from the existing IXUS 80
information in the database. I added TCA and vignetting data to the
IXUS 80 and copied it to the SD1100. This is the older database format
since I'm still running lensfun 0.2.8 (Ubuntu 15.10) and wanted to
make sure it worked with my current darktable. This camera doesn't
have an adjustable aperture, but an ND8 filter; when the filter is in,
the camera reports the "effective" aperture in the EXIF data, i.e. an
aperture that would give the same brightness. I'm assuming the ND
filter doesn't affect the vignetting or TCA.
The very long:
I shot with CHDK to DNG 1.3 raws. This is supposed to embed the
badpixels.bin data (bad pixels reported from the camera firmware) into
DNG opcodes so it can be removed by the raw converter; however, I
found a lot of obvious dead pixels (e.g. cyan blotches) in the dcraw
converted raws. I pulled the CHDK-generated badpixels.bin and parsed
it into the format that dcraw uses for its -P option. I converted all
vignetting images with no interpolation ("dcraw -v -t 0 -4 -o 0 -M -D
foo.DNG") and checked the pgm for zero-value (totally dead) pixels.
All the vignetting images gave identical results, which I merged with
the badpixels.bin list, and then edited calibrate.py to add the
appropriate -P option to all dcraw calls. Python code for all this is
available.
I made a lenses.txt file with the distortion from the existing IXUS80
in lensfun.xml, but with a changed first line: "Canon PowerShot SD1100
IS: Canon, canonSD100IS, 5.9". I edited line 169 of calibrate.py to
default to "Canon PowerShot SD1100 IS" (matching the exif) instead of
"Standard".
For TCA, I made several attempts with buildings before giving up. I
bought two black-and-white checkered tablecloths on Amazon, 137x274cm,
and hung them up. I set up a tripod about 6-7m away. Because at the
shorter focal lengths the pattern didn't fill the frame, I did five
shots: one with the pattern in each corner (filling as much of the
frame as possible) and one with the camera brought closer (about 4m
for the shortest focal length) so the pattern filled the frame. At
longer focal lengths (filling the frame), I took a couple of exposures
with slight movements of the camera between to get some differences. I
shot at ISO 80 (base), exposure on automatic, auto focus, with a 2sec
timer to avoid vibrations from pressing the shutter button. I shot at
all six. All exposure were without the ND filter (although I didn't
force that.)
I ran calibrate.py against all the images with a one-, two-, and
three-parameter fits. For each focal length, I parsed the .tca file
and plotted distortion vs. radius (r and b) for all images, looking
for reasonable agreement between the images. I took the mean of
parameters for all images at each focal length to plot parameter as a
function of focal length, looking for smooth variation with focal
length. (Code available.) The three-parameter (bcv) fit has poor
agreement between images and noisy variation with focal length. At the
shorter focal lengths, the two-parameter (b and v) was clearly very
good. The images taken closer in were clear outliers and I threw them
out. At longer focal length, neither one- nor two-parameter had
perfect agreemnt, but the two- had better, and in all cases the
deviation from no correction was larger than the difference between
the images. So I used the means of the two-parameter fits.
I shot vignetting images against a white ceiling about 2m from the
camera, mounted on a tripod facing up. A lamp was positioned right
next to the tripod and emitting from just above lens level, to avoid
camera shadow. I sandwiched a sheet of Rosco #216 white diffusion gel
between the lens below and glass above (two pieces, a sort of
"floating picture frame" that I had handy.) Focus distance was set at
maximum: I did not bring an image at infinity to focus. Again 80ISO,
auto exposure, 2sec timer, no ND filter. I shot all focal lengths,
then rotated the camera and gel so that the relationship between
ceiling, camera, and gel were all different (lamp and ceiling remained
in the same orientation) before shooting another set.
Using gnuplot output from calibrate.py, I verifying vignetting images
were generally smooth (and threw out two other sets of vignetting
photos where I tried a different approach to holding the gel, which
had obvious defects.) The two images for each focal length provided
very similar outputs.
For the XML, I copied the IXUS 80 verbatim (both camera and lens),
then changed model tag to match Exif.Image.Model (which is the same as
Exif.Image.UniqueCameraModel), made the lang en a short version, and
named the mount similarly. I populated both the IXUS 80 and the copied
SD1100 lens calibration with the new TCA and vignetting data. The
vignetting already had two lines per focal length (near and far
distances); I added two more lines for smaller aperture, based on the
camera-reported effective aperture with the ND filter in. Note that,
as with the IXUS 80, the crop factor is 6.1 for the camera and 5.9 for
the lens (based perhaps on full area vs. JPEG area?) I haven't managed
to get darktable to automatically recognize even the camera from the
exiv, but it works if I manually select the camera and then the lens.
Next on the agenda is vignetting on the Canon EF-S18-135mm f/3.5-5.6
IS (Rebel T2i), then full cal for the Fujifilm XF-1. Then darktable-y
stuff, if anyone's interested: base curves and color matrices and such
(probably try for the zero/dead pixel correction in DT, extending the
hot pixel module.)