camera_calibration — CALIB calibrate op

• Datenarten: keypoints → table

• Aufruf: import fullseye as fs; fs.ledger.camera_calibration(object_points, image_points_list) (die Implementierung direkt: import calib; calib.camera_calibration(object_points, image_points_list); aus dem Register: opscalib.get("camera_calibration"))

• HALCON-Äquivalent: camera_calibration (Bedeutung und Parameter sind in der HALCON-Referenz nachzulesen)

• GPU: nein (nur CPU-Referenzimplementierung)

Verwendung

[Teilweise] Schätzt nach Zhang nur die intrinsische Matrix K aus mehreren Ansichten eines ebenen Targets (camera_calibration).

> Die ausführliche Beschreibung unten ist der Originaltext — Zusammenfassung und Überschriften sind übersetzt.

する: Zhang の閉形式で K(fx, fy, cx, cy, skew)を求める。視点不足・退化・非有限は ValueError。

しない: レンズ歪みの推定と、K・歪み・外部パラメータの同時の非線形最適化(HALCON の camera_calibration の仕事)。歪みは camera.estimate_distortion で別に求める。HALCON 対応の数え方では「部分対応」で、対応済みには数えない(halcon_coverage.PARTIAL)。

[Partial HALCON analogue] Closed-form K only; no distortion, no joint non-linear refinement.

object_points: (N,2) 平面ターゲット座標 (x, y)(z=0 平面、ワールド単位)。image_points_list: 各視点の (N,2) 画素対応。(row, col) — このモジュールの他 API(project_3d_point の戻り値、image_points_to_world_plane の入力)と同じ規約。内部で (x=col, y=row) に並べ替えてから解くので、fx/cx は col 軸、fy/cy は row 軸の値になる(2026-09-02 以前は (x,y) として扱っており fx↔fy, cx↔cy が入れ替わっていた)。

fail-closed: 視点が 3 未満、すべての視点が正面平行(回転不足)で解が定まらない、または K が非有限/非正になる場合は ValueError(NaN を返さない)。戻り値の homographies は (x,y)→(x=col,y=row) の 3x3、reproj_rms は各視点のホモグラフィ再投影 RMS [px] (対応づけの健全性チェックに使う)。

orientation_rank_ratio は視点の向きが内部パラメータをどれだけ拘束しているか(sv[-2]/sv[0]、大きいほど良い)。再投影誤差は配置の良し悪しを映さない —— 2026-09-06 の実測で、同じ 10 視点・同じ雑音 0.05 px で板の傾きだけを 32 度から 2 度に変えると、再投影 RMS は 0.0690 と 0.0688 で比 1.00 倍のまま、fx の誤差は 0.026 % から 7.33 %(281 倍)になった。この比のほうは 129 倍動く。ただし歪み補正前の点では意味を持たない (下の門の注記を見よ)。

雑音込みの退化の門(2026-11-09): 上の比の門(<= 1e-8)は雑音ゼロでしか鳴らない。歪みなしでも観測雑音 0.05 px があると、全視点が正面平行(傾き 0 度)で比が 1.7e-7 になって門を抜け、fx を真値の 33 倍(+3222 %)にした K を例外なしで返していた。そこで閉形式を解いたあと、各視点のホモグラフィ残差から雑音 σ を見積もり、画像点を σ で揺らして解き直す(32 回、種は固定で同じ入力なら同じ判定)。fx, fy, cx, cy の標準偏差を焦点距離で割った値のどれかが 5 % を超えるか、揺らした解き直しが 1 回でも非有限/非正の K になったら ValueError(「この配置と雑音では K が決まらない」)。実測(10 視点 9x6 格子、歪みなし、雑音 0.05 px): 傾き 0 度 → 拒否(相対標準偏差 65 %、32 回中 10 回が非正の K)、2 度 → 拒否(5.1 %、実際の fx 誤差 −6.6 %)、5 度 → 通過(0.8 %、誤差 −1.3 %)、30 度 → 通過(0.04 %、誤差 −0.03 %)。雑音 0.2 px では 2 度で 65 %(誤差 +28 %)→ 拒否、5 度で 3.4 %(誤差 −4.7 %) → 通過。見積もりは戻り値の intrinsics_rel_std に入る。これは 1σ の広がりで、上限ではない: 視点の種を 10 個変えると、通過した組の実際の fx 誤差は歪みなしでも最大 14.7 % (0.05 px・2 度、10 個中 4 個が通過)、0.2 px・5 度で最大 10.7 % になる。精度の保証が要るなら calib_lm.camera_calibration_lm の共分散を見る。しきい値 5 % の由来と、境目では判定が種・入力で反転することは定数 _K_REL_STD_MAX / _K_MC_TRIALS の注記を見よ(5 % は 2 % で既存テストが落ちたあとに選んだ値)。限界: (1) 歪みのある点では残差が歪みの合わなさを含み、それを雑音として扱う(k1=−0.18・0.05 px では 5 度で 10 個中 1 個だけ通過、8 度以上は全部通過)。偏り(歪みを無視したことによる系統誤差)は測らない: 視点の種 10 個で、通過した組の fx 誤差は 8 度で最大 20.0 %(中央値 9.3 %)、10 度で最大 13.8 %、30 度でも最大 7.2 %(cv2 は歪み込みで 8 度でも最大 0.51 %)。歪みのあるレンズの K は calib_lm.camera_calibration_lm で求める。(2) 視点の点が 4 個だと残差の自由度が 0 で雑音を見積もれず、intrinsics_rel_std は nan で門は効かない(reproj_rms も 0 になり健全性を映さない)。(3) 閉形式を 33 回解くぶん遅い(10 視点 54 点で門の前 2.4 ms、門の後 13〜80 ms。計算機の混み具合で振れる)。

スキューは自由に推定する(5 自由度)。cv2.calibrateCamera はスキューを 0 に固定する。歪みのあるレンズでは、歪みを無視した閉形式のしわ寄せがスキューと主点に出る: 傾き 30 度・ k1=−0.18, k2=0.03 の 10 視点で skew −6.5 px、cx +8.2 px、fy +0.98 %(cv2 は歪み込みで fx −0.08 %、cx +0.15 px)。歪みなしでは skew 0.09 px と良い。スキュー 0 固定・歪み込みの cv2 相当の答えが要るなら、これを初期値に使う calib_lm.camera_calibration_lm (K のスキューは 0、歪み 5 係数と全姿勢を同時に詰める)を使う。

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie camera_calibration

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)

• camera_intrinsics_calibration — py -3.11 examples/camera_intrinsics_calibration.py

• lens_calibration_loop_demo — py -3.11 examples/lens_calibration_loop_demo.py

• poc_calibration_truth_map — py -3.11 examples/poc_calibration_truth_map.py

• poc_camera_calibration — py -3.11 examples/poc_camera_calibration.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

image_points_to_world_plane · contour_to_world_plane_xld · sim_caltab · disp_caltab · calibration_error_map · calibration_uncertainty_map · calibration_next_pose

Gleiche Kategorie (calibrate)

find_marks_and_pose · hand_eye_calibration · camera_calibration_lm · stereo_calibration_lm


*Provenance: calib.py — CALIB 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.