eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2011-11-16 03:49 pm
Entry tags:

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 намного лучше и удобнее.


Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org