scene op• Datenarten: keine → table (ein Operator, der allein durch seine Argumente bestimmt ist — er nimmt kein Bild und keine Daten entgegen)
• Aufruf: import fullseye as fs; fs.ledger.sensor_catalog(status: 'str' = None, maker: 'str' = None) -> 'dict' (die Implementierung direkt: import optscene; optscene.sensor_catalog(status: 'str' = None, maker: 'str' = None) -> 'dict'; aus dem Register: opsoptics.get("sensor_catalog"))
Datenblatt realer Sensoren (mit Baslers EMVA1288-Messwerten).
Mit current / mature / legacy für status lässt sich die Liste eingrenzen. Abgekündigte, zu alte Teile sind nicht aufgeführt. Für Neuentwicklungen aus status="current" wählen (Pregius S, 2.74 µm rückseitenbelichtet).
Was hier steht, sind "Werte der Kameraseite". Da die Quelle Baslers Tabelle mit Kameramessungen ist:
• Die Auflösung ist die Pixelzahl, die diese Kamera ausgibt, nicht unbedingt alle effektiven Pixel des Sensors (Hersteller beschneiden manchmal die Ränder und machen sie etwas kleiner).
• Die Bildrate ändert sich mit der Anschlussschnittstelle (USB3 / GigE / 5GigE / CXP-12), daher wird sie nicht als Sensorattribut geführt ―― deshalb steht sie nicht in dieser Tabelle.
• QE / Dunkelrauschen / Full-Well-Kapazität / Dynamikbereich / max. SNR sind die EMVA1288-Messungen der Kamera (ace / ace 2 / boost). Sie sind keine theoretischen Werte des Sensors allein, sondern schließen die Implementierung ein, daher ändern sie sich bei einer anderen Kamera etwas.
• Pixelabstand, Verschlussart und Generation stammen vom Sensor und ändern sich daher nicht, wenn die Kamera wechselt.
Kamerahersteller, die ihre Sensoren selbst bauen, können hier nicht aufgeführt werden (Canon / Photron / Vision Research (Phantom) / Teledyne DALSA / ein Teil von Hamamatsu). Sie lassen sich nicht über die Typenbezeichnung nachschlagen, weil das Datenblatt der Kamera die einzige Quelle ist. Manche haben um eine Größenordnung verschiedene Pixelabstände (Phantoms hochempfindliche Modelle 28 µm, Pregius S 2.74 µm), und sowohl die Blendenzahl, ab der die Beugung begrenzt, als auch die Full-Well-Kapazität ändern sich um eine Größenordnung, daher die Werte des realen Geräts direkt an sensor_spec übergeben.
Was sich zwischen den Generationen ändert, zeigt sich in der Full-Well-Kapazität: Pregius 1st hat 31.8 ke-, das ist das 3-fache der 2nd (10.4 ke-). Das ist der Preis für die Verkleinerung des Pixels von 5.86 µm auf 3.45 µm. Pregius S (2.74 µm) hält mit 9.7 ke- das Niveau der 2nd (rückseitenbelichtet).
Hersteller außer Sony (über maker abrufbar) stammen aus derselben Tabelle, daher lassen sie sich mit derselben Messmethode nebeneinander vergleichen:
• onsemi XGS (3.2 µm) spielt seine Stärke in Großformaten aus, APS-C / 35 mm. Sony hat dieses Format nicht.
• onsemi PYTHON (4.8 µm) ist klein und schnell, aber sein Dunkelrauschen beträgt 11-12 e-, das 5-fache von Pregius. In dunklen Szenen macht sich das bemerkbar.
• Gpixel GMAX (2.5 µm) punktet mit Dunkelrauschen der 1-e--Klasse (GMAX2505/2509). Die Full-Well-Kapazität ist mit 4-5 ke- klein, daher ist der Dynamikbereich mit 70 dB etwa gleich. GMAX3265 hat 65 MP (9344x7000); für Ultrahochauflösung ist es die einzige Option.
• ams CMV (5.5 µm) hat eine große Full-Well-Kapazität, dafür aber auch 14 e- Dunkelrauschen.
Jeder optics-Operator prüft seine Eingabe vor der Berechnung (nichts rutscht stillschweigend durch):
• Einheiten stecken im Argumentnamen — _mm / _um / _deg / _mrad. Eine Verwechslung von mm und µm stürzt nicht ab, sondern liefert eine plausibel aussehende falsche Antwort; der Name verhindert das. Aus der Größenordnung wird nie auf die Einheit geschlossen.
• Strings lösen ValueError aus — float('50') gelingt, sodass ein ungeparster Konfigurationswert als Länge durchrutschen würde (gemessen: thin_lens('50', '200') lieferte plausible 66,667 mm). bool wird als implizite Hochstufung True == 1 ebenfalls abgelehnt.
• complex / Masked Arrays lösen ValueError aus (nur reelle Slots; das stille Verwerfen des Imaginärteils bzw. Abstreifen der Maske wird abgelehnt). NaN/Inf löst bei jeder Eingabe ValueError aus.
• Division durch null und Verwandtes wird namentlich abgelehnt: Brennweite 0, Krümmungsradius 0, Brechzahl <= 0, undurchlässige Blende (alles 0, die Normierung wird 0/0), PSF mit Summe <= 0, Stokes-Vektor mit S0 = 0 und ein Objekt im vorderen Brennpunkt (Bild im Unendlichen).
• Nur zwei Operatoren liefern einen nicht-endlichen Wert, und beide halten das vertraglich fest: depth_of_field liefert jenseits der hyperfokalen Distanz far_mm = inf (genau das bedeutet die hyperfokale Distanz), und gaussian_beam liefert an der Taille wavefront_radius_mm = inf (der Krümmungsradius einer ebenen Wellenfront). Beide liefern zusätzlich einen endlichen Partner (far_is_infinite / curvature_per_mm). Jedes andere stille NaN/Inf wird intern erkannt und löst ValueError aus — "float64 ist übergelaufen" und "die Antwort ist unendlich" sind verschiedene Aussagen; die erste wird nie im Gewand der zweiten geliefert.
• Größenobergrenzen: erzeugte Gitter durch optics.MAX_GRID (4096), übergebene Felder/PSFs/Blenden durch optics.MAX_FIELD_ELEMENTS (2^24), ABCD-Elementketten durch optics.MAX_SYSTEM_ELEMENTS (1024), Zernike durch MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25). Damit werden Pfade fail-closed geschlossen, in denen ein kleines Argument eine riesige interne Allokation auslöst (gemessen: n_max=40 × 4096² braucht 108 GB).
• Physikalisch unmögliche Zustände werden ebenfalls abgelehnt: Stokes-Vektor mit Polarisationsgrad > 1, negative Transmission, negative Intensität und ungültige Zernike-Indizes wie ungerades n-|m|.
• Leitfaden zur Familie optics_imaging
• dataset_conventions — Konventionen für Trainingsdatensätze — COCO / YOLO / VOC und Fallstricke in der Sichtprüfung
• mv_cameras — Hersteller von Industriekameras (Sensorzuordnung, Zeilenkamera / TDI)
• mv_illumination_practice — Beleuchtung in der Praxis — Wellenlänge, Polarisation, Ansteuerung, Fremdlicht, Sicherheit
• mv_image_sensors — Industrielle Bildsensoren (vorwiegend aktuelle Produkte)
• virtual_machine_vision — Virtuelle Bildverarbeitung — Parameter erfassen und Objektmodell
• 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.
• vision_layout_from_catalog — py -3.11 examples/vision_layout_from_catalog.py
table als Eingabe)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
scene)scene_material · scene_plane · scene_sphere · scene_box · scene_cylinder · surface_defect · surface_finish · random_defects
*Provenance: optscene.py — OPTICS 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.