Как пиксель представлен в массиве данных внутри файла 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) и белым.