Телескопы покупают здесь


A A A A Автор Тема: Вопрос по формату FITS  (Прочитано 1517 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Burster_TILАвтор темы

  • Новичок
  • *
  • Сообщений: 7
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Burster_TIL
Вопрос по формату FITS
« : 07 Окт 2015 [08:59:38] »
Вопрос по FITS формату.
Есть массив изображений в данном формате. Написал утилиту чтения изображений. Тут проблем нет. Но в данном формате для определения реальных мировых координат из координат текущего пиксела в изображении есть ряд полей.
CRPIX1, CRPIX2 - это координаты опорной точки в пикселах
CRVAL1, CRVAL2 - это её мировые координаты
CD1_1, CD1_2, CD2_1, CD2_2 - это матрица поворота, чтобы преобразовать пиксельные координаты в мировые.
Нахожу разницу в пиксельных координатах относительно интересующей точки и опорной (DX, DY).
Потом получаю координаты
CD1_2*DX+CD2_2*DY  - это для DEC - вычисляется верно, проверял сторонней программой FV.
CD1_1*DX+СD2_1*DY  - это для RA - вычисляется неверно, проверял так же сторонней программой FV.;
RA всё время сдвинута куда-то.
Комбинировал с расположением коэффициентов CD в данной матрице. Получить аналогичное FV значение для RA не получается.
На сколько я понимаю, нужно матрицу 2х2 которая есть эти CDij умножить на матрицу 1х2 - которое есть разница в пиксельных координатах между текущей и опорной точкой.
Что может быть не так? Ведь если DEC вычисляется верно, то значит и RA должно верно вычисляться.
Так же вопрос, кто-то работал с cfitsio.dll и портировал ли хидерный файл в Delphi?

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #1 : 08 Окт 2015 [11:25:42] »
Во вложении код на Python для вычисления x-y из ra-dec.
оттуда понятно что делать (50-85 строка).

Оффлайн Burster_TILАвтор темы

  • Новичок
  • *
  • Сообщений: 7
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Burster_TIL
Re: Вопрос по формату FITS
« Ответ #2 : 09 Окт 2015 [00:18:00] »
Во вложении код на Python для вычисления x-y из ra-dec.
оттуда понятно что делать (50-85 строка).
Там, на сколько я понял (птона не знаю) это всё же получение XY из RA DEC. А мне нужно наоборот. Чтобы по экранным координатам (XY) получить RA DEC. Можеет прислать такой код?

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #3 : 09 Окт 2015 [07:40:43] »
да. именно так.
Код пришлю попозже. Мне уже самому интересно стало.

Оффлайн Burster_TILАвтор темы

  • Новичок
  • *
  • Сообщений: 7
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Burster_TIL
Re: Вопрос по формату FITS
« Ответ #4 : 09 Окт 2015 [09:30:56] »
да. именно так.
Код пришлю попозже. Мне уже самому интересно стало.
Да мне самому так же интересно. Связался недавно с одним астрофизиком. Он пользуется для своих расчётов библиотекой WCSLIB. Но, она сишная и тем более после установки MinGW компилятора мне собрать ни одной программы из неё не удалось. Всегда ругается на что-то. Он проверил вручную, так же были расхождения. Удивился  и начал мне говорить про нутации, пертрубации нуля координат. Сдвиг точки весеннего равноденствия. Но я потом умышленно все подозрительнеы поля в FITS файле занулил. Дату системную взял 2099 год и опять скормил файл программе FV. Результат - точно такой же. То есть у программы есть только матрица CDij, пиксельные и RA DEC координаты опорной точки.

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #5 : 09 Окт 2015 [16:20:17] »
питоновская штука для преобразования x-y в ra-dec

читает фитс, берет значения WCS (старую или новую - матричную запись).
читает список из х-у координат
преобразует х-у в ra-dec список.
пока отключил проверку в 102-й строке.


Оффлайн d_w

  • *****
  • Сообщений: 1 948
  • Благодарностей: 131
    • Сообщения от d_w
Re: Вопрос по формату FITS
« Ответ #6 : 09 Окт 2015 [18:00:00] »
А вот коэффициенты дисторсии, которые генерит пинпоинт (TRn_*) никто не знает как применять?

PA      = 1.78216285716E+002 / [deg, 0-360 CCW] Position angle of plate       
CTYPE1  = 'RA---TAN'           / X-axis coordinate type                         
CRVAL1  = 1.79512282748E+001 / X-axis coordinate value                       
CRPIX1  = 1.52800000000E+003 / X-axis reference pixel                         
CDELT1  = 7.08854921470E-004 / [deg/pixel] X-axis plate scale                 
CROTA1  = 1.78371428439E+000 / [deg] Roll angle wrt X-axis                   
CTYPE2  = 'DEC--TAN'           / Y-axis coordinate type                         
CRVAL2  = -9.89353074752E-001 / Y-axis coordinate value                       
CRPIX2  = 1.52800000000E+003 / Y-axis reference pixel                         
CDELT2  = 7.08843059574E-004 / [deg/pixel] Y-Axis Plate scale                 
CROTA2  = 1.78371428439E+000 / [deg] Roll angle wrt Y-axis                   
CD1_1    = 7.08511444516E-004 / Change in RA---TAN along X-Axis               
CD1_2    = -2.20639159941E-005 / Change in RA---TAN along Y-Axis               
CD2_1    = 2.20642852153E-005 / Change in DEC--TAN along X-Axis               
CD2_2    = 7.08499588368E-004 / Change in DEC--TAN along Y-Axis               
TR1_0    = 1.52799978059E+003 / [private] X-axis distortion coefficients       
TR1_1    = 3.05600584031E+003                                                 
TR1_2    = -6.77630257908E-001                                                 
TR1_3    = -8.54907005968E-001                                                 
TR1_4    = -3.89208279825E+000                                                 
TR1_5    = 8.84593372418E-001                                                 
TR1_6    = -8.23206569982E+000                                                 
TR1_7    = -2.29375062751E+000                                                 
TR1_8    = -5.66889963562E+000                                                 
TR1_9    = 2.70929605691E+000                                                 
TR1_10  = 1.24424488171E+000                                                 
TR1_11  = 8.09861100993E+000                                                 
TR1_12  = 8.73965248391E+000                                                 
TR1_13  = 1.04721960137E+001                                                 
TR1_14  = -8.19389811407E+000                                                 
TR2_0    = 1.52799999851E+003 / [private] Y-axis distortion coefficients       
TR2_1    = 4.01321116374E-004                                                 
TR2_2    = 3.05599408427E+003                                                 
TR2_3    = -2.54010777174E+000                                                 
TR2_4    = 9.24637972245E-001                                                 
TR2_5    = -1.30432277489E+000                                                 
TR2_6    = 1.37039514347E+000                                                 
TR2_7    = -1.80893342687E+000                                                 
TR2_8    = -1.87820357048E+000                                                 
TR2_9    = -2.35746215514E+000                                                 
TR2_10  = 1.35853408730E+001                                                 
TR2_11  = -9.65390524754E+000                                                 
TR2_12  = 2.76449239561E+000                                                 
TR2_13  = 4.91434511807E+000                                                 
TR2_14  = -2.14394784517E-002     

Оффлайн Burster_TILАвтор темы

  • Новичок
  • *
  • Сообщений: 7
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Burster_TIL
Re: Вопрос по формату FITS
« Ответ #7 : 09 Окт 2015 [20:44:47] »
А вот коэффициенты дисторсии, которые генерит пинпоинт (TRn_*) никто не знает как применять?

PA      = 1.78216285716E+002 / [deg, 0-360 CCW] Position angle of plate       
CTYPE1  = 'RA---TAN'           / X-axis coordinate type                         
CRVAL1  = 1.79512282748E+001 / X-axis coordinate value                       
CRPIX1  = 1.52800000000E+003 / X-axis reference pixel                         
CDELT1  = 7.08854921470E-004 / [deg/pixel] X-axis plate scale                 
CROTA1  = 1.78371428439E+000 / [deg] Roll angle wrt X-axis                   
CTYPE2  = 'DEC--TAN'           / Y-axis coordinate type                         
CRVAL2  = -9.89353074752E-001 / Y-axis coordinate value                       
CRPIX2  = 1.52800000000E+003 / Y-axis reference pixel                         
CDELT2  = 7.08843059574E-004 / [deg/pixel] Y-Axis Plate scale                 
CROTA2  = 1.78371428439E+000 / [deg] Roll angle wrt Y-axis                   
CD1_1    = 7.08511444516E-004 / Change in RA---TAN along X-Axis               
CD1_2    = -2.20639159941E-005 / Change in RA---TAN along Y-Axis               
CD2_1    = 2.20642852153E-005 / Change in DEC--TAN along X-Axis               
CD2_2    = 7.08499588368E-004 / Change in DEC--TAN along Y-Axis               
TR1_0    = 1.52799978059E+003 / [private] X-axis distortion coefficients       
TR1_1    = 3.05600584031E+003                                                 
TR1_2    = -6.77630257908E-001                                                 
TR1_3    = -8.54907005968E-001                                                 
TR1_4    = -3.89208279825E+000                                                 
TR1_5    = 8.84593372418E-001                                                 
TR1_6    = -8.23206569982E+000                                                 
TR1_7    = -2.29375062751E+000                                                 
TR1_8    = -5.66889963562E+000                                                 
TR1_9    = 2.70929605691E+000                                                 
TR1_10  = 1.24424488171E+000                                                 
TR1_11  = 8.09861100993E+000                                                 
TR1_12  = 8.73965248391E+000                                                 
TR1_13  = 1.04721960137E+001                                                 
TR1_14  = -8.19389811407E+000                                                 
TR2_0    = 1.52799999851E+003 / [private] Y-axis distortion coefficients       
TR2_1    = 4.01321116374E-004                                                 
TR2_2    = 3.05599408427E+003                                                 
TR2_3    = -2.54010777174E+000                                                 
TR2_4    = 9.24637972245E-001                                                 
TR2_5    = -1.30432277489E+000                                                 
TR2_6    = 1.37039514347E+000                                                 
TR2_7    = -1.80893342687E+000                                                 
TR2_8    = -1.87820357048E+000                                                 
TR2_9    = -2.35746215514E+000                                                 
TR2_10  = 1.35853408730E+001                                                 
TR2_11  = -9.65390524754E+000                                                 
TR2_12  = 2.76449239561E+000                                                 
TR2_13  = 4.91434511807E+000                                                 
TR2_14  = -2.14394784517E-002     
Что-то много коэффициентов. Обычно дисторсия центрально симметричная и описывается квадратичным уравнением в нечётных степенях. В обычной жизни хватает 3-х 4-х членов коррекции дисторсии.

Оффлайн Burster_TILАвтор темы

  • Новичок
  • *
  • Сообщений: 7
  • Благодарностей: 0
  • Мне нравится этот форум!
    • Сообщения от Burster_TIL
Re: Вопрос по формату FITS
« Ответ #8 : 09 Окт 2015 [20:45:56] »
С RA DEC разобрались. Вадим помог.

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #9 : 09 Окт 2015 [21:06:39] »
А вот коэффициенты дисторсии, которые генерит пинпоинт (TRn_*) никто не знает как применять?

надо гуглить  SIP polynomial coefficients
кажется TRx_x это не совсем формат wcs.
возможно поможет вот это
https://code.google.com/p/wcs2kml/
и pywcs

насколько важны эти коэффициенты? для фотометрии достаточно определить положение объекта с точностью ~5 пикселей, потом править. для астрометрии понятно, что нужно учитывать первые 2-4 коэффициента.

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #10 : 09 Окт 2015 [21:15:09] »
вот, нашел
http://forums.dc3.com/showthread.php?8716-PinPoint-distortion-coefficients
" The publically available documents I refer to, talking about WCS coordinates or FITS header elements, do not describe any of the "TR" coefficients Bob Denny developed for PinPoint. "
короче, это внутренние дела pin-point. но скорее всего их можно соотнести со стандартными полями хедера.

Оффлайн whitesail

  • ****
  • Сообщений: 293
  • Благодарностей: 8
  • не цапать и не дышать
    • Skype - fenderhss
    • Сообщения от whitesail
Re: Вопрос по формату FITS
« Ответ #11 : 30 Дек 2015 [18:39:22] »
У меня камера грабит кадры через матлаб, в котором есть функция сохранения данных в формате fits.

Можно ли в одном файле fits сохранить более одного кадра, чтобы autostakkert и registax потом такой файл смогли зачитать?
Спасибо.
« Последнее редактирование: 30 Дек 2015 [19:20:07] от whitesail »

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #12 : 02 Янв 2016 [22:05:22] »
сохранить можно. получится фитс-куб.
но прочитать его стандартными средствами ЛА будет вряд ли возможно.

Оффлайн mo

  • *****
  • Сообщений: 17 500
  • Благодарностей: 1073
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
Re: Вопрос по формату FITS
« Ответ #13 : 15 Янв 2018 [21:46:33] »
Мне нужно из файла с WCS найти координаты центра. Достаточно ли мне проверить, что опорный пиксель ~средний:

CRPIX1  =   5.01000000000E+002 / X-axis reference pixel
CRPIX2  =   3.34000000000E+002 / Y-axis reference pixel

, и взять координаты из одноимённых заголовков

RA      = '20 29 16.00'        / [hms J2000] Target right ascension
DEC     = '+37 08 10.0'        / [dms +N J2000] Target declination

Или вовсе достаточно взять координаты, не вникая в остальные заголовки?


Стоит задача по данному фиту получить координаты центра. У меня под рукой только привязка средствами PinPoint LE. С пол часа читал про WCS, скачал оба питон-скрипта, понял как применить второй (XY_to_RaDec) к поиску ra/dec центра. Но нужно ли это? Привязывает ли кто-то край (не центр) изображения или это совсем частный случай, на который в любительском сегменте можно забить?
Функционал нужен для формы добавления координат цели в программе автоматизатора (кнопка "выбрать опорное изображение"). Думаю считать координаты, если они есть и использовать их. Если их нет, провести файл через astrometry.net, получить координаты центра.
モ - mo

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #14 : 16 Янв 2018 [06:49:17] »
если CRPIX1 == NAXIS1/2 и CRPIX2 == NAXIS2/2, то достаточно взять CRVAL1 и CRVAL2.
В других случаях нужно считать.

Если их нет, провести файл через astrometry.net, получить координаты центра.
тогда нужно поставить соответствующий тэг, чтобы astrometry использовала центральный пиксель в качестве референсного.

Оффлайн mo

  • *****
  • Сообщений: 17 500
  • Благодарностей: 1073
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
Re: Вопрос по формату FITS
« Ответ #15 : 16 Янв 2018 [14:15:49] »
если CRPIX1 == NAXIS1/2 и CRPIX2 == NAXIS2/2, то достаточно взять CRVAL1 и CRVAL2.
В других случаях нужно считать.
Понял, буду считать.
Спасибо за питон-скрипт.

Если их нет, провести файл через astrometry.net, получить координаты центра.
тогда нужно поставить соответствующий тэг, чтобы astrometry использовала центральный пиксель в качестве референсного.
Проверил ресолвы astrometry.net, "почти центр" прописан в качестве опорного:

NAXIS1  =                  834
NAXIS2  =                  624
...
CRPIX1  =        445.763263285 / X reference pixel
CRPIX2  =        321.572100188 / Y reference pixel

То есть считать полюбому придётся.
Интересно, а вывод в stdout от astrometry.net считает координаты центра, как они пишут или этого "почти центра"? Надо проверить.

1: 04:42:11: Run - astrometry: Reading file "/tmp/godzilla.axy"...
1: 04:42:11: Run - astrometry: Only searching for solutions within 1 degrees of RA,Dec (318.262,47.7506)
1: 04:42:11: Run - astrometry: Field 1 did not solve (index index-4210.fits, field objects 21-30).
1: 04:42:11: Run - astrometry: Field 1 did not solve (index index-4209.fits, field objects 21-30).
1: 04:42:12: Run - astrometry: Field 1 did not solve (index index-4208.fits, field objects 21-30).
1: 04:42:12: Run - astrometry: Field 1 did not solve (index index-4207-03.fits, field objects 21-30).
1: 04:42:12: Run - astrometry:   log-odds ratio 233.865 (3.68205e+101), 60 match, 0 conflict, 34 distractors, 92 index.
1: 04:42:12: Run - astrometry:   RA,Dec = (318.275,47.7657), pixel scale 3.91511 arcsec/pix.

Я эту последнюю строку регуляркой разбираю, получаю координаты.

Раньше разбирал другую строку:
1: 16:52:24: Run - astrometry:   RA,Dec = (318.275,47.7657), pixel scale 3.91511 arcsec/pix.
1: 16:52:24: Run - astrometry:   Hit/miss: +++-++++++++--++-+-++++++++--++-++++--+++++-+-+++-++-+-++---+--+-+--+---+-+-+-++-++-+-++-+-+++(best)--++++
1: 16:52:25: Run - astrometry: Field 1: solved with index index-4206-03.fits.
1: 16:52:25: Run - astrometry: Field 1 solved: writing to file /tmp/godzilla.solved to indicate this.
1: 16:52:25: Run - astrometry: Field: /tmp/godzilla.fit
1: 16:52:25: Run - astrometry: Field center: (RA,Dec) = (318.3, 47.76) deg.

Но сегодня в ночи подумал, что это просто округление цифры выше. Теперь не уверен.
モ - mo

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #16 : 16 Янв 2018 [14:26:59] »
Интересно, а вывод в stdout от astrometry.net считает координаты центра, как они пишут или этого "почти центра"? Надо проверить.

надо при запуске astrometry добавить ключ
 --crpix-center: set the WCS reference point to the image center

или вовсе указать референсный пиксель
  --crpix-x <pix>: set the WCS reference point to the given position
  --crpix-y <pix>: set the WCS reference point to the given position


Оффлайн mo

  • *****
  • Сообщений: 17 500
  • Благодарностей: 1073
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
Re: Вопрос по формату FITS
« Ответ #17 : 16 Янв 2018 [16:11:10] »
Интересно. А без --crpix-center он опорную точку выбирает центр дисторсии?
Дописал в своём проекте этот ключ везде. Спасибо за помощь!
モ - mo

Оффлайн krussh

  • *****
  • Сообщений: 2 460
  • Благодарностей: 112
  • http://www.soulfulbits.com/
    • Сообщения от krussh
Re: Вопрос по формату FITS
« Ответ #18 : 16 Янв 2018 [18:34:09] »
А без --crpix-center он опорную точку выбирает центр дисторсии?
а бог его знает, точнее метод наименьших квадратов.
тут надо и дисторсию учесть и дифференциальную рефракцию и наклон приемника.