FITS (Flexible Image Transport System) формат в Octave
Установив нужный пакет я запустил 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 намного лучше и удобнее.