CCD Astronomy on Linux
These pages describe a number of facets of using astronomical
CCD cameras for image acquisition and processing under Linux.
Introduction
For control of SBIG ST7/8/5C/237 series CCD cameras, the sbig-linux
software provides low-level control of the camera. This is a library
of routines that
- Establish a connection with the camera
- Return camera status
- Control the fan, cooling and other features
- Rotate a CFW6 or CFW8 color wheel, or the wheel in the 237
- Set the tilt of the AO7 "adaptive optics" unit
- Start exposures
- Download exposures
This library is C code, and (because the camera control
protocols are proprietary) does not include source.
For basic image acquisition, there is source for two simple, command-line
based interactive programs. These utilize all the above functions, and
allow saving files in FITS format.
|
View the documentation
here.
|
|
Download via
ftp.
|
Dataset and Image Processing under Linux
I am developing Linux software that allows for sophisticated image
acquisition and processing. In particular, it allows Object
Oriented conversational processing using the simple, but powerful,
O-O scripting language Ezl .
Among the features of this software are:
- Separate handling of 'scientific' datasets and their visualizations
- Work either conversationally or with a Graphical User Interface (or
both, simultaneously)
- Does dataset operations, including statistical analysis, stellar
profile fitting, centers of mass, bad-pixel propogation
- Does visualization mappings, including profiled histogram equalization,
median functions, deconvolution, log/gamma correction
- Automate tasks, do complex analysis of the data.
- Supports A07 tracking using a variety of algorithms.
- Handle tracking and imaging acquisition simultaneously from SBIG
dual-CCD cameras
- and, lots more.
The EZL programming language is simple, like BASIC, but considerably more
powerful. With it, you can:
- Interact conversionally
- Create objects, such as image-datasets, visualization windows,
vizualization filter sets.
- Interactively control the CCD camera, or start up control windows
(custom or standard) to do this
- Store/Load datasets, image files, notes, or just about anything else
to and from disk
- Program your own methods to handle sophisticated analysis
- Deal uniformly with all data, since everything in Ezl is an object.
- Not deal with memory management: all memory is handled automatically
for you, and
is transparently garbage-collected. The language is fully "reflective",
meaning you can find out everything there is about an object.
Language object classes include:
- Numbers (64 bits worth)
- Strings
- Heterogenous multidimensional arrays that grow dynamically
- Dictionaries (the basis of all data management in Ezl; Ezl has
no 'variables', rather everything is an entry in some dictionary.
Dictionaries have keys that are names, and are roughly
analogous to variable names in other languages, and values which
are roughly analogous to the values stored in variables in other
languages.)
- Truth values
- Ranges of integers
Classes specific to the CCD imaging functions include:
- Camera (Object for control of an SBIG CCD camera)
- Dataset (CCD data, either acquired, loaded from file, or
synthesized)
- DatasetFilter (an object that processes data in a dataset)
- ViewFitler (an object that is part of a pipe-line of visualization
operations)
- ViewWindow (window for setting up visualizations)
- Selection (geometrical region of a dataset)
Here is some Ezl, to give you a flavor of conversational usage:
/* create a new CCD camera object; this
establishes a connection to the camera */
c = new Camera()
/* Set the camera's temperature regulation to 0deg C */
c.SetCooling(0.0)
/* Take an exposure using the tracking ccd, start
* the exposure at the 4th image line, and
* use 2x2 binning */
my_exposure = c.Expose(CCD: "Tracking", Y: 3, Binning: 2)
/* Invoke 3-neighbor median statistical processing
* on the dataset, the result is a Dictionary with
* various entries */
lp_stats = my_exposure.Median3Max()
/* In Ezl, any/everything can be printed */
Print(lp_stats)
/* Call my own procedure for flat fielding */
my_exposure.FlatField()
/* If there is sufficient signal, save the image */
IF lp_stats.Max - lp_stats.Min > 20000 THEN
my_exposure.Write("NGC200")
END
Other Links