CCD Stack, written by Stan Moore and sold by CCDWare, is one of the best image stacking programs. It can take multiple images of an astronomical target and register them (i.e., align them precisely), normalize them (match the background and object intensities of each image, which may be different due to differnet exposure times, etc.), use sophisticated "data rejection" techniques to eliminate bad pixels in each image, and then combine them (sum, mean, median, etc.) so that the image intensity adds together and the noise averages out - giving a much better signal-to-noise ratio ("S/N") than any single exposure. This is how astronomers take extremely long exposures - by stacking many shorter exposures. Why don't they just take 6-hour single exposures? (or even 1 hour) Because 1) the sky brightness would overcome the entire image (unless imaging under very dark skies), 2) random events can mess up the image (such as airplanes going through the image, satellite trails, and even cosmic ray 'hits'), and 3) losing one 10-minute image is not a big deal, but losing a 6-hour image would waste an entire night. Below is an image of CCD Stack: |
![]() |
In the above image, you can see the Image Manager window (far lower right), which shows the multiple exposures of the same object. You can flip through these to make sure they are all good, prior to stacking. In the image below, you can see the "Registration" process, where each image is overlaid to a base image; you can see one image in black and the other in pink obviously mis-aligned. There are seeral different tools for aligning a stack of images, including manual, "star snap" (where a bunch of stars are selected and the images are translated, rotated and scaled to best fit the selected stars to those in the base image), and CCDIS - where each image is plate solved for its exact center location and rotation angle, and then all images are translated, rotated, and scaled to best fit the base image. |
![]() |
The data rejection techniques are really the heart of CCD Stack. The idea is this: each image has 2000x2000 pixels, and there may be 40 images. Therefore, the pixels form an array - both in x and y, but also in z (i.e., there is a stack of pixels at the same position on every image). Therefore, without 'blurring' the image by processing it across the x-y plane, you can use various techniques to discard 'bad' pixels in each of the 4 million pixel stacks (each having 40 pixels, from each of the 40 images being stacked). You can discard the brightest and dimest pixels; you can discard pixels not within a certain number of standard deviations of the average of that stack; and you can do many other types of data rejection, to end-up with only the pixels in each stack that are "reasonable"; this greatly reduces the noise in the image, even PRIOR to combining the images - which takes the sum, average, or median of each pixel stack for the final image (thus further averaging the noise in each pixel stack). |
As of mid-2010, CCDStack had been upgraded to v.2, which is currently what I am using for all of my registration, normalization, data rejection and combining of subexposures. I am not using CCDStack currently to generate calibration frames and perform calibration (dark and bias subtraction, and normalization via the flat frames), but will probably move from MaximDL to CCDStack for this function - leaving MaximDL to only the camera control and image acquisition functions. |