Secrets of the PowerShot 600

File Structure

The ATA hard disks and flash cards must be DOS-formatted prior to use. The camera creates a /pwrshot/ctg_0000 subdirectory and stores the following file types within:

*.ctg Catalog files used by the download software
*.tif 80x60 Thumbnail images (15K each)
*.crw Raw CCD pixel dumps (672K each)
*.jpg JPEG images (size varies)
*.wav Sound annotations (about 8K per second)

ctg_0000 will not contain more than 100 files. When it's "full", the camera creates ctg_0001, ctg_0002, etc.

WAV Files

To play the sound annotations, install the SoX utility and do:

	sox aut_0035.wav -t au /dev/audio

Flash cards record silently, but hard disks make whirring and clicking noises that are picked up by the microphone.

JPEG Files

JFIF/JPEG is a free image format for lossy compression of photographic images. See the JFIF source code for details.

When converting a 24-bit image to JPEG, you must specify a quality parameter from 0 to 100. A lower setting produces a smaller JPEG file, but also makes the JPEG artifacts more obvious. The PowerShot provides three quality settings: "Economy" 30, "Normal" 70, and "Fine" 90.

The camera's CCD pixels are not exactly square. To correct this, you must resize the image from 832x608 to 832x624.

Info Blocks

Each image file contains an Info Block, with such data as exposure settings, time stamp, etc. In JPEG files, it's near the beginning (most image viewers will discard it). In CRW files, it's at the end.

fixdates.c will find the timestamp and re-date the file to match. Very simple, since the time is already stored in UNIX format!

I plan to explore Info Blocks in more detail later...

CRW Files

First off, a CRW file is not a 1.5 MB 24-bit TIFF, although it does have a TIFF header. It is a 672K raw dump of the CCD pixels, with no compression. To read CRW, you must understand the hardware that produced it.

The PowerShot 600 CCD has 523,502 pixels arranged in 854 columns by 613 rows. Each pixel returns a 10-bit intensity value. The manual claims 570,000 pixels, but offers no further details.

The pixel grid is covered by a mosaic of color filters. Under a microscope, the filters would look like this:

GMCY Array

Primary RGB colors
redgreenblue
1186 8green CCD filters
502951magenta
119275cyan
8198 8yellow

Key:
0totally opaque
100totally transparent


Red, green and blue can't be derived from a single CCD pixel; they must be interpolated from the surrounding pixels. As of version 0.86, this is a five-step process:

  • Parse the CRW file and extract the pixel values.
  • Interpolate them to produce green, magenta, cyan, and yellow values for every non-edge pixel (thus the output will be 852x611).
  • Interpolate again to smooth out the color ratios.
  • Compute RGB for each pixel to collect statistics.
  • Compute RGB again, applying gamma correction and other adjustments.

    Users may add more steps, such as running a sharpen filter and resizing the image to 852x627.

    Using the Docking Station

    I haven't tried to do this from Linux. It's only necessary for setting the camera's clock.

    Canon Support

    Canon provides no developer support for their cameras other than a Windows-only SDK.

    Back to the PowerShot 600 Guide