eddy_em: (Default)
В поисках совершенства (надоело уже туда-сюда тягать всякие фичи среди 100500 утилит для по сути одного и того же — получения FITS-файлов с CCD/CMOS), решил сделать эдакий универсал. Поддержка каждой камеры реализуется в виде модуля: динамической библиотеки, открываемой через dlopen. В каждой библиотеке экспортируется лишь 3 объекта: структуры Camera, Focuser и Wheel. А в них уже содержатся свойства и методы конкретной железки, реализованные в этой библиотеке.
Еще давно сделал для FLI (по сути это и содрано с fli_control), сейчас вожусь с поддержкой ZWO-ASI, понемногу приходится изменять содержимое структур, т.к. в CMOS кое-какие совсем иные вещи есть, и хочется их тоже поддерживать. Главное — после всех этих извращений с ZWO, проверить, все ли для FLI работает.

Вот, работая с ZWO, заметил, что я, дурья моя башка, забыл на TeA выделить место под блок питания камеры! С какого-то перепугу я решил, что она от USB будет питаться. Ага. Пельтьюха от USB! Как бы не так!!! В общем, придется опять колхоз разводить.
Да, у этой камеры (а скорей — ее библиотеки) есть очень паршивая особенность: каждый раз при инициализации камеры все значения сбрасываются в дефолт, т.е. температура тоже. А если хочешь установить температуру, нужно до экспозиции какое-то время выждать, пока не включится вентилятор (иначе после окончания экспозиции охладитель не заработает).

cfitsio

Feb. 21st, 2019 07:17 pm
eddy_em: (Default)
Решил проблему с симлинками. На всякий случай оставил "как самую последнюю соломинку" перезапись функцией cfitsio (когда к имени добавляется префикс — восклицательный знак). Вот только с симлинками это не работает, т.к. cfitsio не парится и просто делает unlink на файл и создает его снова. Т.е. удаляет симлинк и создает файл с этим именем.
Мне лень разбираться, как средствами cfitsio это обойти (как вариант, можно закрыть файл, "обнулить" его самостоятельно и дальше уже средствами cfitsio), поэтому оставлю как есть (маловероятно, что что-то пойдет не так и придется средствами cfitsio работать):
bool FITS_rewrite(FITS *fits){
    FNAME();
    char rlpath[PATH_MAX];
    if(realpath(fits->filename, rlpath)){do{ // got real path - try to make link
        char *d = strdup(rlpath);
        if(!d){ WARN("strdup()"); FREE(d); break; }
        char *dir = dirname(d);
        if(!dir){ WARN("dirname()"); FREE(d); break; }
        char newpath[PATH_MAX];
        char *nm = tmpnam(NULL);
        if(!nm){ WARN("tmpnam()"); FREE(d); break; }
        char *fnm = basename(nm);
        if(!fnm){ WARN("basename()"); FREE(d); break; }
        snprintf(newpath, PATH_MAX, "%s/%s", dir, fnm);
        FREE(d);
        DBG("make link: %s -> %s", rlpath, newpath);
        if(link(rlpath, newpath)){ WARN("link()"); break; }
        if(unlink(rlpath)){ WARN("unlink()"); break; }
        if(FITS_write(rlpath, fits)){
            unlink(newpath);
            return TRUE;
        }
        // problems: restore old file
        if(link(newpath, rlpath)) WARN("link()");
        if(unlink(newpath)) WARN("unlink()");
    }while(0);}else WARN(_("Can't get real path for %s, use cfitsio to rewrite"), fits->filename);
    // Can't get realpath or some other error, try to use cfitsio
    snprintf(rlpath, PATH_MAX, "!%s", fits->filename);
    DBG("PATH: %s", rlpath);
    return FITS_write(rlpath, fits);
}

Теперь еще надо подумать, как эту критическую секцию защитить от сигналов. Либо оставить это на совести программ, использующих данную библиотечную функцию (по-моему, это будет правильней).
eddy_em: (Костерок)
Итак, я продолжаю допиливать свой велосипед для работы с фитсами. Теперь добавлены еще кое-какие полезные штуки. Глядишь, до нового года хотя бы процентов 10 предполагаемого функционала запилю. А там еще немного — и будет автомат для технических ночей (а то и не только).
Дальше )
eddy_em: (Костерок)
Для обработки FITS-файлов обычно используются пакеты MIDAS или IRAF. Однако, они довольно тяжеловатые для сравнительно простых задач (которые возникают у меня при технических наблюдениях), а также тяжеловаты для написания своих собственных методик обработки изображений. Поэтому я решил написать простой конвейер, позволяющий удалять шумы с изображений, вычислять и вычитать фон, выделять объекты, строить изофоты и т.д., и т.п.
В результате получилась вот такая штука. Пока еще это — только пре-пре-пре-альфа версия, добавлять нужно еще очень много разных вещей. Но уже кое-что оно умеет (хотя и не исключены сегфолты на малейший чих, тестов пока маловато проведено).

Итак, для образца возьмем длиннощелевой спектр:
Original

и будем всячески его преобразовывать.
Далее )
eddy_em: (Default)
Решил я (в основном - для себя, чтобы не забыть) описать результаты тестирования светоприемника Apogee Alta U16M с матрицей Kodak KAF-16803 (судя по стоимости светоприемника — немногим более 10 килобаксов, матрицу эту подобрали на помойке). Начальство поручило нам с Тимуром проанализировать, насколько поганый этот светоприемник и можно ли его использовать для ненаучных задач (например, для оценки экстинкции). В конце марта-начале апреля мы провели нужные измерения, а потом долго их обрабатывали.
Подробности )
P.S. К сожалению, у ЖЖшки отвалилась функция добавления картинок в сам ЖЖ, так что пришлось все кидать на imageshack.
P.P.S. Сегодня (10 мая) я таки умудрился домучить libapogee2.2 (которую нашел где-то на просторах интернета), чтобы она считывала мне кадр с ПЗС. Однако, несмотря на то, что экспозиция протекает нормально, температура устанавливается какая надо, все пиксели полученных изображений содержат 65535.
Буду доламывать дальше: все-таки, эта камера нам нужна будет для работы и надо обязательно научиться полностью управлять ею.
eddy_em: (Default)
Сижу сейчас с больной головой (по поселку ходит ГРИПП, меня тоже зацепило) и пытаюсь написать что-нибудь для попиксельной обработки FITS-файлов (плоские поля), которые мы наполучали, начиная с вчерашнего обеда, с Apogee'вского светоприемника.
Обнаружил, что для чтения шапок FITS-файлов в Octave ничего нет. Нашел нечто похожее для матлаба и немного видоизменил.
Получилось вот что )

eddy_em: (Default)
В связи с тем, что я уже пятый день мучаю тех. задание на систему регистрации ИК-спектрофотометра, у меня возникли кое-какие соображения касательно фильтрации шумов на изображении.
Соображения )
eddy_em: (Default)
Выше я уже писал о работе с FITS-форматом в GNU Octave, однако, что это за формат такой и с чем его едят как работать с ним в своих приложениях на C не упомянул.


Исправляюсь )

eddy_em: (Default)
Итак, продолжая разбираться с Octave, я решил понемногу получить в ней функционал моего велосипеда, чтобы проще было проводить дальнейшую разработку (сначала читаю статьи, затем разрабатываю алгоритм, затем оттачиваю его на мат. модели и только после этого переношу все на С).

Сегодня я изучал возможность поиска связанных областей на изображениях и элементарного расчета центра тяжести этих областей (даже без коррекции на фон). Поехали! )

eddy_em: (Default)
Продолжая свое знакомство с Octave решил я попробовать выполнить элементарные операции с FITS-файлами. Как оказалось, в "умолчательном" Octave средств для работы с FITS'ами нет. Но гугл мне помог. Дальше все просто )

October 2025

S M T W T F S
   1234
567 89 1011
121314 15161718
19202122232425
2627 28293031 

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 24th, 2026 04:32 pm
Powered by Dreamwidth Studios