Как пиксель представлен в массиве данных внутри файла FITS?

У меня есть задание на чтение fits файлы и показать изображение (если есть) в одной системе. Эта система принимает данные изображения в виде массива пикселей, который может быть либо в виде одного фрагмента из 8 бит (для оттенков серого), либо в виде 3 фрагментов по 8 бит в каждом (для RGB). Я пытаюсь прочитать файл, созданный в тестах из CCfits библиотека, но для меня данные не имеют никакого смысла, как они отображаются во всех fits Зрители я проверил.

Вот код, который генерирует массив данных в файле примера, который я использую:

std::valarray<int> array(nelements);
for (int i = 0; i < numberOfRows; ++i)
{
    array[std::slice(vectorLength*static_cast<int>(i),vectorLength,1)] = row + i;     
}

Это заголовок:

SIMPLE  =                    T / file does conform to FITS standard             
BITPIX  =                   16 / number of bits per data pixel                  
NAXIS   =                    2 / number of data axes                            
NAXIS1  =                  300 / length of data axis 1                          
NAXIS2  =                  200 / length of data axis 2                          
EXTEND  =                    T / FITS dataset may contain extensions            
COMMENT   FITS (Flexible Image Transport System) format is defined in 'Astronomy
COMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H 
BZERO   =                32768 / offset data range to that of unsigned short    
BSCALE  =                    1 / default scaling factor                         
EXPOSURE=                 1500 / Total Exposure Time                            
OMEGA   =    (-0.5, 0.8660254) /  Complex cube root of 1                        
NEWVALUE=                   42 /  Test of adding keyword to different extension 
STRING  = ' Rope   '           / trailing blank test 1                          
STRING2 = 'Cord    '           / trailing blank test 2                          
END                      

И вот как изображение отображается в GIMP, например:

пример файла

Таким образом, по заголовку я могу понять, что каждый элемент массива будет иметь 16-битное целое число. BZERO с этим значением означает, что это должно быть целое число без знака из 16 битов. Пока проблем нет. Из генерации изображения я предположил, что каждый элемент массива будет представлять пиксель, а каждое значение будет представлять цвет в градациях серого. Код ниже, который находится внутри библиотеки ccfits, генерирует числа, которые идут от 0 до максимума 498, что действительно далеко от края 16-битного целого числа. При этом, как это идет от черного к белому? Как эти числа масштабируются или преобразуются для представления пикселя и цвета?

1 ответ

Решение

Подходит эксперт здесь, но я не совсем понимаю ваш вопрос. Прежде всего, код, который вы разместили здесь, не завершен - есть переменная row это не определено четко. Это не совсем ясно, намерение, но я думаю, что он заполняет массив 300x200 с некоторым градиентом. Массивы FITS - это просто массивы. N-мерные массивы некоторых значений некоторого типа данных.

То, как эти значения предназначены для интерпретации, полностью зависит от приложения, хотя есть зрители, специально разработанные для астрономических изображений, такие как почтенный ds9 или более современный клей.

Вы написали, что вы только что открыли файл в GIMP (на самом деле я весьма впечатлен, что он может читать файлы FITS). Похоже, что все, что делает GIMP, из-за отсутствия лучшего варианта - линейное масштабирование значений в массиве между черным (вероятно, начиная с 0) и белым.

Другие вопросы по тегам