Набор инструментов для пакетной обработки астрономических FITS-изображений.
| Скрипт | Назначение |
|---|---|
| add.py | Сложение: result = input + operand + offset |
| sub.py | Вычитание: result = input - operand + offset |
| mul.py | Умножение: result = input * operand * scale |
| div.py | Деление: result = (input / operand) * scale |
| arith.py | Универсальная арифметика (add/sub/mul/div в одном скрипте) |
| sum.py | Суммирование стека изображений с обновлением EXPTIME |
| med.py | Медианное комбинирование (тайловый параллельный режим) |
| calibrate.py | Калибровка: dark, bias, flat, cosmetic correction |
| autocalibrate.py | Автокалибровка по деревьям dark/flat с подбором по EXPTIME/FILTER |
| normalize.py | Нормализация яркости между кадрами (линейная регрессия) |
| ngain.py | Нормализация умножением (приведение медианы к целевому значению) |
| noffset.py | Нормализация смещением (приведение медианы к целевому значению) |
| autoflat.py | Выравнивание фона изображений |
| cosme.py | Коррекция горячих пикселей по списку |
| make_cosme.py | Генерация списка горячих пикселей из дарка |
| makedark.py | Создание master dark и cosme.lst из сырых дарков |
| makeflat.py | Создание master flat по фильтрам из сырых флэтов |
| newflat.py | Добавление записи в лог обслуживания (для autocalibrate --flatlog) |
| darkopt.py | Вычитание мастердарка с оптимизацией (подбор коэффициента) |
| sortfits.py | Сортировка FITS по времени, разбиение на сессии |
| autosolve.py | Астрометрическое решение (WCS), ректификация, выравнивание, JPEG вход/выход |
| fits2tiff.py | Конвертация FITS в TIFF, JPEG, PNG |
| tiff2fits.py | Конвертация TIFF → FITS |
| raw2fits.py | Конвертация Camera RAW → FITS (пока только Canon CR2/CR3) |
| fft_align.py | FFT-выравнивание кадров (Эспериментальный) |
| absession.py | Генерация CSV-списка фотосессий для AstroBin |
| binxy.py | Программный биннинг 2×2 / 4×4 |
| crop.py | Обрезка FITS-изображений (по размеру/центру или полям) |
| debayer.py | Демозаик Bayer-паттерна в RGB |
| hotfix.py | Поиск и удаление одиночных горячих пикселей |
| lrgb.py | LRGB композиция (совмещение L-канала с цветом) |
| mtf.py | Нелинейное преобразование яркости (авто уровни, сохранение цвета) |
| stack.py | Оптимальное взвешенное сложение с плавным отсечением выбросов |
| rgbbalance.py | Баланс цвета и яркости для RGB FITS |
| bestof.py | Отбор лучших кадров по FWHM (качество атмосферы) |
| rgb.py | Объединение/разделение RGB каналов |
| staralign.py | Автоматическое выравнивание кадров по звёздам (Thin Plate Spline) |
| xisf2fits.py | Конвертация XISF (PixInsight) в FITS |
- Одиночный файл:
image.fit - Нумерованная последовательность:
light0001.fit→ автоматически находит light0002.fit, light0003.fit, ... - Принудительно одиночный файл:
=image.fit— префикс=отключает поиск последовательности - Маска с wildcards:
*.fit,light_*.fit - Файл-список:
@list.txtилиlist.txt(по одному пути на строку)
Арифметические скрипты (add, sub, mul, div, arith) поддерживают числовые константы в качестве операндов. Константа интерпретируется как "виртуальный файл", заполненный этим значением.
Допустимые форматы констант (строгий парсинг):
- Целые числа:
123,-456,+789 - Десятичные:
123.456,-0.5,+1.0
НЕ допускаются:
- Экспоненциальная нотация:
1e5,1E-3 - Специальные значения:
inf,-inf,nan - Разделители разрядов:
1_000,1,000 - Неполные числа:
.5,5.
Важно: Хотя бы один аргумент должен быть файлом — из него берутся размеры изображения и FITS-заголовок.
Применение: Например может быть полезно для калибровки на термостабильных CCD, где BIAS-кадры можно заменить нулём или известной константой смещения.
- Одиночный файл:
output.fit - Нумерованный шаблон:
out0001.fit→ автоинкремент для каждого входного файла
Поддерживаемые форматы:
- Целочисленные: int8, int16, int32, int64 (signed/unsigned)
- Вещественные: float32, float64
Выходная конвертация:
- Целочисленные FITS: результат ограничивается диапазоном типа (clamp), округляется
- Вещественные FITS: сохраняются как есть
- NaN, Inf, -Inf: заменяются на 0 (никогда не записываются в выходные файлы)
Когда используется float64:
- Умножение/деление на коэффициенты ~1.0 (нормализация, flat-коррекция)
- Вычисление среднего (накопление ошибок округления)
- Операции с дробными коэффициентами
Когда float64 НЕ нужен:
- Сложение/вычитание целых значений или изображений
- Медиана (выбор элемента, без арифметики)
- Min/max операции
Назначение: Сложение значения или изображения с входными кадрами.
Формула: result = input + operand + offset
Синтаксис:
add.py input_spec output_spec operand [offset]
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыoperand— числовая константа ИЛИ FITS-файл ИЛИ нумерованный шаблон FITSoffset— опциональное числовое смещение (по умолчанию 0)
Примеры:
add light0001.fit cal0001.fit 100
add *.fit out0001.fit bias.fit
add light0001.fit result0001.fit dark0001.fit 500
add image.fit result.fit 1024 :: добавить константу ко всем пикселямНазначение: Вычитание значения или изображения из входных кадров.
Формула: result = input - operand + offset
Синтаксис:
sub.py input_spec output_spec operand [offset]
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыoperand— числовая константа ИЛИ FITS-файл (значение для вычитания)offset— опциональное смещение (по умолчанию 0)
Опции:
--continuum [snr]— Режим вычитания континуума. Детектирует звёзды в обоих изображениях, сопоставляет их по координатам (толерантность 1.5 px), и масштабирует вычитаемый кадр так, чтобы яркость звёзд совпала. Звёзды вычитаются в ноль, остаётся только эмиссия (например H-alpha). Порог SNR для детекции звёзд (по умолчанию 38).
Формула с --continuum: result = input - K * operand + offset, где K = sum(flux_input) / sum(flux_operand) вычислено по фотометрии совпавших звёзд.
Примеры:
sub light0001.fit dark_sub0001.fit master_dark.fit
sub raw.fit calibrated.fit dark.fit 100
sub light0001.fit cal0001.fit 0 # вычитание нуля (для термостабильных CCD без bias)
sub light0001.fit cal0001.fit 1024 # вычитание константы смещения
sub ha.fit continuum_sub.fit red.fit --continuum
sub ha.fit output.fit broadband.fit --continuum 50
sub ha0001.fit out0001.fit red0001.fit 1000 --continuum # со смещениемНазначение: Умножение входных кадров на значение или изображение.
Формула: result = input * operand * scale
Синтаксис:
mul.py input_spec output_spec operand [scale]
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыoperand— множитель (числовая константа или FITS)scale— дополнительный множитель (по умолчанию 1.0)
Примеры:
mul light0001.fit scaled0001.fit 2.5
mul image.fit result.fit gain_map.fit
mul light0001.fit doubled0001.fit 2 :: умножение на константуНазначение: Деление входных кадров на значение или изображение.
Формула: result = (input / operand) * scale
Особенности: Деление на ноль даёт 0.
Синтаксис:
div.py input_spec output_spec operand [scale]
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыoperand— делитель (числовая константа или FITS)scale— множитель результата (по умолчанию 1.0)
Примеры:
div light0001.fit flat_div0001.fit master_flat.fit 5000
div image.fit normalized.fit 32768 :: деление на константу (нормализация к диапазону)
div light0001.fit norm0001.fit 1 5000 :: деление на 1 с масштабированием (эквивалент mul)Назначение: Универсальный арифметический инструмент (объединяет add/sub/mul/div).
Синтаксис:
arith.py (add|sub|mul|div) input_spec output_spec operand [param]
Операции:
add→result = input + operand + offsetsub→result = input - operand + offsetmul→result = input * operand * scalediv→result = (input / operand) * scale
Параметры:
operand— числовая константа ИЛИ FITS-файл ИЛИ нумерованный шаблонparam— для add/sub это offset (по умолчанию 0), для mul/div это scale (по умолчанию 1)
Примеры:
arith add light0001.fit out0001.fit 100
arith sub light0001.fit cal0001.fit dark.fit 500
arith sub light0001.fit cal0001.fit 0 :: вычитание нуля (замена bias для термостабильных CCD)
arith div image.fit result.fit flat.fit 5000
arith mul light0001.fit scaled0001.fit 2.5 :: умножение на константуНазначение: Суммирование стека FITS-изображений.
Особенности:
- Обновляет EXPTIME (суммарная экспозиция)
- Обновляет DATE-OBS (самое раннее время)
- Для целочисленных FITS: масштабирует результат до максимума типа
- Для вещественных FITS: вычисляет среднее
Синтаксис:
sum.py input_spec output.fit
Параметры:
input_spec— входные файлы (последовательность, маска или одиночный файл)output.fit— выходной файл
Примеры:
sum light0001.fit stacked.fit
sum *.fit combined.fitНазначение: Медианное комбинирование стека FITS-изображений.
Особенности:
- Параллельный ввод-вывод; авто-разбиение на горизонтальные полосы при нехватке памяти
- Точная попиксельная медиана
- Опциональный режим игнора нулей (
--zero) - Использует все ядра CPU
Синтаксис:
med.py input_spec output.fit [--memory N] [--zero]
Параметры:
input_spec— входные файлыoutput.fit— выходной файл--memory N— лимит памяти под стек в ГБ (по умолчанию 16; при превышении обработка идёт горизонтальными полосами)--zero— игнор нулей: пиксель== 0в кадре исключается из медианы в этой позиции; в итоговом он становится0только там, где он0во всех кадрах
Примеры:
med dark0001.fit master_dark.fit
med flat*.fit master_flat.fit
med @list.txt median.fit --memory 8
med aligned*.fit stacked.fit --zeroНазначение: Калибровка изображений (вычитание dark/bias, деление на flat, cosmetic correction).
Формула: result = ((raw - bias) - dark * OPTIMIZ) * K / flat
Синтаксис:
calibrate.py input_spec output_spec -d dark.fit [-b bias.fit] [-f flat.fit K] [-c cosme.lst] [-optimize|-o]
Параметры:
input_spec— сырые файлыoutput_spec— выходные файлы-d dark.fit— master dark (обязательно)-b bias.fit— master bias (опционально)-f flat.fit K— master flat и множитель K (опционально)-c cosme.lst— список горячих пикселей (опционально)-optimizeили-o— оптимизация коэффициента дарка для каждого кадра
Примеры:
calibrate raw0001.fit cal0001.fit -d dark10s.fit
calibrate raw0001.fit cal0001.fit -d dark.fit -b bias.fit -f flat.fit 5000
calibrate raw0001.fit cal0001.fit -d dark.fit -f flat.fit 5000 -c cosme.lst -oНазначение: Автоматическая калибровка с подбором dark/flat по EXPTIME и FILTER.
Особенности:
- Ищет darks по EXPTIME и JD (ближайший по времени)
- Ищет flats по FILTER и JD (ближайший, не более N дней в будущем)
- Автоматически находит cosme.lst в папке darks (по имени: dark600s.fit → cosme600s.lst)
- Множитель MULT вычисляется автоматически как медиана flat-кадра
Синтаксис:
autocalibrate.py [options] rawfiles.fit out_path dark_path flat_path
Параметры:
rawfiles.fit— сырые файлы (файл, список, маска)out_path— базовое имя выходных файловdark_path— директория с master darks и cosme*.lstflat_path— директория с master flats
Опции:
--bestflat— автоподбор лучшего flat для каждой сессии (по минимуму σ после деления)--debug— сохранять превью в ./debug/ для визуальной проверки подбора flat--flat-future-days N— макс. дней в будущем для поиска flat (по умолчанию 2)--flatlog FILE— CSV-лог обновления флэтов для строгого подбора по интервалам--filter NAME— трактовать ВСЕ лайты как фильтр NAME (игнорируя хедер FILTER) при подборе flat и записатьFILTER=NAMEв выход. Для случая, когда снимали внешним фильтром, а хедер писал другой (напр.--filter Ha→ матчитflat_h).
Сопоставление фильтров: сначала точное (с учётом регистра), затем — если не найдено — без учёта регистра (ha найдёт Ha; при наличии и Ha, и ha точное совпадение в приоритете).
Формула калибровки: result = ((raw - dark) * MULT) / flat
Порядок: dark subtraction → cosmetic correction → flat division
Формат выходных файлов: <base>_exp<EXPTIME>_<FILTER>_<N>.fit
Режим --bestflat:
- Группирует файлы по фильтру и сессии (noon-to-noon по локальному времени)
- Для каждой группы создаёт превью: downscale 4×4 после dark subtraction
- Для каждого flat: медианный блур 16px → downscale → деление → удаление градиента → σ
- Выбирает flat с минимальной σ (меньше артефактов пыли/виньетирования)
Режим --flatlog:
- Формат CSV:
DATETIME_UTC,CAMERA_ID[,COMMENT] - Camera ID сопоставляется как подстрока с INSTRUME
- Логика выбора flat:
- Сначала ищет в текущем интервале (между записями в логе)
- Если в интервале несколько флэтов — берёт ближайший (не новее +N дней)
- Если с +N дней ничего, но в интервале есть флэт — берёт его (интервал = приоритет)
- Если интервал пуст — ищет глобально (по +N дней, как без flatlog)
- L fallback в конце, если точный фильтр не найден
Примеры:
:: Базовое использование
autocalibrate raw*.fit calibrated darks/ flats/
:: С автоподбором лучшего flat
autocalibrate --bestflat raw*.fit calibrated darks/ flats/
:: С отладочными превью
autocalibrate --bestflat --debug raw*.fit calibrated darks/ flats/
:: С логом обслуживания камеры
autocalibrate --flatlog maintenance.csv raw*.fit cal darks/ flats/
:: Комбинация опций
autocalibrate --bestflat --flat-future-days 3 --flatlog maint.csv raw*.fit out darks/ flats/
:: Внешняя Ha, в хедерах L: трактовать как Ha и матчить flat_h
autocalibrate M8-Ha25*.fit cal\ darks\T-10 flats\...\h --filter HaНазначение: Добавление записи в лог обслуживания камеры (для --flatlog в autocalibrate).
Применение: Отмечает момент, когда flat-кадры становятся невалидными (чистка сенсора, замена фильтров, и т.д.)
Синтаксис:
newflat.py --camera CAMERA_ID --log FILE [--date DATETIME] [--comment TEXT]
Параметры:
--camera— идентификатор камеры (должен быть подстрокой INSTRUME в FITS)--log— путь к CSV-файлу лога--date— опционально: дата/время в ISO формате (по умолчанию текущее UTC)--comment— опционально: комментарий
Формат лога:
# Maintenance log
DATETIME_UTC,CAMERA_ID,COMMENT
2024-05-18T14:30:00,2600MM,Cleaned sensor
2024-12-21T10:00:00,2600MM,Changed dust coverПримеры:
:: Добавить запись с текущим временем
newflat --camera 2600MM --log maintenance.csv
:: С указанием даты
newflat --camera 2600MM --log maintenance.csv --date 2024-05-18T14:30:00
:: С комментарием
newflat --camera "ASI2600" --log maint.csv --comment "Sensor cleaning"Назначение: Нормализация яркости изображений относительно референсного кадра.
Модель: I = B * R + C → нормализованный результат: (I - C) / B
Синтаксис:
normalize.py input_spec output_spec [basefile.fit] [method] [--sat F] [--zero]
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыbasefile.fit— референсный кадр (по умолчанию первый входной)method— метод нормализации:1— линейная регрессия, OLS (по умолчанию)2— робастная регрессия (sigma-clipping) — рекомендуется для кадров со звёздами3— глобальная итеративная нормализация всех кадров (робастные фиты)
--sat F— необязательный предобрез по пересвету: перед подгонкой игнорируются пиксели ярчеF × P99.5в любом из кадров, гдеP99.5— значение 99.5-го перцентиля (робастный «максимум», устойчивый к одиночным горячим пикселям).Fв диапазоне (0, 1]. По умолчанию выключено.--zero(-z) — сохранить нули нет-данных: после подгонки (которая и так игнорирует нули) и аффинного преобразования восстановить нулевые пиксели входа в0на выходе, чтобы нормализация не сдвигала0(рамка совмещения / нет-данных) в ненулевое-C/B. По умолчанию выключено.
Обработка пикселей (надёжность):
- Нулевые пиксели (рамки нет-данных после совмещения) исключаются из подгонки во всех методах — иначе масса точек
(0, 0)притягивает прямую к началу координат (leverage) и смещает offsetCк нулю. С--zeroони дополнительно восстанавливаются в0на выходе. - Пересвет отрезается остаточным sigma-clipping методов 2 и 3, а не порогом по значению: после калибровки потолок насыщения равен
raw_sat / flatи меняется по полю, поэтому константой его не описать. Метод 1 (чистый OLS) убирает нули, но пересвет не режет — для кадров с насыщенными звёздами берите метод 2 или 3 (либо добавьте--sat). --sat F— необязательный грубый довесок поверх вышеописанного.
Примеры:
normalize light0001.fit norm0001.fit
normalize light0001.fit norm0001.fit reference.fit 2
normalize *.fit normalized0001.fit 3
normalize *.fit norm0001.fit 2 --sat 0.8 :: плюс отброс пикселей ярче 80% от P99.5
normalize *.fit norm0001.fit 2 --zero :: восстановить нули нет-данных на выходеНазначение: Нормализация умножением — приводит медиану каждого кадра к целевому значению.
Формула: result = input * (target_median / current_median)
Аналог: NGAIN в Iris.
Особенности:
- Поддерживает все типы данных: signed/unsigned int 8/16/32/64, float 32/64
- Все вычисления в float64
- Корректная конвертация обратно с контролем границ диапазона
- При нулевой медиане изображение копируется без изменений
Синтаксис:
ngain.py input_spec output_spec target_median
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыtarget_median— целевое значение медианы для всех выходных изображений
Примеры:
ngain flat0001.fit norm_flat0001.fit 10000
ngain *.fit normalized0001.fit 5000
ngain @list.txt out0001.fit 32768Назначение: Нормализация смещением — приводит медиану каждого кадра к целевому значению путём добавления константы.
Формула: result = input + (target_median - current_median)
Аналог: NOFFSET в Iris.
Особенности:
- Поддерживает все типы данных: signed/unsigned int 8/16/32/64, float 32/64
- Все вычисления в float64
- Корректная конвертация обратно с контролем границ диапазона
- Сохраняет относительные яркости пикселей (в отличие от ngain)
Синтаксис:
noffset.py input_spec output_spec target_median
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыtarget_median— целевое значение медианы для всех выходных изображений
Примеры:
noffset bias0001.fit norm_bias0001.fit 1000
noffset *.fit normalized0001.fit 5000
noffset light0001.fit out0001.fit 10000Назначение: Выравнивание фона изображений (два режима: cell-based и min-binning).
Mode 1 (default) — cell-based:
- Разбивка на ячейки → sigma-clipped медиана (отсечение звёзд)
- Медиан-фильтр на сетке (нули игнорируются через sentinel)
- Расширение сетки за края кадра
- Второй медиан-фильтр на расширенной сетке
- Полиномиальный фит (нулевые ячейки исключены)
result = input - model + median(model)
Mode 2 — min-binning (оригинальный алгоритм):
- Расширение маски нулевых пикселей → медианная фильтрация → min-биннинг → полином
Синтаксис:
autoflat.py [-d] [--mode {1,2}] input_spec [output_spec] [options]
Опции вывода: --save FILE (модель фона), --subtract (вычесть модель). По умолчанию --subtract.
Опции Mode 1: --cell N (64), --clip K (1.7), --poly N (3), --median1 N (3), --median2 N (5), --border N (2), --mask-center [D] (маска центрального объекта).
Опции Mode 2: --poly N (1), --radius N (2).
Примеры:
autoflat input.fit output.fit
autoflat input.fit output.fit --poly 4 --mask-center
autoflat input.fit --save model.fit --subtract output.fit
autoflat --mode 2 input.fit output.fitНазначение: Коррекция горячих пикселей по списку координат.
Алгоритм: Заменяет горячие пиксели средним значением соседей (3×3).
Синтаксис:
cosme.py input_spec output_spec cosme.lst [-t]
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыcosme.lst— список горячих пикселей (формат:P x y)-t— тестовый режим: создаёт маску вместо коррекции
Формат cosme.lst:
P 123 456
P 789 101
# комментарий
Примеры:
cosme light0001.fit clean0001.fit cosme.lst
cosme image.fit mask.fit cosme.lst -tНазначение: Генерация списка горячих пикселей из master dark.
Алиас: find_hot (команда find_hot вызывает этот же скрипт)
Алгоритм: Находит 10000 самых ярких пикселей в изображении.
Синтаксис:
make_cosme.py input.fit cosme.lst
Параметры:
input.fit— master darkcosme.lst— выходной файл списка
Примеры:
make_cosme master_dark.fit cosme.lstНазначение: Автоматическое создание master dark и списков косметической коррекции из сырых дарков.
Метаскрипт: Использует sub.py, med.py, make_cosme.py.
Алгоритм:
- Сканирует входные файлы, отбирает с
IMAGETYP='Dark Frame' - Группирует по времени экспозиции (
EXPTIMEилиEXPOSURE) - Для каждой группы:
- Вычитает bias из каждого дарка
- Медианно комбинирует
- Генерирует список горячих пикселей
Синтаксис:
makedark.py input_spec [bias_spec]
Параметры:
input_spec— директория ИЛИ маска ИЛИ последовательность дарковbias_spec— опционально: числовая константа ИЛИ FITS-файл ИЛИ список/маска bias-файлов (по умолчанию 0)
Выходные файлы (в текущую директорию):
dark<exp>.fit— master dark для каждой экспозицииcosme<exp>.lst— список горячих пикселейbias.fit— master bias (если был указан список bias-файлов)
Формат имени: dark300s.fit (≥1с), dark500ms.fit (<1с), dark500mks.fit (микросекунды, <1мс — чтобы 0.0005с не терялось как 0ms)
Примеры:
makedark C:\Darks :: все дарки из папки, bias=0
makedark dark0001.fit :: последовательность дарков, bias=0
makedark *.fit 1024 :: маска, bias=константа
makedark C:\Darks master_bias.fit :: с готовым master bias
makedark C:\Darks bias0001.fit :: создаст bias.fit из последовательностиНазначение: Автоматическое создание master flat для каждого фильтра из сырых флэтов.
Метаскрипт: Использует sub.py, ngain.py, med.py, cosme.py, makedark.py.
Алгоритм:
- Сканирует входные файлы, отбирает с
IMAGETYP='Flat Frame' - Группирует по фильтру (
FILTER) - Валидирует: все файлы в группе должны иметь одинаковую экспозицию
- Ищет
dark<exp>.fitиcosme<exp>.lst(сначала в текущей, потом во входной директории) - Если дарки не найдены — запускает
makedarkавтоматически - Для каждой группы фильтра:
- Вычитает соответствующий dark
- Нормализует (ngain) к target_median
- Медианно комбинирует
- Применяет косметическую коррекцию
Синтаксис:
makeflat.py input_spec [target_median] [--filter NAME]
Параметры:
input_spec— директория ИЛИ маска ИЛИ последовательность флэтовtarget_median— опционально: целевая медиана для нормализации (по умолчанию 5000)--filter NAME— форсировать ВСЕ флэты как фильтр NAME, игнорируя хедер FILTER, и записатьFILTER=NAMEв хедер мастера. Для случая, когда снимали внешним фильтром, а колесо/хедер писали другой (напр.--filter Ha→flat_h.fit).
Выходные файлы (в текущую директорию):
flat_<filter>.fit— master flat для каждого фильтра
Коды фильтров:
| FILTER | Код файла |
|---|---|
| OIII | flat_o.fit |
| SII | flat_s.fit |
| Ha | flat_h.fit |
| L | flat_l.fit |
| R | flat_r.fit |
| G | flat_g.fit |
| B | flat_b.fit |
| (другие) | flat_<полное_имя>.fit |
Примеры:
makeflat C:\Flats :: все флэты из папки, median=5000
makeflat C:\Flats 10000 :: с другим target_median
makeflat flat*.fit :: маска файлов
makeflat @list.txt 8000 :: из списка
makeflat C:\Flats --filter Ha :: внешняя Ha (в хедерах L) -> flat_h.fit, FILTER=HaНазначение: Оптимизированное вычитание дарка с подбором коэффициента K.
Формула: result = input - K * dark
Алгоритм подбора K:
- Разбивает изображение на тайлы 64×64
- Исключает тайлы с нулями или насыщением
- Выбирает самый тёмный тайл
- Вычисляет K методом наименьших квадратов
Синтаксис:
darkopt.py input_spec output_spec master_dark.fit [cosme.lst]
Параметры:
input_spec— входные файлыoutput_spec— выходные файлыmaster_dark.fit— master darkcosme.lst— опциональный список горячих пикселей
Примеры:
darkopt light0001.fit opt0001.fit master_dark.fit
darkopt light0001.fit opt0001.fit dark.fit cosme.lstНазначение: Сортировка FITS-файлов по времени наблюдения, разбиение на сессии.
Синтаксис:
sortfits.py input_spec output_pattern [-s|--sessions] [--gap-hours H]
Параметры:
input_spec— входные файлыoutput_pattern— шаблон выходных имён-s,--sessions— режим сессий (выходные имена:<base>_Sssss_Fffff.fit)--gap-hours H— разрыв в часах для разделения сессий (по умолчанию 1.0)--auto— режим автоименования: имена выходных файлов по хидерам FITS:{OBJECT}_exp{TIME}_{FILTER}[_S{SSSS}]_{NNNN}.fit--name NAME— переопределить значение OBJECT (используется с --auto)--group-num— нумерация внутри каждой группы с 1 (используется с --auto)
Примеры:
sortfits light0001.fit sorted0001.fit
sortfits *.fit session.fit --sessions --gap-hours 2
sortfits *.fit sorted/ --auto
sortfits *.fit sorted/ --auto --name NGC1097
sortfits *.fit sorted/ --auto --group-numНазначение: Астрометрическое решение (WCS), репроекция на касательную плоскость (TAN), субпиксельное выравнивание.
Особенности:
- Использует astrometry.net (solve-field) через WSL
- Репроекция в гномоническую (TAN) проекцию
- Субпиксельное выравнивание через FFT
- Рефит WCS из .corr файлов
- Поддерживает цветные RGB FITS — решение по зелёному каналу, репроекция всех трёх каналов
- Принимает FITS или JPEG; для JPEG-входа выдаёт JPEG с решённым WCS, упакованным в заголовок
Синтаксис:
autosolve.py [options] input_spec output_spec
Основные опции:
--no-solve— пропустить астрометрическое решение--rectify— репроекция на касательную плоскость (TAN)--rect-center-ra— RA центра проекции (градусы)--rect-center-dec— Dec центра проекции (градусы)--individual— свой центр проекции для каждого файла--align— субпиксельное выравнивание--ref file.fit— референсный кадр для выравнивания--scale-low,--scale-high— диапазон масштаба (arcsec/pixel)--radius— радиус поиска (градусы)--no-rotate— ректификация без деротации — коррекция дисторсии с сохранением ориентации кадра. Размеры не меняются, нет чёрных полей. Для мозаик и обзоров.--reuse-wcs— если вход уже несёт готовый WCS (наш JPEG с WCS в COM-маркере или обычный solved FITS), пропустить solve-field и репроецировать прямо из этого WCS (с-r;--no-rotateснимает SIP, края = 0). Нет WCS → предупреждение + обычный солв. JPEG-вход → JPEG-выход; FITS-вход → FITS (_rect.fit), дисплей-JPEG отдельно черезfits2tiff.--jpeg [Q]— качество JPEG-выхода 1–100 (по умолчанию 99); действует при JPEG-входе--fovx D/--fovy D— поле зрения по ширине / высоте в градусах; из него вычисляется масштаб (указывать одно)--ra V/--dec V— центр поиска: десятичные градусы или шестидесятеричные (RA в часах)--name "ID"— центр по имени объекта через SIMBAD/Sesame--radius D— радиус конуса поиска (градусы)--downsample N— прореживание при детекции звёзд (по умолчанию 1; 2–4 ускоряют большие кадры)
Репроекция (--rectify):
Преобразует изображение в гномоническую (TAN) проекцию — проекцию на плоскость, касательную к небесной сфере. По умолчанию центр берётся из первого файла; можно задать явно через --rect-center-ra и --rect-center-dec.
--rect-method {wcsresample,interp,exact}— движок ресэмплинга (по умолчаниюwcsresample;interp— билинейный,exact— максимальная точность).
Вне-футпринтные (нет-данных) пиксели после ректификации всегда = 0 (чёрный = нет-данных): потребители тайлов/оверлеев опираются на это для чистого фейда краёв, а мозаика/стекинг всё равно исключают их маской покрытия. (Заливка медианой выдумывала бы серое «небо» на месте нет-данных — фейк, запрещён политикой Pulsar.)
JPEG вход/выход:
Если на вход подан JPEG, autosolve декодирует его, решает и записывает результат обратно в JPEG с решённым WCS, упакованным в COM-маркер (тот же формат, что пишет fits2tiff). Выход: <base>_wcs.jpg (и <base>_rect.jpg при --rectify). Если во входном JPEG уже есть встроенный FITS-заголовок (например, экспортированный из fits2tiff), из него восстанавливаются подсказки FOCALLEN/RA/DEC — решение идёт быстрее. Требует Pillow. JPEG-вход всегда даёт JPEG-выход (FITS-выход для JPEG-входа недоступен).
Заголовок с координатами (RA/DEC или OBJCTRA/OBJCTDEC) ускоряет решение даже без FOCALLEN: поиск ограничивается конусом вокруг координат (широким при неизвестном масштабе), а не идёт по всему небу.
Подсказки для решения (масштаб и позиция):
Обработанный JPEG обычно не несёт заголовка с FOCALLEN/координатами, поэтому solve-field уходит в долгий слепой перебор по всему небу и всем масштабам. Подсказки резко ускоряют (и часто вообще делают возможным) решение.
Масштаб — через поле зрения в градусах (--fovx — ширина, --fovy — высота; достаточно одного). Масштаб (arcsec/px) вычисляется из размера кадра, окно ±25 % под неточность оценки:
--fovx 1.1 # поле 1.1° по ширине (= 66′)
--fovy 0.5 # поле 0.5° по высоте (= 30′)FOV должен быть достаточно точным (окно ±25 %): грубая ошибка (например 28° вместо реальных 41°) выводит истинный масштаб за окно, и решение не находится. Ориентир: 50 мм на full-frame → поле по ширине ~40°.
Позиция — три способа записи (все три эквивалентны для Abell 35):
--ra 193.39 --dec -22.87 # десятичные ГРАДУСЫ
--ra "12 53 32" --dec "-22 52 23" # шестидесятеричные: RA в ЧАСАХ, Dec в градусах
--ra 12:53:32 --dec -22:52:23 # разделитель — пробел или двоеточие
--name "PN A66 35" # по имени объекта через SIMBADКлючевое: десятичное --ra — это градусы (не часы!), а шестидесятеричное --ra — часы. --ra/--dec имеют приоритет над --name.
Про --name: имена разрешаются по правилам SIMBAD. Внимание к неоднозначным именам — "Abell 35" это скопление галактик; планетарная туманность — "PN A66 35".
Радиус конуса — --radius 5 (градусы; по умолчанию из FOV, иначе широкий). Прореживание — --downsample 2 (2–4 ускоряют большие кадры; было захардкожено 1).
Проверка индексов: перед решением autosolve сам сверяет масштаб кадра с установленными индексами и, если ни один не подходит, печатает предупреждение с подсказкой, какие шкалы докачать (и откуда). Вручную: wsl bash -lc "ls /usr/share/astrometry" показывает установленные индексы; в режиме -v видно, какие индексы solve-field перебирает.
Имя выходного файла: если output задан — решённый результат получает ровно это имя (суффикс не добавляется); если output опущен — файлы кладутся рядом со входом с суффиксом _wcs (и _rect при --rectify).
Примеры:
autosolve light0001.fit solved0001.fit
autosolve --rectify --rect-center-ra 180.5 --rect-center-dec 45.2 *.fit out0001.fit
autosolve *.jpg --jpeg 95 # решить JPEG-и, вернуть JPEG с WCS в заголовке
# Безголовый JPEG с подсказками имени и поля зрения:
autosolve helix.jpg helix_wcs.jpg --name "NGC 7293" --fovy 0.5 --downsample 2 --jpeg 99Установка astrometry.net (Windows, через WSL):
# 1. Установить WSL (из PowerShell с правами администратора):
wsl --install
# 2. В WSL установить astrometry.net:
sudo apt update
sudo apt install astrometry.net
# 3. Скачать индексные файлы (выбрать нужные для вашего масштаба):
# http://data.astrometry.net/4200/
# Файлы index-42XX.fits — номер определяет диапазон FOV:
# 4219 = 00-10' (узкое поле, маленький сенсор / длинный фокус)
# 4218 = 10-22'
# 4217 = 22-44'
# 4216 = 44'-2°
# 4215 = 2°-2.8°
# 4214 = 2.8°-4°
# 4213 = 4°-5.6°
# 4212 = 5.6°-8° (типичный полнокадровый + средний фокус)
# 4211 = 8°-11°
# 4210 = 11°-16°
# 4209 = 16°-22° (широкоугольные объективы)
# 4208 = 22°-30'
# 4207 = 30°-40° (сверхширокоугольные)
# Скачайте те, которые покрывают FOV вашего телескопа/объектива.
# Примеры скачивания:
cd /usr/share/astrometry
sudo wget http://data.astrometry.net/4200/index-4212.fits
sudo wget http://data.astrometry.net/4200/index-4213.fits
# 4. Проверить установку:
solve-field --helpPython-зависимости: scipy, reproject (pip install scipy reproject)
Назначение: Конвертация FITS-изображений в TIFF, JPEG или PNG.
Особенности:
- Выходной формат определяется расширением файла (
.tif,.jpg,.png) или флагом--format - Выбор битности: 8-bit (stretch), 16-bit (clamp), 32-bit float (нормализация к [0,1])
- Автоопределение битности по типу данных FITS
- Wildcard в выходном шаблоне:
*.tifсохраняет имена входных файлов - 32-bit float нормализуется к [0.0, 1.0] для совместимости с Photoshop
--stretch— авто screen transfer (MTF-подобный нелинейный stretch)--keepcolor— сохранение цвета при stretch (растягивает яркость, масштабирует RGB)--bin 2|4— даунсэмплинг (аналог биннинга) перед сохранением--jpeg Q— качество JPEG (1-100, по умолчанию 95)
Зависимости: Pillow (pip install Pillow)
Синтаксис:
fits2tiff.py [--bits 8|16|32] [--format tiff|jpeg|png] [--stretch] [--keepcolor] [--bin 2|4] [--jpeg Q] [--flip] input_spec output_spec
Параметры:
input_spec— входные файлы (стандартные форматы: файл, маска, последовательность, @список)output_spec— выходной файл.tif/.jpg/.png, нумерованный шаблон или wildcard--bits 8— линейный stretch [min,max] → [0,255], uint8--bits 16— clamp к [0,65535], uint16--bits 32— нормализация [min,max] → [0.0,1.0], float32- (без --bits) — авто: int8/uint8→8, int16/uint16→16, остальное→32
--format F— формат выхода: tiff, jpeg, png (по умолчанию по расширению)--stretch— нелинейный авто stretch для экранного отображения; уважает--bitsдля TIFF (16/32 = растянутый TIFF без бандинга), JPEG/PNG остаются 8-бит--keepcolor— сохранение цвета при stretch--bin 2|4— даунсэмплинг в 2 или 4 раза--jpeg Q— качество JPEG (1-100)--flip— вертикальное отражение (FITS bottom-left → TIFF top-left)
При конвертации в JPEG и PNG полный FITS-заголовок автоматически сохраняется в метаданных файла (WCS координаты, имя объекта, экспозиция и т.д.)
Примеры:
:: Одиночный файл (авто битность)
fits2tiff image.fit image.tif
:: Пакетная конвертация с сохранением имён
fits2tiff *.fit *.tif
:: 8-bit для превью
fits2tiff --bits 8 light0001.fit preview0001.tif
:: JPEG с авто stretch для превью
fits2tiff --stretch --bin 2 *.fit *.jpg
:: Растянутый 16-битный TIFF (без бандинга, для дальнейшего редактирования)
fits2tiff sum_l.fit out_l.tif --stretch --bits 16
:: Нумерованный выход
fits2tiff --bits 16 *.fit out0001.tifНазначение: Конвертация TIFF-изображений обратно в формат FITS с восстановлением заголовков.
Особенности:
- Автоматическое восстановление заголовков из перезаписываемого FITS-файла
- Явное указание источника заголовков через
--header - Поддержка TIFF 8-bit (L), 16-bit (I;16), 32-bit float (F)
- RGB TIFF автоматически конвертируется в grayscale
Зависимости: Pillow (pip install Pillow)
Логика заголовков (приоритет):
--header source.fit— заголовки из указанного файла- Выходной файл уже существует — заголовки читаются из него до перезаписи
- Ни то ни другое — минимальный заголовок (только размеры и тип данных)
Синтаксис:
tiff2fits.py [--flip] [--header source.fit] input_spec output_spec
Параметры:
input_spec— входные TIFF (файл, маска, нумерованная последовательность, @список)output_spec— выходной FITS, нумерованный шаблон (out0001.fit) или wildcard (*.fit)--header F— взять FITS-заголовки из файла F (применяется ко всем выходным)--flip— вертикальное отражение (обратное к fits2tiff --flip)
Примеры:
:: Обратная конвертация — заголовки берутся из перезаписываемых .fit файлов
tiff2fits *.tif *.fit
:: С явным указанием источника заголовков
tiff2fits edited.tif result.fit --header original.fit
:: Пакетная конвертация с нумерацией
tiff2fits img0001.tif out0001.fit --header reference.fitТипичный workflow (Photoshop):
:: 1. Экспорт в TIFF
fits2tiff *.fit *.tif
:: 2. Редактирование в Photoshop, сохранение .tif
:: 3. Импорт обратно — заголовки подхватятся из существующих .fit
tiff2fits *.tif *.fitНазначение: Конвертация Camera RAW файлов в FITS с сырыми данными Bayer-матрицы. Пока поддерживается только Canon CR2/CR3.
Особенности:
- Режим по умолчанию: сырая CFA Bayer мозаика (2D монохромный uint16, оригинальные значения сенсора)
- Опция
--debaer: линейная дебаеризация в 3-канальный RGB FITS (uint16) - Полный маппинг EXIF → FITS заголовок (камера, экспозиция, ISO, дата, температура)
- Встроенный парсер CR3 ISOBMFF (не требует внешних утилит для нового формата Canon)
- Парсинг Canon MakerNote для температуры корпуса камеры (CCD-TEMP)
- Автоопределение dark/light по доле ярких пикселей
- Wildcard в выходном шаблоне:
*.fitсохраняет имена входных файлов
Зависимости: rawpy (pip install rawpy), exifread (pip install exifread)
Маппинг EXIF → FITS заголовок:
| Источник | FITS keyword | Описание |
|---|---|---|
| Make + Model | INSTRUME | Производитель и модель камеры |
| ExposureTime | EXPTIME, EXPOSURE | Время экспозиции в секундах |
| ISOSpeedRatings | GAIN | Значение ISO |
| DateTimeOriginal | DATE-OBS | Дата/время наблюдения (ISO формат) |
| (из DATE-OBS) | JD | Юлианская дата |
| Canon ShotInfo | CCD-TEMP | Температура корпуса камеры (Цельсий) |
| raw_pattern | BAYERPAT | Паттерн Bayer (например RGGB) |
| (автоопределение) | IMAGETYP | "Dark Frame" или "Light Frame" |
| — | FILTER | "CFA" (raw) или "RGB" (debaer) |
| black_level_per_channel | BLKLVL_R/G/B/G2 | Уровни чёрного по каналам |
Синтаксис:
raw2fits.py [--debaer] [--debug] input_spec output_spec
Параметры:
input_spec— входные RAW файлы (файл, маска*.cr2, нумерованная последовательностьIMG0001.CR3, @list.txt)output_spec— выходной FITS, нумерованный шаблон (out0001.fit) или wildcard (*.fit)--debaer— дебаеризация в линейный RGB вместо сырого CFA--debug— запись детального диагностического лога (<имя_файла>.log) для каждого файла
Примеры:
:: Одиночный файл
raw2fits IMG_0001.CR2 test.fit
:: Пакетная конвертация с сохранением имён
raw2fits *.cr3 *.fit
:: Нумерованный выход
raw2fits IMG0001.CR3 out0001.fit
:: Дебаеризованный RGB
raw2fits --debaer *.cr3 *.fit
:: Debug режим (создаёт .log файлы)
raw2fits --debug IMG_0001.CR3 test.fitНазначение: FFT-выравнивание кадров (поворот, масштаб, субпиксельный сдвиг).
Особенности:
- Фазовая корреляция для поиска сдвига
- Пирамидальный поиск угла и масштаба
- Постобработка: локальная аффинная коррекция
- Параллельная обработка
Синтаксис:
fft_align.py reference input_spec output_spec [options]
Основные опции:
--superfine— пирамидальный режим высокой точности--post-correction— локальная аффинная коррекция--max-angle N— максимальный угол поиска (по умолчанию 5°)--scale-delta N— диапазон масштаба ±N (по умолчанию 0.01)--flux— режим сохранения потока (линейная интерполяция)
Примеры:
fft_align ref.fit light0001.fit aligned0001.fit
fft_align ref.fit *.fit out0001.fit --superfine --post-correction
fft_align ref.fit light0001.fit aligned0001.fit --flux --max-angle 2Назначение: Генерация CSV-списка фотосессий для импорта в AstroBin.
Особенности:
- Рекурсивный обход директории с FITS файлами
- Два режима: по FITS-заголовкам (по умолчанию) или по имени файла (
--parsename, без зависимостей) - Дата сессии из DATE-OBS (или mtime файла как fallback); ночная съёмка до полудня → предыдущий день
- Группировка по дате, фильтру и экспозиции
- CSV выход совместим с форматом импорта AstroBin
- Сводная статистика по фильтрам
Зависимости: astropy (режим по умолчанию), нет (режим --parsename)
Формат CSV (AstroBin):
date,filter,number,duration
2024-03-15,5656,12,600
2024-03-15,5642,10,300
Коды фильтров AstroBin:
ВАЖНО: Коды фильтров в скрипте — это ПРИМЕРЫ. Вы ДОЛЖНЫ отредактировать словарь
ASTROBIN_FILTER_IDSв файлеabsession.py, указав ID ваших фильтров с AstroBin. Найдите ваш фильтр на странице:https://app.astrobin.com/equipment/explorer/filter?page=1ID фильтра — число в URL страницы фильтра, например:.../filter/4388/filter-name-...→ ID = 4388
| Фильтр | ID (пример) |
|---|---|
| L | 5652 |
| R | 5656 |
| G | 5646 |
| B | 5642 |
| Ha | 4388 |
| SII | 4396 |
| OIII | 4392 |
Синтаксис:
absession.py [options] [directory]
Параметры:
directory— путь для сканирования (по умолчанию текущая директория)--parsename— извлекать фильтр и экспозицию из имён файлов (без зависимостей)--out FILE— записать CSV в файл (по умолчанию stdout)--flat— не рекурсировать в поддиректории
Формат имени файла (режим --parsename):
Name_Type_FILTER_SeqNum_Binning_EXPOSURE_Temp.fit
Пример: NGC253_L_R_54205_Bin1x1_120s_-10C.fit
| | | | | | |
| | | | | | +-- температура (игнорируется)
| | | | | +------ экспозиция: 120 секунд
| | | | +------------- биннинг (игнорируется)
| | | +------------------- порядковый номер (игнорируется)
| | +--------------------- ФИЛЬТР: R, G, B, L, Ha, SII, OIII
| +----------------------- тип экспозиции (игнорируется)
+------------------------------ имя объекта
Мозаика (номер поля в имени объекта, например "M8_02"):
M8_02_L_G_11788_Bin1x1_120s_-10C.fit
| | | | | | | |
| | | | | | | +-- температура (игнорируется)
| | | | | | +------ экспозиция: 120 секунд
| | | | | +------------- биннинг (игнорируется)
| | | | +------------------- порядковый номер (игнорируется)
| | | +--------------------- ФИЛЬТР: G
| | +----------------------- тип экспозиции (игнорируется)
| +-------------------------- номер поля мозаики (игнорируется)
+------------------------------ имя объекта
Определение: 7 полей (без расширения) = обычный кадр, 8 полей = мозаика. Используются только поля FILTER и EXPOSURE; остальные игнорируются. Этот формат имени можно настроить в APT, N.I.N.A., SGPro или другом софте управления съёмкой.
Определение даты сессии: файлы с DATE-OBS (или mtime) до 12:00 считаются частью вечерней сессии предыдущего дня.
Примеры:
:: Текущая директория (читает FITS-заголовки)
absession
:: Конкретная директория
absession C:\Astro\NGC3576
:: Парсинг имён файлов (без astropy)
absession --parsename C:\Astro\NGC3576
:: Сохранить в файл
absession --out sessions.csv C:\Astro\Data
:: Без рекурсии
absession --flat .Пример вывода:
Scanning 47 FITS files...
date,filter,number,duration
2024-03-15,5656,12,600
2024-03-15,5642,10,300
2024-03-16,5652,25,120
Total files: 47
Exposure: 28200 ( 7h 50m )
L: 25 x 2 min ( 0h 50m )
R: 12 x 10 min ( 2h 0m )
B: 10 x 5 min ( 0h 50m )
Назначение: Выравнивание астрономических кадров по звёздам.
Автоматически находит звёзды на кадрах, сопоставляет их и выравнивает изображения с субпиксельной точностью. Поддерживает масштаб, поворот, зеркальное отражение и нелинейные искажения (TPS). Работает в кросс-фильтровом режиме (например, выравнивание Ha по R-референсу).
Зависимости: scipy, sep
Режимы работы:
- С
--ref— выравнивание всех кадров на указанный референсный кадр по звёздам. - Без
--ref, несколько кадров (по умолчанию) — выравнивание всех кадров на первый кадр. - Без
--ref, один файл или--rgb— коррекция хроматизма: выравнивание каналов R и B по G внутри каждого файла (атмосферная рефракция + хроматическая аберрация).
Синтаксис:
staralign input_spec output_spec [--ref reference.fit] [options]
staralign *.fit out0001.fit (без --ref: на первый кадр)
staralign color.fit corrected.fit (один файл: коррекция хроматизма)
staralign *.fit out0001.fit --rgb (хроматизм для каждого файла)
Параметры:
| Параметр | По умолч. | Описание |
|---|---|---|
--ref FILE |
первый кадр | Референсный кадр (без него по умолчанию берётся первый входной кадр) |
--model {tps|projective} |
tps | Модель регистрации |
--smoothness F |
0.25 | Гладкость TPS (0 = точная интерполяция) |
--descriptors N |
20 | Пентагонов на звезду (5-50) |
Параметры сопоставления:
| Параметр | По умолч. | Описание |
|---|---|---|
--hash-tol F |
0.05 | Толеранс хешей пентагонов в 6D. Увеличить до 0.1-0.15 для кросс-фильтра |
--angle-tol F |
0.15 | Толеранс угловой верификации (рад). Увеличить до 0.25-0.3 для разреженных полей |
--min-vote N |
2 | Мин. голосов хешей для пары. Поставить 1 для сложных случаев |
--tolerance F |
3.0 | Толеранс RANSAC (пиксели). Увеличить до 5-10 для больших искажений |
Детекция звёзд:
| Параметр | По умолч. | Описание |
|---|---|---|
--snr F |
5.0 | Порог SNR (меньше = больше звёзд) |
--max-stars N |
150 | Макс. звёзд. При неудаче автоповтор с 2x, 2.5x, 3x |
--no-retry |
выкл | Отключить автоповтор с большим числом звёзд |
Прочее:
| Параметр | По умолч. | Описание |
|---|---|---|
--threads N |
CPU-1 | Рабочие потоки (1 в режиме --debug) |
--debug |
выкл | Подробная диагностика по каждому кадру |
--no-mirror |
выкл | Не пробовать зеркальное отражение |
--rgb |
выкл | Коррекция хроматизма (R,B→G) в каждом входном файле вместо выравнивания кадров |
Автоповтор: при неудаче сопоставления скрипт автоматически повторяет с увеличенным числом звёзд: [N, 2N, 2.5N, 3N], но не более числа обнаруженных. Отключить: --no-retry.
Рекомендации по сложным случаям:
| Ситуация | Рекомендуемые настройки |
|---|---|
| Один фильтр, один телескоп | настройки по умолчанию |
| Кросс-фильтр (R vs Ha) | --max-stars 200 |
| Разные фокусные расстояния | --tolerance 5 или выше |
| Разреженное поле (<30 звёзд) | --min-vote 1 --angle-tol 0.25 |
| Большая разница в числе звёзд | --max-stars 300 --hash-tol 0.1 |
Вывод: для каждого кадра — [N/M] filename: OK inliers, tps_pairs, residual_px или FAIL reason.
- inliers — пары звёзд, прошедшие RANSAC
- tps_pairs — пары для финального TPS-варпа (обычно 30-300)
- residual_px — медианная ошибка позиции в пикселях (меньше = лучше)
Итоговая строка: количества, время, список неудачных файлов.
Примеры:
:: Выровнять все кадры по референсу
staralign *.fit out0001.fit --ref ref.fit
:: Кросс-фильтр: R-референс, Ha-таргеты
staralign Ha_*.fit aligned0001.fit --ref R_ref.fit --max-stars 200
:: Многопоточный режим
staralign *.fit out0001.fit --ref ref.fit --threads 4
:: Без --ref: выровнять все кадры на первый
staralign *.fit out0001.fit
:: Коррекция хроматизма в одном RGB-файле
staralign color.fit corrected.fit
:: Батч коррекции хроматизма (каждый файл поканально)
staralign *.fit out0001.fit --rgbОбязательные:
- Python 3.6+
- numpy
- astropy
Для продвинутых функций:
- scipy (fft_align, autoflat, autosolve, staralign)
- reproject (autosolve ректификация)
- astrometry.net (autosolve решение)
- Pillow (fits2tiff, tiff2fits, autosolve JPEG вход/выход)
- rawpy (raw2fits)
- exifread (raw2fits)
- sep (bestof, rgbbalance --autostar, sub --continuum, staralign)
- xisf (xisf2fits)
Windows — автоматический инсталлятор: запустите setup.bat в корне проекта. Он проверит Python, установит зависимости и добавит команды в PATH.
Только PATH (без установки зависимостей): запустите Commands\setup.bat для добавления папки Commands в PATH.
После этого скрипты доступны как команды: add, sub, med, calibrate и т.д.
Назначение: Программный биннинг 2×2 / 4×4 пикселей.
Уменьшает размеры изображения суммированием соседних пикселей. Поддерживает 2D (H×W) и 3D (N×H×W) FITS.
Синтаксис:
binxy input_spec output_spec --2|--4 [--keep_bitness]
Параметры:
--2— биннинг 2×2 (уменьшение размеров в 2 раза)--4— биннинг 4×4 (два прохода 2×2)--keep_bitness— целочисленные: делить сумму на 4, не повышать разрядность
Поведение по типу данных:
| Вход | Операция | Выход |
|---|---|---|
| Integer | Сумма блока 2×2 | Повышение разрядности при переполнении (8→16→32→64) |
Integer + --keep_bitness |
Сумма блока 2×2 → // 4 |
Как на входе |
| Float | Среднее блока 2×2 (×0.25) | Как на входе |
Обновляет заголовки XPIXSZ, YPIXSZ, XBINNING, YBINNING. Нечётные размеры обрезаются до чётных.
Примеры:
:: Биннинг 2x2
binxy img0001.fit out0001.fit --2
:: Биннинг 4x4 (последовательность)
binxy img0001.fit out0001.fit --4
:: 2x2, сохранить разрядность (целочисленное деление на 4)
binxy img0001.fit out0001.fit --2 --keep_bitnessНазначение: Обрезка FITS-изображений по размеру/центру или полям.
Два режима: фиксированный размер выхода с точкой центра, или обрезка полей по краям. Поддерживает автоцентрирование на самом ярком объекте. Выход за границы заполняется нулями.
Синтаксис:
crop input_spec output_spec [options]
Режим 1 — Обрезка по размеру:
--width WW— ширина выхода в пикселях--height HH— высота выхода в пикселях--center XX YY— точка центра (по умолчанию — центр изображения)--autocenter [P]— автоопределение центра по яркости (P — порог, по умолчанию 50)--positions FILE— центры из CSV-файла
Формат CSV для --positions:
filename,cx,cy
009A7220.fit,1960,1091
009A7221.fit,1960,1091
Дополнительные колонки (например radius) игнорируются.
Режим 2 — Обрезка полей:
--top N,--bottom N,--left N,--right N— пиксели для обрезки
Примеры:
:: Обрезка 1000x1000 из центра
crop img.fit out.fit --width 1000 --height 1000
:: Обрезка вокруг заданной точки
crop img.fit out.fit --width 1000 --height 1000 --center 3000 2000
:: Автоцентр на ярчайшем объекте
crop img.fit out.fit --width 1000 --height 1000 --autocenter
:: Обрезка полей
crop img0001.fit out0001.fit --top 100 --bottom 100 --left 200 --right 200Назначение: Демозаик Bayer-паттерна в 3-канальный RGB FITS.
Вход: 2D монохромный FITS с CFA Bayer-паттерном (H×W). Выход: 3-канальный RGB FITS (3×H×W).
Синтаксис:
debayer input_spec output_spec [--pattern PAT] [--method METHOD]
Параметры:
--pattern PAT— Bayer-паттерн: RGGB, BGGR, GRBG, GBRG (по умолчанию: из заголовка BAYERPAT или RGGB)--method METHOD— алгоритм демозаика
Методы:
| Метод | Качество | Скорость | Зависимости |
|---|---|---|---|
bilinear |
Базовый | Быстрый | Нет (numpy) |
vng |
Высокий (VNG) | Средний | OpenCV (pip install opencv-python) |
Примеры:
:: По умолчанию (bilinear, паттерн из заголовка)
debayer img0001.fit out0001.fit
:: VNG с явным паттерном
debayer *.fit rgb/ --method vng --pattern RGGBНазначение: Удаление одиночных горячих (и холодных) пикселей.
Для каждого пикселя вычисляет среднее и стандартное отклонение 8 соседей. Если пиксель превышает mean + N*sigma, заменяет его средним соседей. Звёзды сохраняются: их PSF занимает несколько пикселей, поэтому соседи звезды тоже яркие. Полностью векторизован (без циклов по пикселям). Поддерживает 2D и 3D FITS.
Синтаксис:
hotfix input_spec output_spec [options]
Параметры:
--sigma N— порог обнаружения в стандартных отклонениях (по умолчанию 5)--floor N— минимальный уровень шума в ADU (по умолчанию auto)--cold— также исправлять холодные (мёртвые) пиксели нижеmean - N*sigma--debug— диагностический вывод для первого файла
Примеры:
:: По умолчанию (5 sigma, только горячие)
hotfix img0001.fit out0001.fit
:: Строже порог
hotfix *.fit fixed/ --sigma 7
:: Горячие и холодные пиксели
hotfix img0001.fit out0001.fit --sigma 4 --coldНазначение: Midtone Transfer Function (PixInsight-совместимая) с auto black/white и сохранением цвета.
Применяет нелинейную кривую тона: mtf(x, m) = (1-m)*x / (m + x*(1-2*m))
Кривая проходит через (0,0), (m, 0.5), (1,1), где m — баланс средних тонов.
Синтаксис:
mtf input_spec output_spec K [K2 K3 ...] [options]
mtf input_spec output_spec --median T [options]
mtf input_spec output_spec --inverse
Параметры:
K [K2 K3 ...]— один или несколько значений midtones balance (0..1). Несколько K: результат = среднее MTF по всем K. Дубликаты = веса.--median T(-m T) — вместо явного K подобрать K так, чтобы медиана кадра попала в T (0..1); для цвета медиана берётся по яркости. Взаимоисключающе с K.--zero(-z) — обработка нулей (границы выровненных кадров / невалид): игнорировать нули при подсчёте--medianи восстановить нули входа на выходе, чтобы MTF не сдвигала 0 в ненулевое.--auto— автоматическое определение black/white уровней (linked для цветных)--autoblack/--autowhite— по отдельности--keepcolor [K]— сохранение цвета через luminance ratio (K=1 полное, K<1 blend)--keepcolor-hsl [K]— сохранение через HSL (лучше для агрессивного stretch)--equal— равновесная luminance (R+G+B)/3 вместо (R+2G+B)/4--clip [P]— клиппинг по перцентилю--inverse— численно обратить ранее применённый MTF и восстановить линейные данные. Берёт только вход и выход (без K). Ошибка, если записи нет или преобразование необратимо.
Обратимое преобразование: каждый прямой проход записывает точное преобразование в FITS-заголовок (флаг MTFINV + MTFK/MTFBLK/MTFWHT/MTFNMIN/MTFNMAX/MTFLUM/MTFCOL), так что --inverse восстанавливает линейность «по числам» — напр. растянуть → убрать звёзды → --inverse. Обращение точно только для ненасыщенных пикселей (значения, упёршиеся в 0/1, теряются); для лучшей точности держи промежуток во float. Необратимо: несколько K, --clip, частичный --keepcolor (0<K<1).
Auto black: 3% самых тёмных ячеек фона → median - 5×MAD. Auto white: медиана верхних 0.01% пикселей. Linked для цвета: black = min(channels), white = max(channels).
Примеры:
:: Осветлить средние тона
mtf img.fit out.fit 0.2
:: Мульти-MTF: тени + хайлайты
mtf img.fit out.fit 0.1 0.1 0.4
:: По целевой медиане (для выровненных кадров добавить --zero)
mtf img.fit out.fit --median 0.25 --auto
mtf aligned.fit out.fit --median 0.25 --auto --zero
:: Обратное преобразование (восстановить линейность по записи в заголовке)
mtf stretched.fit linear.fit --inverse
:: С автоматическими границами
mtf img.fit out.fit 0.15 --auto
:: Агрессивный stretch с HSL сохранением цвета
mtf img.fit out.fit 0.01 --keepcolor-hsl --autoНазначение: Баланс цвета и яркости для цветных RGB FITS.
Нейтрализует фон, применяет баланс белого (авто или ручной), нормализует яркость в серии кадров. Вход: 3-канальный RGB FITS (3×H×W).
Синтаксис:
rgbbalance input_spec output_spec [options]
Параметры:
--auto [file]— авто баланс белого: масштаб R и B к диапазону G. Эталон из файла (по умолчанию первый вход)--autoeach— авто баланс белого вычисляется независимо для каждого файла--rgb R G B— ручные коэффициенты масштабирования каналов--autostar [file]— баланс белого по звёздам: детекция звёзд на G канале, кросс-матчинг с R и B (толерантность 1.5 px), апертурная фотометрия, вычисление K по суммарным потокам. Точнее чем--autoдля узкополосных/широкополосных миксов. Эталон из файла (по умолчанию первый вход)--snr N— порог SNR для детекции звёзд в --autostar (по умолчанию 38)--warmth W— сдвиг цветовой температуры вдоль кривой Планка (-1..+1, default 0)--kmin N— процент тёмных пикселей для оценки чёрного уровня (по умолчанию 5)--kmax N— процент ярких пикселей для оценки белого уровня (по умолчанию 5)
--rgb, --auto, --autoeach, --autostar взаимоисключающие. Без них — только нейтрализация фона и нормализация яркости.
Алгоритм:
- Квантильные медианы для каждого канала (нижние kmin%, верхние kmax%)
- Нейтрализация чёрного: сдвиг каналов к среднему min_median
- Цветовой баланс вокруг чёрной точки (авто:
K_R = range_G/range_R) - Нормализация яркости между кадрами
Примеры:
:: Авто баланс белого
rgbbalance img0001.fit out0001.fit --auto
:: Авто баланс по конкретному эталону
rgbbalance img0001.fit out0001.fit --auto ref.fit
:: Ручные коэффициенты
rgbbalance img0001.fit out0001.fit --rgb 1.1 2.0 0.5
:: Только нормализация фона и яркости
rgbbalance img0001.fit out0001.fit
:: Баланс белого по звёздам
rgbbalance img.fit out.fit --autostar
rgbbalance img0001.fit out0001.fit --autostar ref.fit --snr 50Назначение: Оптимальное взвешенное сложение с sigma-fade отсечением.
Многопроходный алгоритм: анализ кадров → взвешенное среднее → итеративный sigma-clip с плавным подавлением выбросов. Вес каждого кадра определяется по SNR² и/или FWHM.
Алгоритм:
- Pass 0: Анализ — детекция звёзд, измерение SNR/FWHM, кэш фона
- Pass 1: Взвешенное среднее нормализованных кадров
- Pass 2: RMS deviation map (bg-subtracted сравнение)
- Pass 3: Sigma-clip с fade (оригинальные значения в сумму)
- Итерации 2+: повтор passes 2-3 с уточнённым средним
Синтаксис:
stack.py input_spec output.fit [options]
Sigma clipping (без --sigma — простая взвешенная сумма):
--sigma [N]— порог (default 2.3)--fade N— ширина fade (default 0.7). Диапазон отсечения: [sigma .. sigma+fade]--iter [N]— итерации (default 2)
Веса:
- По умолчанию: SNR² (кадры с лучшим соотношением сигнал/шум получают больший вес)
--fwhm [K]— добавить вес по FWHM: weight *= MTF(FWHM_rank, K)--nosnr— отключить SNR² (только FWHM)--equalize [K]— притянуть все веса кадров к равным на долюK∈[0,1] (default 1.0 = полностью равные). Отключает SNR/FWHM-взвешивание в сумме, но сохраняет пер-кадровую нормализацию и сигма-клип (fade). Для кадров с несравнимым SNR (например, в сильно разном масштабе после разных преобразований). По умолчанию выкл.;K=0— без изменений. Клиппинг/RMS всегда считаются на оптимальных весах и отKне зависят — эквализация меняет только вклад кадра в итоговую сумму. Формула: веса нормируются к среднему=1, затемWnew = w·(1−K)+K
Прочее: --border N (1), --threads N, --debug [FILE]
Фон: --cell N (64), --clip K (1.7), --poly N (3), --mask-center [D]
Граничный фон (--bg-border [W], opt-in, по умолчанию выкл.): оценивать пер-кадровый уровень неба (dark) по тонкому кольцу данных у реального края кадра, а не по всему кадру. Для мозаик из кадров разных футпринтов с центрированным объектом это убирает DC-шов на границе футпринта (кольцо свободно от объекта → несмещённое небо). W — ширина кольца в px (default авто = 5% короткой стороны). Внешняя no-data область определяется заливкой от края (внутренние дыры исключаются); полный кадр без no-data → внешняя рамка; вырожденное кольцо → откат к фону по всему кадру. Не использовать, если объект касается края.
Starless SNR (опционально; дефолтный звёздный SNR не меняется):
По умолчанию сигнал кадра (для веса SNR² и нормировки) = медиана потока опорных звёзд, поэтому на поле без звёзд stack завершается с ошибкой. --starless оценивает сигнал по ярким клеткам: кадр режется на мелкие клетки (--signal-cell N, default 16, авто-уменьшение 16→8→4→2→1); сигнал-клетки = валидные на всех кадрах (без нулей и пересвета) и с mean − фон > 5σ на всех кадрах; сигнал = медиана (по средним 30% клеток по яркости) от mean − фон. Пересвет = --sat-frac F (default 0.5) × робастный максимум кадра (P99.5); отключается, если порог попадает в диапазон неба/сигнала. Если даже на 1px клетках найдено <3 — stack завершается с ненулевым кодом (вызывающий может сделать фоллбэк к медиане/сумме). --fwhm в starless-режиме игнорируется.
Примеры:
:: Простое взвешенное сложение (без sigma)
stack *.fit result.fit
:: С sigma-clip (по умолчанию sigma=2.3, fade=0.7, 2 итерации)
stack *.fit result.fit --sigma
:: Вес по SNR² и FWHM
stack *.fit result.fit --sigma --fwhm
:: Только по FWHM, без SNR
stack *.fit result.fit --fwhm --nosnr
:: Равный вклад кадров (несравнимый SNR), нормализация и сигма-клип сохранены
stack *.fit result.fit --sigma --equalize
:: С debug логом
stack *.fit result.fit --sigma --debug log.txt
:: Поле без звёзд (туманность) — сигнал по ярким клеткам
stack neb_*.fit result.fit --sigma --starless
stack neb_*.fit result.fit --starless --signal-cell 8
:: Мозаика кадров разных футпринтов с центрированным объектом — небо по краевому кольцу
stack obj_*.fit result.fit --sigma --bg-borderНазначение: LRGB композиция — совмещение высокодетального L-канала с цветовыми данными RGB.
Методы:
ratio(default) —C_out = C × L_fit / (R+G+B + ε), сохраняет цветовые соотношения точнее. ЗнаменательR+G+B(не перцептивный(R+2G+B)/4) даёт тождествоΣ C_out = L_fitи согласован с super-luminancehsl— RGB→HSL, замена L (после LinearFit), HSL→RGB
Super-luminance (--superlum): опциональное построение мастер-яркости с максимальным SNR — инверсно-дисперсионная (SNR²) смесь L и синтетической яркости R+G+B (обе после подгонки шкал). Шум оценивается по фону, печатается отношение SNR_L:SNR_syn и ожидаемый выигрыш. По умолчанию выключено: L используется как есть (входной L уже может быть super-luminance). Допущение: RGB должен быть уже сбалансирован — иначе синтетическая яркость R+G+B перекошена и веса SNR смещаются; используйте --auto или пред-баланс каналов.
Синтаксис:
lrgb.py L.fit R.fit G.fit B.fit output.fit [options]
lrgb.py L.fit RGB.fit output.fit [options]
Параметры:
--method M— ratio (default) или hsl--saturation S— boost насыщенности (default 1.0, L подавляет saturation)--warmth W— сдвиг цветовой температуры вдоль кривой Планка (-1..+1, default 0)--lightness K— MTF на lightness (default 0.5 = identity)--superlum— построить super-luminance (SNR²-смесьL+R+G+B) перед совмещением--dry-run— измерить и напечатать отношение шумовL:synи ожидаемый выигрыш SNR, без записи--eps E— пол знаменателя ratio-метода (default 0.002, нормированные [0,1]); только численная стабильность в тенях--bg-desat K— тянуть слабосигнальные пиксели к нейтральному серому: цвет сохраняется для сигнала ≥ K·σ над фоном, гаснет ниже (default 0 = выкл; типично 2–4). Каноническая чистка цветового шума фона--auto— полный пайплайн: баланс RGB + выравнивание фона + LRGB-совмещение--mask-center— использовать центральную область для оценки фона (для--auto)
Примеры:
:: 4 моно файла, ratio метод (default)
lrgb L.fit R.fit G.fit B.fit result.fit
:: L + готовый RGB, HSL метод
lrgb L.fit RGB.fit result.fit --method hsl
:: С boost насыщенности
lrgb L.fit R.fit G.fit B.fit result.fit --saturation 1.3
:: Super-luminance (+SNR) с нейтрализацией фона
lrgb L.fit R.fit G.fit B.fit result.fit --superlum --bg-desat 3
:: Только измерить ожидаемый выигрыш SNR
lrgb L.fit R.fit G.fit B.fit result.fit --superlum --dry-run
:: Полный автоматический пайплайн
lrgb --auto L.fit R.fit G.fit B.fit result.fitНазначение: Отбор лучших кадров по FWHM (качество атмосферы).
Анализирует FWHM звёзд на наборе FITS-изображений с помощью детекции на основе SEP. Может копировать лучшие N% кадров, фильтровать по порогу FWHM и/или записать CSV-отчёт.
Зависимости: sep (pip install sep)
Синтаксис:
bestof input_spec [output_spec] [опции]
Режимы отбора (хотя бы один обязателен, если не указан только --csv):
--best P— копировать лучшие P процентов кадров (наименьший FWHM), 1-99--threshold T— копировать кадры с FWHM <= T пикселей
Опции:
--csv FILE— записать CSV-отчёт: fwhm,filename (отсортировано по FWHM)--snr N— порог SNR для детекции звёзд (по умолчанию 10)
Примеры:
bestof light0001.fit best0001.fit --best 70
bestof *.fit selected/ --threshold 3.5
bestof *.fit --csv report.csv
bestof *.fit best/ --best 80 --csv report.csvНазначение: Объединение/разделение RGB каналов в FITS-файлах.
Merge: объединяет 3 монохромных 2D FITS (R, G, B) в один 3-канальный RGB FITS (3, H, W). Split: извлекает R, G, B каналы из RGB FITS (3, H, W) в 3 монохромных FITS. Прописывает FILTER = R/G/B в хидер каждого канала.
Синтаксис:
rgb --merge inR inG inB --out outRGB
rgb --split inRGB --out outR outG outB
Параметры: Все аргументы файлов поддерживают стандартные спецификации: один файл, маска, нумерованная последовательность, @list.txt. Для merge все три входа должны содержать одинаковое количество файлов.
Примеры:
# Объединить одиночные файлы
rgb --merge r.fit g.fit b.fit --out rgb.fit
# Объединить последовательности
rgb --merge r0001.fit g0001.fit b0001.fit --out rgb0001.fit
# Разделить одиночный файл
rgb --split rgb.fit --out r.fit g.fit b.fit
# Разделить последовательность
rgb --split rgb0001.fit --out r0001.fit g0001.fit b0001.fitНазначение: Конвертация XISF (PixInsight) файлов в формат FITS.
Сохраняет данные пикселей как есть (float32/float64/uint16, без конвертации типов). Восстанавливает ключевые слова FITS-хидера из метаданных XISF FITSKeyword. Обрабатывает RGB (конвертация осей HWC→CHW) и монохромные изображения.
Зависимости: xisf (pip install xisf)
Синтаксис:
xisf2fits input_spec output_spec
Параметры:
input_spec— один файл .xisf, маска (*.xisf), или @list.txtoutput_spec— один файл .fit, нумерованный шаблон (out0001.fit), или директория (outdir/)
Примеры:
xisf2fits image.xisf image.fit
xisf2fits *.xisf converted/
xisf2fits @list.txt out0001.fitВ каждой папке скрипта есть run.bat для тестирования:
cd Add
run.batТестовые данные находятся в папках Samples1/, Samples2/, 1/.