IC⎵1396
Neues Mitglied
Hallo liebes astronomie.de-Forum,
ich möchte euch hier die auf GitHub von mir veröffentlichte Software zum Stitchen von insb. Fisheye-Panoramas vorstellen. Grundlegende Programmierkenntnisse (Python) sind zur Bedienung notwendig.
Zielsetzung / Motivation
Es empfiehlt sich, nach einem Plan vorzugehen. Für ein 18 mm-Objektiv liefert folgend Vorgehensweise ausreichend gute Überlappungen zwischen den Einzelfotos:
ORB keypoint/descriptor matching vs. shape/constellation matching
OpenCV matchers können keypoints/descriptors matchen, dabei handelt es sich um einzelne Punkte:
Bei Sternenhimmelaufnahmen wird das schnell problematisch, insbesondere wenn die Aufnahme schwächer belichtet wurde, nicht allzu viele Sterne vorhanden sind und der Himmelshintergrund eher dunkel als sternreich erscheint. Denn»die meisten Sterne sehen gleich aus«.
Wenn wir mit Hilfe einer Sternkarte nach Sternbildern am Himmel suchen, suchen wir nicht nach einzelnen Sternen, sondern nach Mustern – Sternbildern eben. Es wäre hilfreich, wenn OpenCV ebenfalls imstande wäre, nicht nurKeypoints/Descriptors sondern ganze Muster (Sternbilder) zu matchen.
Der hier vorgestellte StarPolygonMatcher bietet genau diese Funktionalität:
Sternbilder bzw. Sternpolygone werden anhand von Eckwinkeln, Seitenlängen und Sternhelligkeiten miteinander verglichen.
Für ein 5-seitiges Polygon (5-Eck) wie oben dargestellt ergeben sich 5 Eckwinkel, 5 Seitenlängen und 5 Sternhelligkeiten.
Die Eckwinkel und Seitenlängen werden nicht in der Bildebene gemssen! Die Sterne werden zunächst auf eine Sphäre »in die reale, physikalische Welt« zurückprojiziert.Winkel und längen auf der Kugeloberfläche werden dann mithilfe sphärischer Trigonometrie bestimmt. Der Radius der Kugel ist beliebig wählbar, da dieSeitenlängen von sphärischen Dreiecken in Radian beschrieben werden.
Der Panorama-Stitching-Workflow
ich möchte euch hier die auf GitHub von mir veröffentlichte Software zum Stitchen von insb. Fisheye-Panoramas vorstellen. Grundlegende Programmierkenntnisse (Python) sind zur Bedienung notwendig.
Zielsetzung / Motivation
- PTGui (https://ptgui.com/) leistet ausgezeichnete Dienste aber es erkennt Sterne nicht als ImageFeatures. Für jede Kombination aus 2 Aufnahmen müssen mindestens 3 Sterne pro Aufnahmemanuell markiert werden. Bei 21 Nachthimmelaufnahmen für ein Fisheye-Panorama ergeben sich 36 Überlappungen zwischen jeweils 2 Fotos. Für jede Überlappung müssen auf beiden Aufnahmen mindestens 3übereinstimmende Sterne händisch markiert werden – äußerst lästig.
- https://github.com/opencv/opencv/blob/4.x/samples/python/stitching_detailed.py ist ein ausgezeichnetes Beispiel für das Stitchen einePanoramas mit OpenCV – für jemanden, der noch nie OpenCV bedient hat jedoch sehr verwirrend und wenig erhellend. Der in stitching_detaily.py vorgestellte Stitiching-Workflow (inkl. feature detection, pairwiseimage matching, homography estimation, bundle adjustment, waviness correction, image warping, stitching seam estimation and seaming/masking, timelapsing of warped images, blending of warped images) ermöglicht tiefe Einblicke indie Arbeitsweise von OpenCV und schreibt die Resultate jedes Zwischenschritts auf die Festplatte. Es handelt sich um eine stark erweiterte Version von stitching_detaily.py , die mehr Dokumentation und Einblick bietet.
- Die standardmäßig in stitching_detaily.py verwendeten Matcher (cv.detail_BestOf2NearestMatcher and cv.detail_BestOf2NearestRangeMatcher) funktionieren kaum beiSternenhimmelaufnahmen. Deswegen wird hier ein custom bruteforce matcher vorgestellt , der cv.BFMatcher(cv.NORM_HAMMING) verwendet und ein Tuple aus cv2.detail.MatchesInfo -Objekten ausgibt– analog zu cv.detail_BestOf2NearestMatcher und cv.detail_BestOf2NearestRangeMatcher .
Es empfiehlt sich, nach einem Plan vorzugehen. Für ein 18 mm-Objektiv liefert folgend Vorgehensweise ausreichend gute Überlappungen zwischen den Einzelfotos:
ORB keypoint/descriptor matching vs. shape/constellation matching
OpenCV matchers können keypoints/descriptors matchen, dabei handelt es sich um einzelne Punkte:
Bei Sternenhimmelaufnahmen wird das schnell problematisch, insbesondere wenn die Aufnahme schwächer belichtet wurde, nicht allzu viele Sterne vorhanden sind und der Himmelshintergrund eher dunkel als sternreich erscheint. Denn»die meisten Sterne sehen gleich aus«.
Wenn wir mit Hilfe einer Sternkarte nach Sternbildern am Himmel suchen, suchen wir nicht nach einzelnen Sternen, sondern nach Mustern – Sternbildern eben. Es wäre hilfreich, wenn OpenCV ebenfalls imstande wäre, nicht nurKeypoints/Descriptors sondern ganze Muster (Sternbilder) zu matchen.
Der hier vorgestellte StarPolygonMatcher bietet genau diese Funktionalität:
Sternbilder bzw. Sternpolygone werden anhand von Eckwinkeln, Seitenlängen und Sternhelligkeiten miteinander verglichen.
Für ein 5-seitiges Polygon (5-Eck) wie oben dargestellt ergeben sich 5 Eckwinkel, 5 Seitenlängen und 5 Sternhelligkeiten.
Die Eckwinkel und Seitenlängen werden nicht in der Bildebene gemssen! Die Sterne werden zunächst auf eine Sphäre »in die reale, physikalische Welt« zurückprojiziert.Winkel und längen auf der Kugeloberfläche werden dann mithilfe sphärischer Trigonometrie bestimmt. Der Radius der Kugel ist beliebig wählbar, da dieSeitenlängen von sphärischen Dreiecken in Radian beschrieben werden.
Der Panorama-Stitching-Workflow