Coder Social home page Coder Social logo

fredericdrnl / empilement-image-astronomique Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 30.07 MB

Projet sur l'astrophotographie réalisé lors du 3ème Semestre de BUT

Python 100.00%
astronomical-algorithms astronomy astropy image interface matplotlib-pyplot python francais sckit-image french

empilement-image-astronomique's Introduction

Empilement d’images astronomiques 🪐

Auteurs : ELUECQUE Anthony & DOURNEL Frédéric

Sommaire 📃

  • 1 But du projet
  • 2 Prérequis
    • 2.1 Language de programmation
      • 2.1.1 Quel language ?
      • 2.1.2 Avantages
      • 2.1.3 Inconvénients
    • 2.2 Librairies
      • 2.2.1 Astropy
      • 2.2.2 PyQt
      • 2.2.3 Matplotlib
      • 2.2.4 Numpy
      • 2.2.5 Scikit-image
      • 2.2.6 Pyinstaller
        • 2.2.6.1 Bibliothèque
        • 2.2.6.2 Compilation de notre programme
  • 3 Fonctionnalités
    • 3.1 Fonctionnalités attendues :
      • 3.1.1 Stacking par moyenne
      • 3.1.2 Stacking par médiane
      • 3.1.3 Détection des outliers
    • 3.2 Fonctionnalités supplémentaires
      • 3.2.1 Détection des étoiles
      • 3.2.2 Modification de l'intensité
      • 3.2.3 Détection des maximas locaux
    • 3.3 Graphique
  • 4 Comment l'utiliser ?
    • 4.1 Lancer le programme
      • 4.1.1 Avec le code
      • 4.1.2 Avec l'exécutable
    • 4.2 Utilisation de l'interface
      • 4.2.1 Ouvrir une image
      • 4.2.2 Empilement de plusieurs images
      • 4.2.3 Filtre sur une image
        • 4.2.3.1 Detection des outliers
        • 4.2.3.2 Modification de l'intensité
      • 4.2.4 Enregistrer l'image

1 but du projet 📌

Le projet a pour but de réaliser une application permettant l'empilement d'images d'une même scène à partir de plusieurs prises de vue afin d'obtenir un rendu de meilleure qualité. Ce procédé est surtout utilisé en astrophotographie pour permettre d'obtenir l'optimisation d'une image prise à l'aide d'un téléscope spatiale (Hubble, ...) sur des objets célestes se trouvant à des années lumières.

2 Les prérequis 🛠️

2.1 Language de programmation

2.1.1 Quel language

Pour ce projet, nous avons utilisé Python.

Python : https://www.python.org/

2.1.2 Avantages

Python

  • Dispose de nombreuses librairies pour le traitement d'image.
  • Facilite le développement de l'application par sa maniabilité.
  • Langage accessible pour de nombreux utilisateurs même neophytes.

2.1.3 Inconvénients

  • Le programme est lent pour le traitement d'image.
  • Coût de ressources important (environ 70x supérieur aux autres languages)

2.2 Librairies

2.2.1 Astropy

Astropy est au coeur de notre projet, cette librairie permet d'ouvrir et d'utiliser les images avec l'extension ".fits".

pip install astropy

Astrpy : https://www.astropy.org/

2.2.2 PyQt

PyQt est une librarie qui permet de lier le langage Python avec la bibliothèque Qt. Celle-ci permet de créer des interfaces en proposant différents outils.

pip install pyQt5

PyQt : https://doc.qt.io/qtforpython/

2.2.3 Matplotlib

Nous avons utilisé Matplotlib pour afficher les images sur l'interface PyQt et créer les graphiques en lien avec l'image. Nous utilisons plus particulièrement Matplotlib.Pyplot.

pip install matplotlib

Matplotlib : https://matplotlib.org/

2.2.4 Numpy

La bibliotèque Numpy nous a permis de travailler avec les données d'une image fits.

pip install numpy

Numpy : https://numpy.org/

2.2.5 Scikit-image

Scikit-image nous a permis de réaliser les filtres sur les images.

pip install scikit-image

Scikit-image : https://scikit-image.org//

2.2.6 Pyinstaller

2.2.6.1 Bibliothèque

Grâce à Pyinstaller, nous avons pu créer un executable (.exe) (crée sous Windows).

pip install pyinstaller
2.2.6.2 Compilation de notre programme

Dans un terminal et en pointant le fichier, nous avons exécuté la commande suivante

pyinstaller --onefile mainWindow.py

Nous avons ainsi pu créer un fichier exécutable sous windows , utilisable sur un autre ordinateur (nous avons fait le test)

Pyinstaller : https://pyinstaller.org/

3 Fonctionnalités ➕

3.1 Fonctionnalités attendues

3.1.1 Stacking par moyenne

Cette méthode de stacking permet d'améliorer considérablement la netteté de l'image. On prend les pixels d'une même coordonnée de chaque image pour en établir la moyenne et attribuer le résultat à une nouvelle image comme nouvelle couleur de cette coordonnée.

3.1.2 Stacking par médiane

Le stacking par médiane est une autre méthode d'empilement d'images. Nous avons constaté que celui-ci est plus pertinent que celui par moyenne. Le rendu de l'image sera encore plus net (réduction majeur du bruit de l'image)

On fait une liste des pixels des N images sur le même point et on calcule la médiane de cette liste. On attribut cette médiane à une nouvelle image comme couleur de ce pixel.

3.1.3 Détection des outliers

Nous avons jugé qu'il était intéressant de mettre cette détection sur un stacking, après test nous nous sommes rendus compte qu'il est très pertinent de faire cette détection sur les deux stackings et de comparer les résultats obtenus

Cette détection se base sur les valeurs au dessus ou en dessus puis sont rejetées et remplacées par un carré blanc sur le rendu finale. data < center - (sigma_lower * std) data > center + (sigma_upper * std)

3.2 Fonctionnalités supplémentaires

Fonctionnalités qui n'étaient pas attendues mais que nous avons jugé pertinent d'ajouter.

3.2.1 Detection des étoiles

La détection des corps célestes est possible dans notre application, en effet celle-ci est effectuée sur un laplace de gaussien (LoG) . Le gaussien permet le lissage de l'image (réduction du bruit) et le laplacien est calculé sur une image noir et blanc (détection des "blobs"). L'intérêt d'utiliser un gaussien permet de compenser la sensibilité au bruit de l'image que génère le calcul laplacien tout en augmentant la précision du résultat.

Si l'image est uniforme, alors le résultat de ce filtre sera uniforme aussi et penchera vers le noir (0).

Le résultat peut prendre un certain temps à être calculé, comptez environ 2min pour une image monochromée

3.2.2 Modification de l'intensité

L'intensité ici est modifiée par un input de l'utilisateur, de base celle-ci s'adapte à la range de l'image. L'intérêt est de mettre en surbrillance ou de cacher certaines zones de l'image. Ces valeurs peuvent montées jusqu'à "presque" l'infini (si on peut le quantifier)

3.2.3 Detection des maximas locaux

Un extremum est une valeur maximale ou minimale. Sur une image un maxima est un pixel si ce pixel est supérieur ou égal à tous ses voisins immédiats. L'intérêt est de déterminer où se trouvent les corps célestes et les éléments qui sont en commun. Cela permet d'ajouter un complément à la détection d'étoiles, voir à l'intensité puisque l'on peut détecter les "éléments".

3.3 Graphique

Le Graphique est utilisé pour connaître le color Scaling de l'image, cela permet de connaître : - Si les couleurs de l'image sont sur 8 bits, 16 bits , ... - Les couleurs utilisées : on peut effecter un traitement sur l'image pour isoler les plages de couleurs qui nous intéressent (vmin & vmax dans l'application)

4 Comment l'utiliser ❔

4.1 Lancer le programme

4.1.1 Avec le code

Pour utiliser le programme à partir du code, il faut run (démarrer) le fichier mainWindow.py grâce à un éditeur de code comme VS code.

VS code : https://code.visualstudio.com

4.1.2 Avec l'exécutable

Double cliquer sur le fichier mainWindow.exe et l'interface s'ouvrira.

4.2 Utilisation de l'interface

4.2.1 Ouvrir une image

Une fois l'interface ouverte,il suffit de cliquer sur le bouton "ouvrir un fichier" et de choisir votre fichier au format ".fits". Il est aussi possible d'ouvrir plusieurs fichiers à la fois, pour cela cliquer sur "Ouvrir un dossier". Selectionner ce dossier puis faites OK , attention ce dossier ne doit contenir que des fichiers FITS de la même image

4.2.2 Empilement de plusieurs images

Pour faire de l'empilement sur plusieurs images, il suffit de cliquer sur le menu déroulant "Méthode Stacking" . Choisir ensuite votre méthode de stacking entre le stacking moyenne ou le stacking médiane.

Attention : le Stacking par médiane ne fonctionne que pour les images monochromées, sur les images RGB cela fait planter l'application (contrairement au stacking par moyenne qui fonctionne pour les 2 types d'images).

4.2.3 Filtrer une image

Pour choisir un filtre sur une image empilée, cliquer sur le nouveau menu déroulant "Choisir un filtre" et choisir le filtre souhaité.

4.2.3.1 Detection des outliers

Après avoir choisi le filtre pour détecter les outliers sur une image. Il est possible de régler le paramètre "sigma". Pour cela, changer la valeur dans la zone de texte apparue et ensuite appuyer sur le bouton "Détecter les valeurs aberrantes". Information : Par défaut, le sigma est présenté à 2.85 (valeur la plus proche du résultat souhaité après test).

4.2.3.2 Modification de l'intensité

Suite à la selection du filtre "Modifier l'intensité", il est possible de choisir l'intensité minimale et maximale. Il suffit de renseigner les valeurs dans les deux zones de textes qui sont apparues et de cliquer sur le bouton "Afficher". Attention : L'intensité maximale > intensité minimale.

4.2.4 Enregistrer l'image

Pour enregister votre image en format ".png",cliquer sur le bouton "Enregistrer en PNG" et choisir l'emplaceent du futur fichier/dossier. Cette enregistrement est indépendant des calculs, l'image calcul.png ne sert qu'à l'affichage de l'interface et permet l'exécution de certaines fonctionnalitées supplémentaires.

empilement-image-astronomique's People

Contributors

anthony-eluecque avatar fredericdrnl avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.