Aller au contenu

Comment traiter des images, acquises avec PRISM, sous PixInsight


Messages recommandés

Posté

Bonjour à tous,

 

Je galère vraiment sur ce coup... J'ai acquis 300 poses avec PRISM l'autre jour. Ces fichiers sont au format .cpa. Format qui est apparemment totalement inconnu de la plus part des logiciels de traitement.

 

Je fais donc mon prétraitement avec PRISM ce qui est très efficace. Mais pour l'empilement j'aimerais vraiment pouvoir utiliser PI. Or lorsque je fais la conversion en .fits l'image est totalement illisible. La fonction STF de pi n'y changeant absolument rien.

 

Donc ma question, comment rendre ces fichiers lisible et utilisable par PixInsight ?

 

Merci d'avance :)

Posté

Je vais laisser tomber. Je traite avec Prism cette fois-ci et la prochaine fois je ferais pas la connerie d'enregistrer sous ce format ...

Posté

Salut "Alien",

 

Dans Prism, tu as une fonction pour convertir d'un coup tes N images au format .cpa vers le format .fits.

Et après quand tu as du fits, je ne vois pas le problème.

 

Perso, je fais ça pour du travail photométrique. Acquisition en cpa depuis Prism, prétraitement avec Prism, conversion en fits et travail sur Muniwin pour la photométrie. Cela fonctionne sans aucun problème.

 

Marc

  • 6 années plus tard...
Posté

Bonjour, je déterre ce sujet, mais c'est une problématique toujours d'actualité.

 

Malheureusement, il n'y a pas beaucoup d'explications trouvable facilement sur le web.

J'étudie les différents problèmes sérieusement et j'ai trouvé des solutions que je peux lister ici, ça pourrait intéresser les forums des utilisateurs PRISM, et PixInsight.
 

1. PRISM

 

1.1. Dans PRISM, changer le format d'acquisition de CPA (recommandé) vers FITS 16bits
TIFS est un format commun aux deux logiciels, personnellement je n'ai pas remarqué l’intérêt de rester en CPA sur PRISM.

 

1.2. Dans PRISM, changer le mot clé FILTERS en FILTER

FILTER est reconnu par le Weighted Batch Preprocessing Script  de PixInsight.

 

2. PixInsight

2.1 dans PixInsight, changer l'encodage des images FITS en entier 16bits de 0 à 65535 (au lieu flottant 32bits de  0 à 1)

 

3. Métadonnées TIFS

Malheureusement, les métadonnées (headers) TIFS générés par PRISM ne sont pas tous compatibles avec PixInsight, une conversion est nécessaire.
Personnellement, j'utilise un script python avec la librairie astropy.io pour faire la correction sur un lot d'images.

 

3.1 Renommer la métadonnée FILTERS en FILTER
Au cas où l'on a des images existantes (enregistrées avant le réglage de l'étape 1.2), le Weighted Batch Preprocessing Script de PixInsight cherche le filtre de l'image avec le mot clé "FILTER" or PRSIM l'enregistre avec le mot clé "FILTERS"  par défaut.

 

3.2 Corriger la valeur de  SITELAT et SITELONG

PixInsight génère une erreur de conversion sexagesimal car il attend une valeur sous la forme "+11:22:33.99" or PRISM génère la valeur sous la forme "+11:22:33:99" où 11 est exprimé en degrés, 22 en minutes d'arc, 33 virgule 99 en secondes d'arc

 

3.3 Éventuellement, Corriger la profondeur de bit du capteur.

Certains capteurs ZWO ASI enregistrent sur 12bits, or l'image transférée par le driver est codée sur 16bits, avec les 12bits décalés vers la gauche.
exemple, le capteur enregistre un pixel avec la valeur 0b111111111111 (4095 en décimal), l'image contiendra la valeur 0b1111111111110000 (66520 en décimal).
Je ne pense pas que ça ait un impact majeur dans le traitement. L'histogramme ressemble à un peigne au lieu d'une courbe continue car on passe de 0 à 4, de 4 à 8, etc , et les valeurs intermédiaires 1,2,3,5,6,7, etc n'existent pas.
En revanche sa rend l'analyse du gain unitaire 1e-/ADU moins facile à comprendre quand on cherche à le calculer.

PRISM a une option qui permet de faire cette conversion, perso j'ai choisi de la corriger par script.
Pour être consistant, il faut aussi corriger la  métadonnée BITCAMPX et mettre 12 à la place de 16.

3.4. Corriger le FILTER pour les dark et bias.
Les DARK et BIAS avec un FILTER différent génèreront une erreur dans le Weighted Batch Preprocessing Script.
Je supprime le FILTER (ou FILTERS) des métadonnées, de toutes manières le filtre n'a pas de sens pour les DARK et BIAS.
(Rq, les caméra ZWO ASI ayant de l'amp glow, il n'est pas recommandé de faire de BIAS)

 

Il y a peut être encore quelque chose à améliorer, soit dans PRISM soit via le script pour la détection automatique des BIAS, DARK, FLAT, LIGHT avec le métadonné IMGTYPE.

 

Si ça intéresse du monde, je pourrai partager le script et les exemples d'erreur typique que le script corrige, et mieux documenter les étapes précédentes pour aller dans les menus de PRISM et PixInsight.

  • Merci / Quelle qualité! 2
Posté

Avec ça, je peux prendre toutes mes images générées par PRSIM (dark, flat, light) et importer le dossier tout entier dans PixInsight WeightedBatchPreprocessing script.

 

 

from astropy.io import fits
import os, re, glob

filter_map = dict()
filter_map['Red'] = 'R'
filter_map['Green'] = 'G'
filter_map['Blue'] = 'B'
filter_map['Lum'] = 'L'

# Fix IMGTYPE to match the file name
def try_fix_imgtype(hdul, file_path):
    file_name = os.path.basename(file_path)
    sucess = False

    if 'IMGTYPE' in hdul[0].header and 'STD_IMAGE' in hdul[0].header["IMGTYPE"] and not 'master' in str.lower(hdul[0].header["IMGTYPE"]):
        if 'dark' in str.lower(file_name):
            old_value = hdul[0].header["IMGTYPE"]
            new_value = 'Dark'
            print('CHANGE {}, IMGTYPE:{}->{}'.format(file_name, old_value, new_value))
            hdul[0].header["IMGTYPE"] = new_value
            sucess = sucess or True

        elif 'bias' in str.lower(file_name):
            old_value = hdul[0].header["IMGTYPE"]
            new_value = 'Bias'
            print('CHANGE {}, IMGTYPE:{}->{}'.format(file_name, old_value, new_value))
            hdul[0].header["IMGTYPE"] = new_value
            sucess = sucess or True

        elif 'flat' in str.lower(file_name):
            old_value = hdul[0].header["IMGTYPE"]
            new_value = 'Flat'
            print('CHANGE {}, IMGTYPE:{}->{}'.format(file_name, old_value, new_value))
            hdul[0].header["IMGTYPE"] = new_value
            sucess = sucess or True

        else:
            old_value = hdul[0].header["IMGTYPE"]
            new_value = 'Light'
            print('CHANGE {}, IMGTYPE:{}->{}'.format(file_name, old_value, new_value))
            hdul[0].header["IMGTYPE"] = new_value
            sucess = sucess or True

    return sucess


def try_fix_filter(hdul, file_path):
    file_name = os.path.basename(file_path)
    sucess = False

    # Fix PRISM default FILTERS keyword. PixInsight expect it to be FILTER instead
    # It is better to change the default keyword in PRISM/FITS header configuration however
    if 'FILTER' not in hdul[0].header and 'FILTERS' in hdul[0].header:
        value = hdul[0].header['FILTERS']
        comment = hdul[0].header.comments['FILTERS']
        print('FIX {}, FILTERS->FILTER'.format(file_name))
        hdul[0].header.set('FILTER', value, comment, before='FILTERS')
        del hdul[0].header['FILTERS']
        sucess = sucess or True

    # Take it with care, this removes the FILTER for dark and bias frames.
    # PixInsight expect such frames to match the same filter, that could not be the case depending how you made them.
    if 'dark' in str.lower(file_name) or 'bias' in str.lower(file_name):
        if 'FILTER' in hdul[0].header and len(hdul[0].header["FILTER"]) > 0:
            old_value = hdul[0].header["FILTER"]
            new_value = ''
            print('CHANGE {}, FILTER:{}->{}'.format(file_name, old_value, new_value))
            hdul[0].header["FILTER"] = new_value
            sucess = sucess or True

    # Optional, rename the LRGB filter
    if 'FILTER' in hdul[0].header and len(hdul[0].header['FILTER']) > 0 and hdul[0].header['FILTER'] not in filter_map.values():
        old_value = hdul[0].header["FILTER"] 
        new_value = filter_map[old_value]
        print('FIX {}, FILTER:{}->{}'.format(file_name, old_value, new_value))
        hdul[0].header["FILTER"] = new_value
        sucess = sucess or True

    return sucess

# Fix PRISM default FOCAL keyword. PixInsight expect it to be FOCALLEN instead
# It is better to change the default keyword in PRISM/FITS header configuration however
def try_fix_focallen(hdul, file_path):
    if 'FOCALLEN' not in hdul[0].header and 'FOCAL' in hdul[0].header:
        value = hdul[0].header['FOCAL']
        comment = hdul[0].header.comments['FOCAL']
        print('FIX {}, FOCAL->FOCALLEN'.format(os.path.basename(file_path)))
        hdul[0].header.set('FOCALLEN', value, comment, before='FOCAL')
        del hdul[0].header['FOCAL']
        return True

    return False

# Fix the sexgesimal string recorded by PRISM for SATLONG and SATLAT
# PRIMS write +11:22:33:99, but PixInsight expects +11:22:33.99 instead, with 33.99 (33:99) in arc seconds 
def try_fix_sexagesimal(hdul, file_path, metadata):
    if metadata in hdul[0].header:
        m = re.match(r'((?:\+|\-)\d{1,3}:\d{2}:\d{2}):(\d{2})', hdul[0].header[metadata])
        if m:
            old_value = hdul[0].header[metadata]
            new_value = "{}.{}".format(m.group(1), m.group(2))
            print('FIX {}, {}:{}->{}'.format(os.path.basename(file_path), metadata, old_value, new_value))
            hdul[0].header[metadata] = new_value
            return True
    
    return False

# Fix bitdepth, when sensor records 12bits and the ADC shifts the bits left to 16 bits
# Can be fixed in PRISM/Camera configuration however
def try_fix_bitcampx(hdul, file_path):
    if hdul[0].header["BITCAMPX"] == 16:
        print('FIX {}, shift bits>>4 , BITCAMPX:16->12'.format(os.path.basename(file_path)))
        hdul[0].data>>4
        hdul[0].header["BITCAMPX"] = 12
        return True
    
    return False

# Save file without altering modified timestamp
def save_file(hdul, file_path):
    print('UPDATE {}'.format(os.path.basename(file_path)))
    mtime = os.path.getctime(file_path)
    hdul.flush()
    os.utime(file_path, (mtime, mtime))


if __name__ == '__main__':
    path = r"C:\astrophoto"
    for file_path in glob.glob(path + '/**/*.fits', recursive=True): 
        with fits.open(file_path, mode='update') as hdul:

            save = False
            
            if try_fix_filter(hdul, file_path):
                save = True

            if try_fix_sexagesimal(hdul, file_path, 'SITELAT'):
                save = True

            if try_fix_sexagesimal(hdul, file_path, 'SITELONG'):
                save = True

            if try_fix_bitcampx(hdul, file_path):
                save = True

            if try_fix_focallen(hdul, file_path):
                save = True

            if try_fix_imgtype(hdul, file_path):
                save = True

            if save:
                save_file(hdul, file_path)
            else:
                print('NO CHANGE {}'.format(os.path.basename(file_path)))

 

Et voilà un exemple de ce que le script affiche quand il modifie quelque chose,

 

FIX m101_Red-3.fits, FILTERS->FILTER
FIX m101_Red-3.fits, FILTER:Red->R
FIX m101_Red-3.fits, SITELAT:+49:17:19:99->+49:17:19.99
FIX m101_Red-3.fits, SITELONG:+06:03:42:00->+06:03:42.00
FIX m101_Red-3.fits, shift bits>>4 , BITCAMPX:16->12
FIX m101_Red-3.fits, FOCAL->FOCALLEN
CHANGE m101_Red-3.fits, IMGTYPE:STD_IMAGE->Light
UPDATE m101_Red-3.fits

 

Et tout est bien reconnu par PixInsight, (et pas d'erreur sexagesimal dans la console lors du processing)

 

  • Merci / Quelle qualité! 1

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.