{"id":20994505,"url":"https://github.com/fredericdrnl/empilement-image-astronomique","last_synced_at":"2026-05-22T05:33:54.058Z","repository":{"id":148779115,"uuid":"574144113","full_name":"Fredericdrnl/Empilement-image-astronomique","owner":"Fredericdrnl","description":"Projet sur l'astrophotographie réalisé lors du 3ème Semestre de BUT","archived":false,"fork":false,"pushed_at":"2023-02-14T12:18:56.000Z","size":30789,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-20T08:49:48.818Z","etag":null,"topics":["astronomical-algorithms","astronomy","astropy","francais","french","image","interface","matplotlib-pyplot","python","sckit-image"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fredericdrnl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-04T15:07:20.000Z","updated_at":"2023-02-27T14:16:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"f511ef3c-f2f8-4fb3-b9c3-26526dfb3b27","html_url":"https://github.com/Fredericdrnl/Empilement-image-astronomique","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fredericdrnl%2FEmpilement-image-astronomique","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fredericdrnl%2FEmpilement-image-astronomique/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fredericdrnl%2FEmpilement-image-astronomique/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fredericdrnl%2FEmpilement-image-astronomique/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fredericdrnl","download_url":"https://codeload.github.com/Fredericdrnl/Empilement-image-astronomique/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243410230,"owners_count":20286387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astronomical-algorithms","astronomy","astropy","francais","french","image","interface","matplotlib-pyplot","python","sckit-image"],"created_at":"2024-11-19T07:18:38.196Z","updated_at":"2025-12-29T05:43:31.341Z","avatar_url":"https://github.com/Fredericdrnl.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **Empilement d’images astronomiques 🪐**\n\n\u003e Auteurs : ELUECQUE Anthony \u0026 DOURNEL Frédéric\n\n# **Sommaire 📃**\n\n- 1 But du projet\n- 2 Prérequis\n    - 2.1 Language de programmation\n        - 2.1.1 Quel language ?\n        - 2.1.2 Avantages\n        - 2.1.3 Inconvénients\n    - 2.2 Librairies\n        - 2.2.1 Astropy\n        - 2.2.2 PyQt\n        - 2.2.3 Matplotlib\n        - 2.2.4 Numpy\n        - 2.2.5 Scikit-image\n        - 2.2.6 Pyinstaller\n            - 2.2.6.1 Bibliothèque\n            - 2.2.6.2 Compilation de notre programme\n- 3 Fonctionnalités\n    - 3.1 Fonctionnalités attendues :\n        - 3.1.1 Stacking par moyenne\n        - 3.1.2 Stacking par médiane\n        - 3.1.3 Détection des outliers\n    - 3.2 Fonctionnalités supplémentaires\n        - 3.2.1 Détection des étoiles\n        - 3.2.2 Modification de l'intensité\n        - 3.2.3 Détection des maximas locaux\n    - 3.3 Graphique\n- 4 Comment l'utiliser ?\n    - 4.1 Lancer le programme\n        - 4.1.1 Avec le code\n        - 4.1.2 Avec l'exécutable\n    - 4.2 Utilisation de l'interface\n        - 4.2.1 Ouvrir une image\n        - 4.2.2 Empilement de plusieurs images\n        - 4.2.3 Filtre sur une image\n            - 4.2.3.1 Detection des outliers\n            - 4.2.3.2 Modification de l'intensité\n        - 4.2.4 Enregistrer l'image\n\n\n\n\n## **1 but du projet 📌**\n\nLe projet a pour but de réaliser une application permettant l'empilement d'images d'une même scène à partir de plusieurs prises\nde vue afin d'obtenir un rendu de meilleure qualité. Ce procédé est surtout utilisé \nen 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.\n\n## **2 Les prérequis 🛠️**\n\n### 2.1 Language de programmation\n \n\u003e #### 2.1.1 Quel language \n\nPour ce projet, nous avons utilisé **_Python_**. \n\n\u003csub\u003ePython : https://www.python.org/\u003c/sub\u003e\n\n\u003e #### 2.1.2 Avantages \n\n**_Python_** \n - Dispose de nombreuses librairies pour le traitement d'image.\n - Facilite le développement de l'application par sa maniabilité.\n - Langage accessible pour de nombreux utilisateurs même neophytes.\n \n\u003e #### 2.1.3 Inconvénients \n - Le programme est lent pour le traitement d'image.\n - Coût de ressources important (environ 70x supérieur aux autres languages)\n\n### 2.2 Librairies \n\n\u003e #### 2.2.1 Astropy \n\n**_Astropy_** est au coeur de notre projet, cette librairie permet d'ouvrir et d'utiliser les images avec l'extension \"_.fits_\".\n\n```\npip install astropy\n```\n\n\u003csub\u003eAstrpy : https://www.astropy.org/\u003c/sub\u003e\n\n\u003e #### 2.2.2 PyQt \n\n**_PyQt_** est une librarie qui permet de lier le langage Python avec la bibliothèque Qt.\nCelle-ci permet de créer des interfaces en proposant différents outils.\n\n```\npip install pyQt5\n```\n\n\u003csub\u003ePyQt : https://doc.qt.io/qtforpython/ \u003c/sub\u003e\n\n\u003e #### 2.2.3 Matplotlib \n\nNous avons utilisé **_Matplotlib_** pour afficher les images sur l'interface **_PyQt_** et créer les graphiques en lien avec l'image.\nNous utilisons plus particulièrement **_Matplotlib.Pyplot_**.\n\n```\npip install matplotlib\n```\n\n\u003csub\u003eMatplotlib : https://matplotlib.org/\u003c/sub\u003e\n\n\u003e #### 2.2.4 Numpy\n\nLa bibliotèque **_Numpy_** nous a permis de travailler avec les données d'une image fits. \n\n```\npip install numpy\n```\n\n\u003csub\u003eNumpy : https://numpy.org/\u003c/sub\u003e\n\n\u003e #### 2.2.5 Scikit-image\n\n**_Scikit-image_** nous a permis de réaliser les filtres sur les images. \n\n```\npip install scikit-image\n```\n\n\u003csub\u003eScikit-image : https://scikit-image.org//\u003c/sub\u003e\n\n\u003e #### 2.2.6 Pyinstaller\n\n\u003e ##### 2.2.6.1 **Bibliothèque**\n\nGrâce à **_Pyinstaller_**, nous avons pu créer un executable (_.exe_) **(crée sous Windows)**.\n\n```\npip install pyinstaller\n```\n\n\u003e ##### 2.2.6.2 **Compilation de notre programme**\n\nDans un terminal et en pointant le fichier, nous avons exécuté la commande suivante\n\n```\npyinstaller --onefile mainWindow.py\n```\n\nNous avons ainsi pu créer un fichier exécutable sous windows , utilisable sur un autre ordinateur (nous avons fait le test)\n\n\u003csub\u003ePyinstaller : https://pyinstaller.org/\u003c/sub\u003e\n\n\n## **3 Fonctionnalités ➕**\n\n### **3.1 Fonctionnalités attendues**\n\n\n\u003e #### 3.1.1 Stacking par moyenne\n\nCette méthode de stacking permet d'améliorer considérablement la netteté de l'image. \nOn prend les pixels d'une même coordonnée de chaque image pour en établir la moyenne\net attribuer le résultat à une nouvelle image comme nouvelle couleur de cette coordonnée.\n\n\u003e #### 3.1.2 Stacking par médiane\n\nLe 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.\nLe rendu de l'image sera encore plus net (réduction majeur du bruit de l'image)\n\nOn fait une liste des pixels des N images sur le même point et on calcule la médiane de cette liste.\nOn attribut cette médiane à une nouvelle image comme couleur de ce pixel.\n\n\u003e #### 3.1.3 Détection des outliers\n\nNous 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\nsur les deux stackings et de comparer les résultats obtenus\n\nCette 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.\n            *data \u003c center - (sigma_lower * std)*\n            *data \u003e center + (sigma_upper * std)*\n\n\n### **3.2 Fonctionnalités supplémentaires**\n\nFonctionnalités qui n'étaient pas attendues mais que nous avons jugé pertinent d'ajouter.\n\n\u003e #### 3.2.1 Detection des étoiles \n\nLa détection des corps célestes est possible dans notre application, en effet celle-ci est effectuée sur un laplace de gaussien (LoG) . \nLe 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\").\nL'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.\n\nSi l'image est uniforme, alors le résultat de ce filtre sera uniforme aussi et penchera vers le noir (0).\n\n*Le résultat peut prendre un certain temps à être calculé, comptez environ 2min pour une image monochromée*\n\n\n\u003e #### 3.2.2 Modification de l'intensité\n\nL'intensité ici est modifiée par un input de l'utilisateur, de base celle-ci s'adapte à la range de l'image. \nL'intérêt est de mettre en surbrillance ou de cacher certaines zones de l'image.\nCes valeurs peuvent montées jusqu'à \"presque\" l'infini (si on peut le quantifier)\n\n\u003e #### 3.2.3 Detection des maximas locaux\n\nUn extremum est une valeur maximale ou minimale.\nSur une image un maxima est un pixel si ce pixel est supérieur ou égal à tous ses voisins immédiats.\nL'intérêt est de déterminer où se trouvent les corps célestes et les éléments qui sont en commun.\nCela permet d'ajouter un complément à la détection d'étoiles, voir à l'intensité puisque l'on peut détecter les \"éléments\".\n\n\n### **3.3 Graphique**\n\nLe Graphique est utilisé pour connaître le color Scaling de l'image, cela permet de connaître :\n            - Si les couleurs de l'image sont sur 8 bits, 16 bits , ...\n            - Les couleurs utilisées : on peut effecter un traitement sur l'image pour isoler les plages de couleurs qui nous intéressent (vmin \u0026 vmax dans l'application)\n\n## **4 Comment l'utiliser ❔**\n\n### 4.1 Lancer le programme\n\n\u003e #### 4.1.1 Avec le code \n\nPour utiliser le programme à partir du code, il faut run (démarrer) le fichier **mainWindow.py** grâce à un éditeur de code comme _VS code_.\n\n\u003csub\u003eVS code : https://code.visualstudio.com\u003c/sub\u003e\n\n\u003e #### 4.1.2 Avec l'exécutable\n\nDouble cliquer sur le fichier **mainWindow.exe** et l'interface s'ouvrira.\n\n### 4.2 Utilisation de l'interface \n\n\u003e #### 4.2.1 Ouvrir une image\n\nUne fois l'interface ouverte,il suffit de cliquer sur le bouton _\"ouvrir un fichier\"_ et de choisir votre fichier au format _\".fits\"_. \nIl est aussi possible d'ouvrir plusieurs fichiers à la fois, pour cela cliquer sur \"Ouvrir un dossier\".\nSelectionner ce dossier puis faites OK , **attention ce dossier ne doit contenir que des fichiers FITS de la même image**\n\n\u003cimg src=\"./img/Ouvrirfichier.png\"\u003e\n\n\u003e #### 4.2.2 Empilement de plusieurs images\n\nPour faire de l'empilement sur plusieurs images, il suffit de cliquer sur le menu déroulant _\"Méthode Stacking\"_ .\nChoisir ensuite votre méthode de stacking entre le _stacking moyenne_ ou le _stacking médiane_.\n\nAttention : 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).\n\n\u003cimg src = \"./img/stacking.png\"\u003e\n\n\u003e #### 4.2.3 Filtrer une image\n\nPour choisir un filtre sur une image empilée, cliquer sur le nouveau menu déroulant _\"Choisir un filtre\"_ et choisir le filtre souhaité.\n\n\u003cimg src = \"./img/filtre.png\"\u003e\n\n\u003e ##### 4.2.3.1 Detection des outliers\n\nAprès avoir choisi le filtre pour détecter les outliers sur une image. \nIl 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\"_.\nInformation : Par défaut, le sigma est présenté à 2.85 (valeur la plus proche du résultat souhaité après test).\n\n\u003cimg src=\"./img/choixOutliers.png\"\u003e\n\n\u003e ##### 4.2.3.2 Modification de l'intensité\n\nSuite à la selection du filtre _\"Modifier l'intensité\"_, il est possible de choisir l'intensité minimale et maximale.\nIl suffit de renseigner les valeurs dans les deux zones de textes qui sont apparues et de cliquer sur le bouton _\"Afficher\"_.\nAttention : L'intensité maximale \u003e intensité minimale.\n\n\u003cimg src=\"./img/choixIntensite.png\"\u003e\n\n\u003e #### 4.2.4 Enregistrer l'image\n\nPour enregister votre image en format _\".png\"_,cliquer sur le bouton \"_Enregistrer en PNG\"_ et choisir l'emplaceent du futur fichier/dossier.\nCette 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.\n\n\u003cimg src = \"./img/enregistrer.png\"\u003e\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffredericdrnl%2Fempilement-image-astronomique","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffredericdrnl%2Fempilement-image-astronomique","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffredericdrnl%2Fempilement-image-astronomique/lists"}