[PYTHON] Mit Google Colab durchgeführte Bildanalyse für diejenigen, die mit der Erforschung des Weltraums beginnen

Einführung

Für diejenigen, die neu in Dateien passen. Da das Bild der Galaxie bekannt ist, handelt es sich um ein Beispiel, das nur mit Google Colab funktioniert. Es gibt auch So suchen Sie mit Pythons Astroquery und erhalten passende Bilder mit Skyview für etwas fortgeschrittenere Benutzer.

Basisausgabe

Server- und Client-Grundlagen

Der Weltraumastronomie tauscht eine große Datenmenge aus, daher sind Kenntnisse des Servers und des Clients erforderlich. Client-Server-System ist ein Grundkonzept in der Weltraumastronomie. Lassen Sie es uns wissen. Einfach ausgedrückt ist ein Server ein Betriebssystem oder eine Softwaregruppe, die Informationen für viele Geräte im Netzwerk bereitstellen kann, und der Client ist ein nutzloser Computer, der Daten vom Server abruft.

Je nach Betriebssystem gibt es erhebliche Unterschiede. In der Weltraumastronomie denke ich, dass Linux-basierte Server fast 100% sind. Wenn Sie also die grundlegende Interaktion und den Mechanismus mit dem Server im Voraus kennen, wird es etwas einfacher sein, Weltraumastronomische Daten zu erfassen. Überlegen. Was ist ein Server-Betriebssystem? usw.

urllib Beispiel

Wenn Sie den Server- und Client-Mechanismus verwenden möchten, ist dies jetzt sehr einfach. Lassen Sie uns ihn also zuerst bequem verwenden. Lassen Sie uns zum Beispiel die Datei der berühmten Seite namens heasoft of NASA abrufen.

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'})

Jetzt werden die Informationen aller HTML in Suppe erfasst. Der Browser zeigt dies an. Daraus wurde nur der Teil namens Navigation erfasst, der der Themenindex ist.

python


print(topicsindex) # extract sentences begining with div navigation 
<div class="navigation">
<div id="nasaHeader">
<div>
....

Es werden nur einige Informationen angezeigt. Beachten Sie, dass dies die Aufgabe ist, vom Client aus auf den NASA-Server zuzugreifen und die Daten zu empfangen, die in wenigen Programmzeilen geschrieben werden können. Bitte beachten Sie, dass es beim Abrufen von Daten nicht nur darum geht, Daten durch Drücken verschiedener Tasten mit der Maus vom Browser abzurufen, und im Falle eines raumastronomischen Abrufs von Daten über eine solche Befehlszeile. Häufig.

Astroquery-Einstellungen

python


pip install astroquery 

Lassen Sie uns [astroquery] installieren (https://astroquery.readthedocs.io/en/latest/). Dies ist ein Tool zum Abrufen von Daten mit derselben Codierung aus vielen Katalogen wie Skyview und Vizier.

Wie man Wesir benutzt

vizier ist ein Katalog, der für jedes Papier extrahiert wird. Beispielsweise zeigt eine Suche nach Blackhole eine Liste von Papieren mit einem großen Katalog. Sie können schnell einfache Diagramme auf Wesir erstellen. Da es auch mit dem Papier verknüpft ist, ist es praktisch, die Originalinformationen schnell nachverfolgen zu können. Aus Astroquery,

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 ist ein Katalog von Galaxien, von hier aus 'Name', "logLx", Die Daten von "Bmag", "dist" und "type" werden extrahiert, und nur Name wird durch Setzen von sname = data [0] ["Name"] extrahiert.

So verwenden Sie Skyview

skyview ist ein praktischer Katalog zum Erfassen von Bildern von Himmelskörpern. Lassen Sie uns dieses Mal ein Bild der Galaxie von hier bekommen.

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)

Geben Sie hier position = "Name des Himmelskörpers", poll = ["DSS", ..] usw. an. Holen Sie sich ein Bild aus Skyview und speichern Sie es in einer Anpassungsdatei mit der Funktion Speichern.

Speichern in passende Datei

python


def save(p,name,obs): # save file into fits 
    for onep,oneo in zip(p,obs):
        onep.writeto(name+"_"+oneo+".fits",overwrite=True)

Benennen Sie die in obs geschriebene Kategorieliste und speichern Sie sie in der Anpassungsdatei.

Zeichnen Sie ein Beispiel in Himmelskoordinaten mit matplotlib

Importieren Sie die erforderlichen Module, um das Bild zu zeichnen.

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

Lesen Sie als Nächstes die Anpassungsdatei mit Astropie und extrahieren Sie die WCS-Informationen aus dem Header. WCS steht für World Coordinate System (WCS) und ist die Information, die für die Koordinatenumwandlung von astronomischen Bildern erforderlich ist. Insbesondere sind es die Informationen, die für die Umwandlung von Detektorkoordinaten in Himmelskoordinaten und Silbermeridian-Schusskoordinaten erforderlich sind. .. Die Koordinatenkonvertierung kann einfach durch Angabe in der Schlüsselwortprojektion von matplotlib erfolgen.

python


# set IC342 imaga of DSS
dssname = "IC0342_DSS.fits"
dsshdu = fits.open(dssname)[0]
dsswcs = WCS(dsshdu.header)
dssdata = dsshdu.data

Grundstück mit Matplotlib.

python


# plot image 
F = plt.figure(figsize=(8,8))
plt.subplot(111, projection=dsswcs)
plt.imshow(dssdata, origin='lower', norm=LogNorm())
plt.colorbar() 

スクリーンショット 2020-05-15 13.10.22.png

Wenn Sie ein Bild wie dieses sehen, sind Sie erfolgreich.

Beispiel für eine Bildanalyse

Spielen wir mit dem Bild, indem wir grundlegende Operationen wie Drehen, Transponieren und Diffieren des Bildes ausführen. Sie können beispielsweise problemlos ein Differenzbild anzeigen.

スクリーンショット 2020-05-15 13.04.37.png

Die Fits-Datei ist nur eine Datei, die grundlegende Informationen in Text und Daten in Binärform kombiniert. Lassen Sie uns also damit umgehen, ohne zunächst schwach zu sein. Was Bilddaten betrifft, gibt es in Python viele Module wie openCV. Lassen Sie uns also zuerst damit herumspielen. Bilder und Galaxien sehen unterschiedlich aus, wenn sie unterschiedliche Wellenlängen haben, und Sie können mit anderen Bildern wie Supernova-Trümmern und Galaxienhaufen spielen. Sie können mit vizier nach Bildern suchen, aber manchmal finden Sie möglicherweise nicht das, was Sie möchten, sodass die Suche auf Google möglicherweise schneller ist. ..

Beispiel einer Bildanalyse mittels Morphologietransformation

In der spezialisierten astronomischen Analyse wird die Antwortfunktion des Teleskops (Bildstreuung, Empfindlichkeit usw.) verwendet, um zu untersuchen, ob der "Punkt" im Bild die Punktquelle oder die Ausbreitungsstruktur ist. Der Chandra-Satellit verfügt beispielsweise über ein Tool namens wavdetect, das den Mustervergleich für die Punktquellenanalyse durchführt.

Hier werde ich eine Methode vorstellen, um astronomische Bilder etwas einfacher abzuspielen. Die Morphologiekonvertierung ist eine Methode zum Binärisieren eines Bildes (0 oder 1) und zum Wiederholen und / oder Operationen mit einem geeigneten kleinen Bereich, um die Form des Bildes zu konvertieren. Wenn beispielsweise die Fläche der Galaxie durch 100 Pixel verbunden ist und die Punktquelle nur ein Pixel ist, wird der Erosionsprozess (= die Operation zum Setzen von 0, wenn in einem geeigneten kleinen Bereich sogar 1 Pixel 0 ist) ausgeführt. Wenn Sie dies tun, verschwindet das Geräusch. Wenn Sie als nächstes eine Dilatationsverarbeitung durchführen (== Berechnung, dass wenn 1 Pixel 1 in einem geeigneten kleinen Bereich hat, ist es 1), kehrt es zum Original zurück, aber das Rauschen, das einmal 0 wurde, wird nicht angezeigt. Die Methode zur Verarbeitung von Rauschen durch Wiederholung der Kontraktion (Erosion) und Expansion (Dilatation) auf diese Weise wird als Öffnungsprozess bezeichnet. Es kann mit cv2.morphologyEx (binarydssdata, cv2.MORPH_OPEN, Kernel) ausgeführt werden. Morphologiekonvertierung war hilfreich. Das Original ist in C-Sprache geschrieben und es gibt [Ausführungsbeispiel für Morphology_2_8cpp-Beispiel](# https://docs.opencv.org/4.1.2/da/d34/samples_2cpp_2tutorial_code_2ImgProc_2Morphology_2_8cpp-example.html#a13).

Einfach zu bedienen, Bild

python


# convert the data into binary image
binarydssdata = 1.0 * (dssdata > np.median(dssdata)) 

Wie es ist binarisiert in der Größe als Median. Es scheint, dass einige Funktionen nicht mit int funktionieren, also setzen Sie float auf 1.0.

Als nächstes erstellt getStructuringElement (cv2.MORPH_ELLIPSE, (8,8)) eine elliptische 1,0-Matrix mit einem 8x8-Bild und konvertiert sie als Kernel und cv2.morphologyEx.


# 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)

Dies ist der einzige Code. Hier ist ein Beispiel für die Ausführung.

スクリーンショット 2020-05-19 13.43.35.png

Von links nach rechts "Originalbild", "binärisiertes Bild" und "nach Morphologiekonvertierung" und ganz rechts "Originalbild" x "nach Morphologiekonvertierung". In der tatsächlichen astronomischen Analyse funktioniert die Entfernung von Punktquellen auf die gleiche Weise.

Ausführungsbeispiel in Google Colab

Um auf Google Colab ausgeführt zu werden, ist Astroquery nicht standardmäßig installiert, daher müssen Sie Astroquery installieren. Weitere Informationen finden Sie unter Beispiel für die Ausführung in Google Colab.

Wenn Sie die Anpassungsdatei nicht auf Google Drive speichern, können Sie die Daten nicht abrufen. Hängen Sie daher bei Bedarf Google Drive ein und schreiben Sie die Anpassungsdatei dort.

Verwandte Seite

Recommended Posts

Mit Google Colab durchgeführte Bildanalyse für diejenigen, die mit der Erforschung des Weltraums beginnen
Software-Kurs für diejenigen, die anfangen, den Weltraum zu erforschen
Für diejenigen, die mit TensorFlow2 maschinelles Lernen beginnen möchten
Treten Sie Azure mit Go ~ bei Für diejenigen, die Azure mit Go ~ starten und kennenlernen möchten
Für diejenigen, die Python mit vim schreiben möchten
Bildgebende Inspektionsmaschine für diejenigen, die nicht ihr Bestes geben
Über das Lernen mit Google Colab
Lose Artikel für diejenigen, die mit der Verarbeitung natürlicher Sprache beginnen möchten
Ein Memo für diejenigen, die eine schnelle Socket-Kommunikation mit Netcat wünschen