Table of Contents
The Bayer Pattern is used to turn a pan-chromatic CCD array into a color-sensitive
CCD array. The way this is done is that each of the individual CCD elements are
covered with color filters. This is done in a 2x2 repeating pattern of color filters
over the pixels. The standard way to do this is as follows;
The first scanline contains CCD elements with Green, followed by Red filters, repeating.
Green, Red, Green, Red, etc...
The second scanline contains CCD elements with Blue, followed by Green filters, repeating.
Blue, Green, Blue, Green, etc...
This pattern repeats down for all scanlines of the image, like so:
Generally, this is captured into a file where all of these CCD samples are
interleaved with eachother, as you see above. If the raw image was to be viewed in an image viewer, it
would appear to be a grayscale image with a checkerboard look to it.
For example's sake, we'll use the Terrapix image as an example. There are 4096
scanlines of this pattern, containing 4194304 (2048*2048) green pixels, 1048576 (1024*1024) red
pixels, and 1048576 (1024*1024) blue pixels in this alternating pattern. (Example images
to come soon.)
A full-resolution image can be made of 4096x4096 pixels, containing interpolated colors. A
lower-resolution image of 2048x2048 can be made with no loss of data, however, spatially, the
samples will be in the wrong places. This is explained in the next section.
On the Terrapix, scanline 0 contains a 16 bit word containing a
12 bit sample of Green, followed by the same for Red, followed by another Green and so on,
4096 pixels total, containing 2048 Green and 2048 Red pixels. The
next line is the same, but first is a Blue pixel, then a Green pixel.
There are many different ways to interpolate from a Bayer pattern into RGB colorspace.
With a Bayer patterned image, each individual pixel contains either
red, green OR
while in an RGB image each individual pixel contains red, green AND
The problem arises when you try to make an RGB image from the array, by just moving the red,
green and blue components around to overlay atop eachother. As you can see from the following
when that line was captured, it was captured with varying red, green and blue samples. This means that if
you were to just mush the colored pixels together, for example, one quad (as above) of the bayer pattern becomes
one RGB pixel, dropping (or averaging) greens in the quad, you will get anomalous color fringing in the resulting image.
This is, of course, the quickest way to generate the image, but it results in possibly incorrect results.
The common way to do a more accurate result image would be to go for a resulting RGB image the size of the CCD array.
The first step would be to interpolate the green values. By averaging the pixels above, below, to the left, and to the right, you can fill in the missing green data.
The next step is to do the red and blue layers. These require doing a bit more work, since there's less red and blue data. For each, you should also base the brightness of the pixels on the green value in that missing space.
There are a few other tricks that can be done, but I don't have the links to those papers right now.
Links to Bayer-RGB conversion papers
to come soon
- 22 Jun 2004