Pour ceux qui ne connaissent pas les fichiers. Étant donné que l'image de la galaxie est familière, il s'agit d'un échantillon qui ne fonctionne qu'avec Google Colab en l'utilisant comme exemple. Il y a aussi Comment rechercher en utilisant astroquery de python et obtenir des images ajustées avec skyview écrit pour des utilisateurs un peu plus avancés.
L'astronomie spatiale échange une grande quantité de données, donc la connaissance du serveur et du client est nécessaire. Système client-serveur est un concept de base de la science astronomique spatiale, alors savons-le. En termes simples, un serveur est un système d'exploitation ou un groupe de logiciels qui a la capacité de fournir des informations à de nombreux périphériques sur le réseau, et le client est une machine inutile qui récupère les données du serveur.
Il existe des différences considérables selon le système d'exploitation. Dans l'astronomie spatiale, je pense que les serveurs basés sur Linux sont presque à 100%, donc si vous connaissez à l'avance l'interaction et le mécanisme de base avec le serveur, il sera un peu plus facile d'acquérir des données astronomiques spatiales. pense. Qu'est-ce qu'un système d'exploitation serveur? etc.
Si vous souhaitez utiliser le mécanisme serveur et client, c'est très simple maintenant, alors utilisons-le confortablement d'abord. Par exemple, récupérons le fichier de la célèbre page intitulée heasoft de la NASA.
python
import urllib.request
from bs4 import BeautifulSoup
url = 'https://heasarc.gsfc.nasa.gov/docs/software/heasoft/'
req = urllib.request.Request(url)
html = urllib.request.urlopen(req)
soup = BeautifulSoup(html, "html.parser")
topicsindex = soup.find('div', attrs={'class': 'navigation'})
Désormais, les informations de tous les html sont acquises en soupe. Le navigateur affiche ceci. À partir de là, seule la partie appelée navigation a été acquise, qui est le topicsindex.
python
print(topicsindex) # extract sentences begining with div navigation
<div class="navigation">
<div id="nasaHeader">
<div>
....
Seules quelques informations sont affichées. Notez que c'est la tâche d'accéder au serveur de la NASA depuis le client et de recevoir les données, qui peuvent être écrites en quelques lignes de programme. Veuillez noter que la récupération de données ne consiste pas seulement à récupérer des données en appuyant sur différents boutons avec la souris du navigateur, et dans le cas de l'astronomie spatiale, à récupérer des données avec une telle ligne de commande. Souvent.
python
pip install astroquery
Installons astroquery. Il s'agit d'un outil pour récupérer des données avec le même codage à partir de nombreux catalogues tels que skyview et vizier.
vizier est un catalogue extrait pour chaque article. Par exemple, une recherche sur blackhole révèle une liste d'articles contenant un grand catalogue. Vous pouvez rapidement créer des graphiques simples sur vizir. Puisqu'il est également lié au papier, il est pratique de pouvoir retracer rapidement les informations d'origine. À partir d'une requête,
python
# download galaxy data via Vizier
from astroquery.vizier import Vizier
v = Vizier(catalog="J/ApJS/80/531/gxfluxes",columns=['Name',"logLx","Bmag","dist","type"],row_limit=-1)
data = v.query_constraints()
sname = data[0]["Name"]
namelist = []
olist=["HRI","DSS"]
J/ApJS/80/531/gxfluxes est un catalogue de galaxies, d'ici, 'Nom', "logLx", Les données de "Bmag", "dist" et "type" sont extraites, et seul le nom est extrait en définissant sname = data [0] ["Name"].
skyview est un catalogue pratique pour acquérir des images de corps célestes. Cette fois, prenons une image de la galaxie d'ici.
python
# get image from skyview
from astroquery.skyview import SkyView
name=namelist[0]
paths = SkyView.get_images(position=name, survey=olist)
save(paths,name,olist)
Ici, spécifiez position = "nom du corps céleste", survey = ["DSS", ..], etc. Obtenez une image de skyview et enregistrez-la dans un fichier ajusté avec une fonction appelée enregistrer.
python
def save(p,name,obs): # save file into fits
for onep,oneo in zip(p,obs):
onep.writeto(name+"_"+oneo+".fits",overwrite=True)
Nommez la liste de catégories écrite en obs et enregistrez-la dans le fichier fit.
Importez les modules requis pour tracer l'image.
python
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
from astropy.wcs import WCS
from astropy.io import fits
import glob
import numpy as np
Ensuite, lisez le fichier fit avec astropy et extrayez les informations WCS de l'en-tête. WCS signifie World Coordinate System (WCS) et sont les informations nécessaires à la conversion des coordonnées des images astronomiques. .. La conversion des coordonnées peut être effectuée simplement en la spécifiant dans le mot-clé projection de matplotlib.
python
# set IC342 imaga of DSS
dssname = "IC0342_DSS.fits"
dsshdu = fits.open(dssname)[0]
dsswcs = WCS(dsshdu.header)
dssdata = dsshdu.data
Tracer avec matplotlib.
python
# plot image
F = plt.figure(figsize=(8,8))
plt.subplot(111, projection=dsswcs)
plt.imshow(dssdata, origin='lower', norm=LogNorm())
plt.colorbar()
Si vous voyez une image comme celle-ci, vous réussissez.
Jouons avec l'image en effectuant des opérations de base telles que la rotation, la transposition et la différence de l'image. Par exemple, vous pouvez facilement afficher une image de différence.
Le fichier fit est juste un fichier qui combine des informations de base écrites en texte et des données écrites en binaire, donc gérons-le sans être faible au début. En ce qui concerne les données d'image, il existe de nombreux modules en python tels que openCV, alors jouons d'abord avec eux. Les images et les galaxies sont différentes en fonction de la longueur d'onde, et il est également bon de jouer avec d'autres images telles que les débris de supernova et les amas de galaxies. Vous pouvez rechercher des images à l'aide de vizir, mais parfois vous ne trouvez pas ce que vous voulez, il peut donc être plus rapide de rechercher sur Google. ..
Dans l'analyse astronomique spécialisée, la fonction de réponse du télescope (propagation de l'image, sensibilité, etc.) est utilisée pour déterminer si le «point» de l'image est la source ponctuelle ou la structure étalée. Par exemple, le satellite Chandra dispose d'un outil appelé wavdetect qui effectue une correspondance de modèle pour l'analyse de source ponctuelle.
Ici, je vais vous présenter une méthode pour lire des images astronomiques un peu plus facilement. La conversion morphologique est une méthode de binarisation d'une image (0 ou 1) et de répétition et / ou d'opérations avec une petite zone appropriée pour convertir la forme de l'image. Par exemple, si la zone de la galaxie est connectée par 100 pixels et que la source ponctuelle n'est qu'un pixel, le processus d'érosion (= l'opération de mise à 0 si même 1 pixel est 0 dans une petite zone appropriée) est effectué. Si vous le faites, le bruit disparaîtra. Ensuite, si vous effectuez un traitement de dilatation (== calcul que si même 1 pixel a 1 dans une petite zone appropriée, ce sera 1), il reviendra à l'original, mais le bruit qui est devenu 0 n'apparaîtra pas. La méthode de traitement du bruit en répétant la contraction (érosion) et l'expansion (dilatation) de cette manière est appelée processus d'ouverture. Il peut être exécuté en utilisant cv2.morphologyEx (binarydssdata, cv2.MORPH_OPEN, kernel). Conversion de morphologie a été utile. L'original est écrit en langage C, et il y a [Execution example of Morphology_2_8cpp-example](# https://docs.opencv.org/4.1.2/da/d34/samples_2cpp_2tutorial_code_2ImgProc_2Morphology_2_8cpp-example.html#a13).
Facile à utiliser, image
python
# convert the data into binary image
binarydssdata = 1.0 * (dssdata > np.median(dssdata))
Comme, il est binarisé en taille par rapport à la médiane. Il semble que certaines fonctions ne fonctionnent pas avec int, alors définissez float sur 1.0.
Ensuite, getStructuringElement (cv2.MORPH_ELLIPSE, (8,8)) crée une matrice elliptique 1,0 avec une image 8x8 et la convertit en cv2.morphologyEx en tant que noyau.
# 1.0 is used because morphologyEx may not work for int32
import cv2
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(8,8))
opening = cv2.morphologyEx(binarydssdata,cv2.MORPH_OPEN, kernel)
C'est le seul code. Voici un exemple d'exécution.
De gauche à droite, "image originale", "image binarisée" et "après conversion de morphologie", et à l'extrême droite, "image originale" x "après conversion de morphologie". Dans l'analyse astronomique réelle, la suppression des sources ponctuelles fonctionne de la même manière.
Pour fonctionner sur google Colab, astroquery n'est pas installé par défaut, vous devez donc installer astroquery. Veuillez consulter Exemple d'exécution sur google Colab.
De plus, si vous n'enregistrez pas le fichier fit sur google drive, vous ne pourrez pas extraire les données, alors montez google drive si nécessaire et écrivez-y le fichier fit.
Recommended Posts