ПОДХОДИТ для создания сжатых данных изображения

Я пытаюсь записать данные в формате FITS, используя сжатие. Вот что я пробовал:

#include <vector>
#include "fitsio.h"
#define DIM 100
int main(int argc, char *argv[]) {
    fitsfile *fptr;       /* pointer to the FITS file, defined in fitsio.h */
    std::vector<double> data(DIM*DIM);
    for (unsigned int i=0; i<data.size();i++) data[i]=i;
    int s=0, status;
    fits_create_file(&fptr, "!test3.fits", &s); status+=s;
    fits_set_compression_type(fptr, GZIP_2, &s); status+=s;
    std::vector<long> naxes(2); naxes[0]=DIM; naxes[1]=DIM;
    fits_create_img(fptr,  DOUBLE_IMG, naxes.size(), &naxes[0], &s); status+=s;
    fits_write_img(fptr, TDOUBLE, 1, data.size(), &data[0], &s); status+=s;
    fits_close_file(fptr, &status); status+=s;
    return status;
}

Это работает, поскольку статус возврата равен нулю. Но я не могу открыть файл ничем. Более того, file test3.fits возвращается

test3.fits: FITS image data, 16-bit, two's complement binary integer

В то время как если я удалю строку fits_set_compression_type ... я получаю

test3.fits: FITS image data, 64-bit, floating point, double precision

это правильно (и я могу открыть изображение)

Что я делаю неправильно здесь?


person bibi    schedule 05.04.2014    source источник


Ответы (2)


Существуют более старые библиотеки FITS, которые не могут работать со стандартом сжатия тайлов FITS. Программное обеспечение, основанное на последних cfitsio (и CCfits) и nom.tam.fits, обычно соответствует этому соглашению.

person R. J. Mathar    schedule 07.05.2015

Похоже, я создаю допустимый файл соответствия, но он просто imageJ не читает его должным образом. Скачал ds9, на нем все работает.

person bibi    schedule 06.04.2014