Negative film as filter
The heart of the conversion is the replacement of the built in filter the removes most of the infrared light with a piece of overexposed old negative film that instead removes most of the visible light. A quick test with the diffraction pattern of the light of a halogen bulb from a compact disk shows that this modification does indeed have the desired effect. There is a bit of red light still coming through (not that surprising, given that color negative film is tinted red) that is visible near the center of the disk, but most of of the light comes from a part of the disk further from the center that appears dark to the unaided eye. There is also a noticeble gap between the red end of the visible spectrum and the cutoff of the improvised filter, which is slightly unfortunate, as it limits the amount of infrared light hitting the sensor, forcing you to use some combination of long shutter speed, high ISO and large apertures. But the resulting sensitivity is still far better than what you get if you just put an IR-filter in front of an unmodified digital camera. In that case you will have to use exposure times in excess of one second even in bright sunlight. With the negative film as filter in a modified camera, hand held shooting isn't totally impossible.
It might be worthwhile to look for another filter material with a higher cutoff frequency to get a more sensitive system, or just replace the filter with with something completely transparent and experiment with removable filters in front of the lens. But for my first experiments I went with the simplest solution and the cheapest filter I could find, and the results are still quite promising.
Using CHDK
One factor that makes an old PowerShot attractive for this kind of experiments is the avalability of the Canon Hackers Development Kit CHDK that provides several enhanced functions. Three features are most valuable:
- Auto-ISO mode. I can tell the camera to crank up ISO instead of reducing shutter speed, giving me more of a chance to get acceptable pictures without a tripod.
- The capability to shoot RAW or DNG. The negative film results in images with a strong red or purple tint, and the exposure is not always optimal. RAW gives you a few more bits per pixel that are useful when adjusting the curves to get the result you want.
Shooting in RAW
To illustrate the last point: The following image shows a traffic scene in Hamburg as seen and converted to JPG by the camera. You can see the very brigth foliage that is typical for infrared photograhy, as well as some of the visible light still getting through the filter from the traffic lights. But the overall chromaticity is a bit dingy.
The same scene after changing the white balance and adjusting the brightness curve to get a more evenly spread histogram of the DNG file in UFRaw looks quite a bit more like what you expect from an infrared picture: Since the IR-sensitivity of all three types of color sensors is almost the same, the resulting pictures are not very colorful. So you may get more interesting result if you increase the saturation in UFRaw (not done on the picure above). This will make the trees stand out clearer against the sky and also restore some of the remaining chromaticity of the visible light still passing through the filter, like the traffic lights and the blue sign in the top left corner.
Of course you could perform similar operations on the JPG produced by the camera, but the quality difference is clearly visible if you look at the picture at its original size. This is a part of a modified JPG image with clearly visible noise:
There is some noise in the image generated from the DNG file, too, but is much less visible:
The pseudo-HDR trick
Another nice thing about shooting RAW is the possibility to use the pseudo-HDR trick with ufraw and enfuse: first you use ufraw-batch to produce seven copies of your image with appropriate white balance and saturation and exposure correction from -3 to 3 steps, then use enfuse to combine them back into one image.
The following script automates the process. Using this script may or may not produce better results than manual fiddling with the curves, depending on the input image. One thing to remember is that UFRaw remembers all its settings that you do not explicitly change, so you get the best results if you first fiddle with the image in UFRaw to get the best result you can and then run this skript.
The scpipt is not IR specific (in fact, the default to use camera white balance is decidedly useless for a modified camera, you have to use the -a option to use auto white balance). By default, it generates images with exposure correction from -3 to +3 steps, you can adjust this with the -l and -h parameters. You can set the saturation with the -s option, or specify a parameter file for UFRaw if you do not want to use the values used on the last file saved with UFRaw. All command line arguments after the name of the file to process are passed to enfuse.
#!/bin/bash
low=-3
high=3
wb="camera"
OPTS=""
conffile=""
while getopts 'l:h:f:s:a' OPTION
do
case $OPTION in
l) low="$OPTARG"
;;
h) high="$OPTARG"
;;
f) conffile=$OPTARG
;;
s) OPTS="$OPTS --saturation=$OPTARG"
;;
a) wb="auto"
;;
?) printf "Usage: %s: [-l low] [-h high] [-f ID-file] \
[-s saturation] [-a] filename [enfuse args ...]\n" \
$(basename $0) >&2
exit 2
;;
esac
done
if [ x$conffile == "x" ] ; then
OPTS="--wb=${wb} ${OPTS}"
else
OPTS="--conf=${conffile}"
fi
shift $(($OPTIND - 1))
filename=$1
filebase=`basename "$1" | sed 's/\.\([^\/\.]*$\)//'`
files=""
for i in `seq $low $high`; do
files="$files ${filebase}_${i}_tmp.tiff"
pfiles="$files ${filebase}_${i}_tmp.ufraw"
done
rm -f $files ${filebase}_hdr.tiff
shift
for i in `seq $low $high`; do
ufraw-batch ${OPTS} \
--exposure=$i \
--output=${filebase}_${i}_tmp.tiff \
--out-type=tiff $filename
done
enfuse "$@" -o ${filebase}_hdr.tiff ${files}
rm -f $files $pfiles