Venus cloud tracking -- August 31, 2006

Most of my work this month has been about testing FITSFlow by creating some synthetic images and flows, distorting the test images by the flows, and then using FITSFlow to see if the correct fields could be recovered.


1. Test images
2. Flow fields
3. Advection equation
4. Dynamic simulation
5. Recovering flows with FITSFlow

1. Test images

I created 8 different test images to see the effects of the various flows. Two of these image types are reasonable for input to FITSFlow, as they share some of the qualities of the real Venus cloud images we have been using to extract vector flow fields. All images are non-negative and have been normalized to have a sum of 1.

1. X and Y axes.

Actually, this image was created just to test the orientation in FITSRegister and my various Unix programs. The origin of the XY axes is the first pixel in the FITS file. When processing actual Venus images, we usually flip the Y axis so that the image is displayed with the same orientation as the IRTF guider.

2. Grid of points.

3. Grid of crosses.

4. Rectangular mesh.

5. Gaussian blur.

6. Grid of Gaussian blurs.

7. Random overlapping Gaussian blurs of constant size.

This is the first test image deemed appropriate for input to FITSFlow. It is constructed by superimposing 750 Gaussians of the form exp(-(r^2) / (2 * sigma^2)) / (2 * pi * sigma^2) for sigma = image diagonal / 75. In many ways the resulting overlapping random pattern seems similar to the cloud features in the actual images of Venus we are using, although I have performed no real statistics to quantify this intuition.

8. Random overlapping Gaussian blurs of different sizes.

This is the second test image submitted to FITSFlow, and is constructed of 500 superimposed Gaussians of the same form as above, with sigmas ranging from 0.5 to 1.5 that of the previous image. Again, this image seems to share some of the features of the cloud images of Venus. In any case, both test images appear to contain non-repeating random features with about the same spatial scale and resolution as the real Venus images.

2. Flow fields

8 vector flow fields were constructed and applied to the test images to produce distorted output to be submitted to FITSFlow. The distortion technique was a simple projection of each pixel of the image along the flow vector for that (x, y) position. An attempt at integrating the advection equation for the flow is discussed below.

1. Translation

Here the length of each arrow is 14.14 at a 45 degree angle.

2. Rotation

Each vector is orthogonal to its radius, and has a length of its radius / 10. The resulting image was somewhat jagged, due to the integer truncation of the pixel projections, so I created an interpolation to anti-alias the distorted image.

Each pixel (1 square unit) that is projected to non-integer coordinates is distributed over 4 pixels according to the values of a, b, c, and d above, where x and y are the fractional coordinates. The distorted image is the sum of all such distributed pixels.

3. Zoom

Each vector is radial and has a length of its radius / 10. Due to the expansion, slight overlaps appear in the result. To alleviate this effect, I performed the distortion using several iterations of the flow at a fraction of its full value. 10 iterations seemed enough to eliminate most of the artifacts, while 100 performed little better.

4. Dipole

Each vector has the direction of a dipole field of 1 / r^2 intensity for two opposite charges. All vectors are normalized to a length of 10. To distort the test image, 10 iterations of 1/10 field strength were used to eliminate some artifacts.

5. Skew

Each vector has an x value of y / 10, and a y value of 0.

6. Vortices

Each vector has the components dx = 10 * cos(y / 50) and dy = 10 * cos(x / 50).

7. Expand & contract

Each vector has the components dx = 10 * cos(x / 50) and dy = 10 * cos(y / 50).

8. Waves

Each vector has the components dx = 10 and dy = 10 * cos(x / 25). Note that this field has a similar effect on the grid as #6 above, although its effect on the test image is somewhat different.

3. Advection equation

I also tried integrating the advection equation for the flow in order to distort the images. This equation is:

where u is the flow and psi is the image. Scot defined a slightly different equation:

which makes use of the gradient rather than the divergence. The two may be equivalent, but neither worked when I tried them on the various distortions, using a dt of 0.1 or less. Here is the result of integrating the first equation for a translational flow. The second equation produces essentially the same results:

I understand that integration of these equations is a complex topic, and I didn't try anything fancy. For example, I just used Euler's method for integration. I may have done something wrong, but otherwise these equations aren't doing what they advertise. I should say that I'm always suspicious of any numerical technique that relies on taking derivatives. Integration is OK, but differentiation should be avoided, in my experience. Nevertheless, I wasn't too concerned with these results, as the projective method of distortion illustrated above seemed to work fine for our purposes.

4. Dynamic simulation

The iterated projection method has one problem in that repeated iterations tend to blur the distorted image, because in general each pixel is distributed among 4 pixels at each iteration. More iterations of a smaller amount each add up to blur the image more:

To combat this problem, I developed what is essentially a dynamic simulation in which the real coordinates of each pixel projected along the flow are maintained at each iteration. Only after the last step are pixel coordinates truncated to integers. This allows an image to be projected along a flow for as long as desired without blurring:

Although the integration used is again simple Euler's, it is sufficient to project an image many times along a flow field. For example, here is a grid and test image projected 10 times along the vortical flow (#6 above) with a dt of 0.01. A problem which still remains in this approach are the gaps produced by stretching a pixel neighborhood. Each pixel moves independently of its neighbors rather than diminishing in intensity and creating new intermediate pixels:

Next page ->

İSky Coyote 2006