Venus cloud tracking -- July 31, 2006

<- Previous page

6. Making composite images

Composite images are made by processing each individual aligned image and then averaging the set of 10 together. This is a completely automated process once the correct shifts have been identified and entered into the image_data.txt file. Making a composite image from 10 raw images takes about a minute on a G5.

Raw image

Here is an example of a raw image (#2124), the first image in the third interval identified above, of intermediate sharpness. It is displayed in a scale range of 0 - 4000:


The first step is to mask the image by setting to zero all values that correspond to zero values in the mask shown above. All pixels in the file less than zero are also set to zero. For most of the processing steps, zero indicates an unused pixel.

Flat fielding

The next step is to flat-field the image by dividing all non-zero pixels by the corresponding value in the flat image. Since the flat was not made from images with different exposure times, a dark-current offset cannot be subtracted, and the gain curve is assumed to pass through (0, 0).

However, this process does not seem to work for the 7/13/04 flat, although it does work for other days in 7/04. Dividing by the flat image makes the result worse, not better, by adding a considerable amount of noise which appears to be grouped into a characteristic pattern of rows and columns across the field. The reason for this is completely unknown.

(Click for 2x-size)

Therefore, in all subsequent steps, the flat-fielding will be omitted from the processing. If, at a later time, a working flat can be created, it can be reintroduced into the processing steps.

Filling the slit

The next step is to fill the slit. The slit is identified from the mask, and is from coordinates (231, 189) to (235, 315) in the unflipped images. This rectangular region is filled by the following procedure:

1. For each row of the slit, calculate the average non-zero pixel value for the endpoints of the row from 2 pixels above the current row to 2 pixels below the current row (total height = 5).

2. Using these average values, perform a straight line interpolation between them to calculate the values of all pixels in the row.

3. Repeat 1 and 2 for all rows of the slit.

Median filling

The next step is to replace all zero pixels with the median of their surrounding non-zero pixels in a 5x5 square, if possible. This process is repeated 3 times. Note that existing non-zero pixels are not affected by this procedure.

Removing row and column noise

The next step is to remove the row and column 'readout' noise in the image. This noise can be seen primarily as alternating variations in the brightness of the rows of the image, especially at the edge of the saturated crescent. However, it also manifests as a more subtle pattern in rows and columns of the image.

A previous method of suppressing this noise was to calculate the variation in image gain for each row, subject this 1d curve to a Fourier filter which eliminated the Nyquist frequency term (a square wave of wavelength 2 pixels), and then reset the row gains to this slightly smoothed curve. This technique was only partly effective on the row noise, and did nothing about the column noise.

Currently, both the row and column noise are almost entirely suppressed by a much simpler procedure:

1. Shift the image 0.5 pixels up, and 0.5 pixels down.

2. Average the two results.

3. Shift the image 0.5 pixels left, and 0.5 pixels right.

4. Average the two results.

This 'trick' is almost completely effective in removing the readout noise, with only a very slight reduction in image sharpness (and which is probably smaller than the spatial cutoff frequency anyway).

Here is a comparison of the original image, the old technique, and the new technique:

(Click for full-size)


Next, the Y axis is flipped so as to have the same orientation as the IRTF control room display:


The image is then shifted by the (floating-point) amounts determined with FITSRegister:

Subtracting bracket-gamma gradient

The bracket-gamma gradient is subtracted:

Normalizing background and foreground

Finally, the pixel values are adjusted so that the background just outside the dark limb in arc regions from 1 - 2 o'clock and from 4 - 5 o'clock has an average of 100, and the maximum value of the clouds (bright horizontal band near bottom) is at 1000. This makes the brightness and contrast of all images the same, compensating for the significant changes in brightness throughout the night and with the changing atmosphere (of Earth):


All 10 processed images are then averaged together. Using a median image rather than average has little effect on the result:

Here is a comparison of a raw image, a processed single image, and the final composite image of the first and the last time intervals of 7/13/04:

(Click for full-size)

Next page ->

İSky Coyote 2006