Pull to refresh

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

Reading time3 min
Views2.1K
Продолжая свое знакомство с 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 намного лучше и удобнее.
Tags:
Hubs:
Total votes 8: ↑7 and ↓1+6
Comments5

Articles