FITS (Flexible Image Transport System) формат в Octave

Продолжая свое знакомство с Octave решил я попробовать выполнить элементарные операции с FITS-файлами. Как оказалось, в «умолчательном» Octave средств для работы с FITS'ами нет. Но гугл мне помог.Итак, гугл вывел меня на страничку Octave на sourceforge. Я скачал нужный мне пакет FITS, распаковал его и попробовал скомпилировать. Но не тут-то было! При запуске ./configure ничего не произошло. Заглянув в директорию src я не увидел ничего интересного, только элементарный Makefile. Содержимое его подсказало мне, что нужно установить еще и компилятор пакетов Octave — mkoctfile. В мандриве он находится в пакете octave-devel.Установив нужный пакет я запустил make и получил три файла:
read_fits_image.oct  save_fits_image.oct  save_fits_image_multi_ext.oct
Куда их поместить, я понятия не имел, но
locate \.oct
вывел меня на директорию
/usr/lib/octave/3.4.2/oct/i586-mandriva-linux-gnu/
куда (от имени рута, естественно) файлы были скопированы.Запустив Octave я первым делом проверил, работают ли эти команды. Работают. Чтобы считать файл filename.fits в переменную var необходимо сделать:
var = read_fits_image("filename.fits");
Главное — не забыть точку с запятой в конце команды, дабы не получить потоки цифр!Про точку с запятой я «вспомнил», как раз когда забыл ее поставить. Меня приятно удивило то, что, в отличие от матлаба, заваливающего пользователя бесконечным потоком данных, Octave разбивает вывод по страницам (судя по всему, для вывода на экран используется less).Чтобы считать еще и шапку файла, выполним:
[var, head] = read_fits_image("filename.fits");
Команда whos показывает, что head — это строковый массив с длиной строк 80 символов (вспоминаем ограничения формата FITS), в который просто построчно переписана вся шапка файла без разбиения на имя/значение/комментарий (т.е. если в Octave планируется работать с шапкой, все это придется сделать самому, либо дописать нужные функции в пакет FITS, благо средства для этого есть).Отобразить файл на экране я пытался при помощи imshow. О нет! Я увидел… ровным счетом ничего. Зато imagesc показал мне картинку и даже менял цветовую карту на команды colormap.Если вывести картинку в логарифмическом масштабе:
imagesc(log(var));
Отображение будет более приятным.Вспоминая свою fitsview, я с сожалением отметил, что использование gnuplot в качестве «чертилки» сильно действует на нервы: приходится довольно долго ждать, пока Octave передаст гнуплоту необходимые данные, а затем — пока гнуплот их отобразит на экране.Ну и напоследок простенькая программка для суммирования файлов в директории, имеющих вид object_XXXX.fit (где XXXX — номер), начиная с номера first и заканчивая номером last:
function ret = sum_fits(first, last)
ret = [1 2 3];
frst = 1;
    i = 0;
    for num = [ first : last ]
        i++;
        name = sprintf("object_%04d.fit", num); % получаем имя файла
        II = read_fits_image(name);  % считываем его
        med = median(median(II)); % вычисляем медиану медиан по столбцам
        printf("%d:\tread file %s, median = %d\n", i, name, med); 
        fflush(1); % это нам не матлаб! 
        II -= med; % вычитаем "медиану" (bias'ы рассчитывать лень)
        if(frst == 1)  % суммируем
            frst = 0;
            ret = II;
        else
            ret += II;
        end
    end
end
И пример для изображений, полученных для определения координат центра вращения поля:
II = sum_fits(1,147);
a = II;
a(find(a < 1)) = 1;
imagesc(log(a))
Получаем такую картинку:
Да, чуть не забыл: у Octave есть еще и матлабоподобные интерфейсы, например, QtOctave:В общем оформление интерфейса довольно приличное, однако, сильно напрягает то, что командная строка вынесена отдельно и в нее нужно тыкнуть мышкой, чтобы начать что-то писать.Так что, CLI у Octave намного лучше и удобнее.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 5

    +1
    Не, конечно хорошо, рассказывать про астрономический формат про который знает 2% народу без пояснений «Что, где, откуда»… Да и Octave мало кто знает…
    Да и вообще, fits полностью документирован, исходники к нему есть на любом нормальном языке. Переписать — два дня.
      0
      Для работы с FITS есть готовая библиотека cfitsio. Просто в стандартный набор пакетов Octave функции-посредники для работы с cfitsio включены не были.

      Сам Octave по функционалу очень сильно похож на матлаб, так что — если знаешь матлаб, значит, почти знаешь Octave.

      Про FITS формат могу написать небольшую статейку, если, конечно, кому-то будет интересно. Поверхностное описание есть в wiki.
        0
        Ну, я бы про фитс с удовольствием почитал, я его знаю достаточно поверхностно. Да и тем более тогда статься смысл обретет. А то, могу поспорить, 98% прочитавших её хаброюзеров задались вопросом «wtf is this?!»
          0
          Интересующиеся могут для «затравки» прочитать в википедии (http://ru.wikipedia.org/wiki/FITS).
          А я постараюсь написать еще статейку-обзор по работе с этим форматом (как в С, так и в Octave).

Only users with full accounts can post comments. Log in, please.