sun_bloom_fit — GEOCAM sun op

• Datenarten: image2d → table

• Aufruf: import fullseye as fs; fs.ledger.sun_bloom_fit(image, threshold=0.97, ignore_top_rows=0, min_area=30, max_area_frac=0.15, min_rim_fraction=0.3) (die Implementierung direkt: import geocam; geocam.sun_bloom_fit(image, threshold=0.97, ignore_top_rows=0, min_area=30, max_area_frac=0.15, min_rim_fraction=0.3); aus dem Register: opsgeocam.get("sun_bloom_fit"))

Verwendung

Die Sonne in realen Aufnahmen = ein Bloom, der den Sensor sättigt (größer als die Scheibe, seine Größe ändert sich mit der Belichtung, und er wird vom Bildrand oder von Textbändern abgeschnitten). Passt einen Kreis an den Rand des größten gesättigten Blobs an und gibt den Mittelpunkt zurück → table. Der Schwerpunkt verschiebt sich bei abgeschnittenem Blob von der abgeschnittenen Seite weg (gemessen 15 px), daher werden die abgeschnittenen Ränder (Pixel, die den Bildrand und das ignore_top_rows-Band berühren) verworfen und an den verbleibenden Bogen per algebraischen kleinsten Quadraten (Kåsa 1976) ein Kreis angepasst.

sun_pixel_position ist ein Gate für synthetische Daten, das "eine kompakte kleine Scheibe" voraussetzt; bei echten Straßenkameras liest es die weiße Beschriftung des Stationsnamens, Verkehrszeichen und weiße Autos als Sonne (24/24 Fehldetektionen bei Fintraffic-Wetterkameras, 2026-09-21). Dieses op legt nicht fest, dass es die Sonne ist:

Es gibt Kreismittelpunkt und Radius, das Residuum und ob er abgeschnitten ist zurück; ob es die Sonne ist, entscheidet sich daran, ob es sich zeitgemäß bewegt (camera_orientation_from_sun_candidates).

Args:

image: (H, W) float, 0 bis 1.

threshold: Absolutwert, der als Sättigung gilt.

ignore_top_rows: wie viele Zeilen am oberen Rand ignoriert werden (ein Textband wie der Stationsname).

min_area: minimale Pixelanzahl eines Klumpens.

max_area_frac: maximale Fläche eines Klumpens (als Verhältnis zum Bild) -- weist Fotos ab, in denen der ganze Himmel ausgebrannt ist.

min_rim_fraction: welcher Anteil des Umfangs als nicht abgeschnittener Rand nötig ist (darunter "zu stark abgeschnitten", ValueError).

Returns:

table: u / v (Kreismittelpunkt) / r (Radius px) / rms_px (Radiusresiduum des Rands) / area (Pixelanzahl des Klumpens) /

clipped (1 = der Rand ist irgendwo abgeschnitten) / rim_fraction / centroid_u / centroid_v (Schwerpunkt zum Vergleich).

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie geocam

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• (noch keine)

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

render_skyline_view · camera_orientation_from_skyline

Gleiche Kategorie (sun)

sun_position · sun_pixel_position · camera_orientation_from_sun · camera_orientation_from_sun_candidates


*Provenance: geocam.py — GEOCAM Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.