Dark Calibration Frames - aaronwmorris/indi-allsky GitHub Wiki
General
indi-allsky fully automates the capture and processing of master dark calibration frames. Currently, sigma clipping and average methods are supported.
RAW mode
Dark frames work best when created from RAW, unprocessed sources. It not recommended to generate dark frames from JPEG, PNG or other RGB sources, but it is possible.
Update Dec 2023
It is now possible to generate dark frames from JPEG and PNG devices such as IP web cameras that do not support RAW mode.
Altair & Touptek
The Altair and Touptek drivers start color cameras in INDI_RGB mode by default. You must update the configuration to set the cameras to INDI_RAW mode
https://github.com/aaronwmorris/indi-allsky/wiki/INDI-custom-config#touptek--altair-raw-mode
Canon DSLR
Canon cameras are normally started in JPEG mode by default and must be set to RAW mode.
https://github.com/aaronwmorris/indi-allsky/wiki/INDI-custom-config#canon-resolution-and-raw-mode
Acquire Dark Frames
- Cover your camera lens with something thick enough to block ALL light.
- Stop indi-allsky service
systemctl --user stop indi-allsky
- Enter the indi-allsky git checkout folder
cd indi-allsky
- Activate the indi-allsky python virtual environment
source virtualenv/indi-allsky/bin/activate
- Run darks.py to capture and stack dark frames
./darks.py sigmaclip
- Darks will be generated in 5 second increments for the configured gain for night, moonmode, and day frames.
- 10 exposures at each gain level are used to create the master darks. The number of frames is configurable with
--Count
.
- 10 exposures at each gain level are used to create the master darks. The number of frames is configurable with
- This operation can take a while depending on your maximum exposure.
- 15s maximum exposure requires about 20 minutes to generate master darks
- 30s maximum exposure requires about 45 minutes
- 45s maximum exposure requires about 1.5 hours
- 60s maximum exposure requires about 2.5 hours
Options
average
- Capture and stack dark frames using average valuessigmaclip
- Capture and stack dark using sigma clippingtempaverage
- Capture and stack (average) a set of dark frames for every 5c degrees of temperature changetempsigmaclip
- Capture and stack (sigma clipping) a set of dark frames for every 5c degrees of temperature changeflush
- Delete all existing dark frames
Overrides
--Count
- The number of exposures to stack for each exposure level (default: 10)--Time_delta
- The time delta between each exposure level (default: 5 seconds)--temp_delta
- The temperature delta between each exposure set (default: 5 degrees)--no-daytime
- Disable generating daytime dark calibration frames--reverse
- Take images in reverse order--bitmax
- Maximum bit depth of camera (default: 16)
Temperature calibrated darks
Using the tempaverage
or tempsigmaclip
options will generate a series of master darks at every 5c degree decrease. Every 5c degree drop, a full set of darks will be generated at 5s exposure increments. Generating daytime dark frames is automatically disabled in these modes.
I would recommend a 3-6 foot USB cable so the camera can be placed in a freezer or refrigerator appliance while the computer can be kept room temperature. As soon as the camera is placed in the freezer, start the darks.py program with the tempsigmaclip
option. A series of master darks will be generated at the initial temperature. The program will then wait for the camera to decrease 5c degrees from the initial temperature and take a new series. This will happen until the camera reaches equilibrium with the freezer. When the minimum temperature is reached, the program will have to be manually cancelled with control-c
.
If the camera's temperature drops too fast, consider wrapping the camera in a single layer plastic freezer bag to slow down the rate of cooling. Flush the darks and re-warm the camera to room temperature before restarting the process.
Removing dark frames
You may delete all of the existing dark frames by running the flush
command
source virtualenv/indi-allsky/bin/activate
./darks.py flush