fullseye

register_mi — MATCHREG intensityreg op

使い方

(正規化)相互情報量を最大にする剛体 / 相似 / アフィンで moving を fixed に合わせる。→ table(kind="registration")。

撮像の違う組(可視と赤外、CT と MR、照明の向きの違う 2 枚)では明るさの対応が線形でも単調でも ないので、相関(:func:register_ecc)や SSD は使えない。相互情報量は「fixed の明るさを知ると moving の明るさがどれだけ当てられるか」なので、対応が一対一でなくても(折り返しがあっても) 合わせられる(Viola & Wells 1997、Maes et al. 1997)。既定の目的は重なりの大きさに鈍い正規化版 (H(A)+H(B))/H(A,B)(Studholme 1999、1〜2)。

同時ヒストグラムは fixed を硬いビン、moving を隣り合う 2 ビンへ線形に振り分け(変換のパラメータに 対して連続)、moving の外へ出た画素は数えない。最適化は Powell 法(微分を使わない)を粗から細の levels 段で。変数は回転・伸縮を画像の半径倍して画素の単位にそろえてある。

★:func:imgmetrics.mutual_information は指標(硬いビン 2 つ、ビットで返す)で、ここの目的関数は 振り分けのある別の推定量。合わせ終わった組を imgmetrics で測ると metric と少し違う。

Args: fixed: 基準の 2-D 画像。 moving: 合わせる 2-D 画像(撮像が違ってよい)。 model: :data:MI_MODELS。 bins: ヒストグラムのビン数(2 以上)。 metric: "nmi"(既定)/ "mi"(ビット)。 levels: ピラミッドの段数。None なら最も粗い段が 16 px 以上になる範囲で最大 3 段。 max_iter: 段ごとの Powell の反復の上限。 warp_init: 初期の変換(2×3 / 3×3、fixed → moving、射影の行は 0)。 min_overlap: 重なりの割合がこれ未満の変換は目的関数を最悪にする(外へ逃げる解を防ぐ)。

Returns: dict(kind="registration", method="mi")。鍵は :func:register_ecc と同じ。metric_name は "nmi" / "mi_bits"、加えて mi_bits / nmi(全解像の最後の値)。

Raises: ValueError: 画像が不正 / model / metric が違う / 引数が値域外 / 初期の変換が射影 / 合わせ終わっても重なりが min_overlap 未満。

詳しい使い方ガイド

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(table を入力に取れる)

features_match · ransac_homography · ransac_fundamental · registration_to_flow2d

同カテゴリ(intensityreg)

register_ecc · register_ffd · registration_to_flow2d · register_accuracy_map · register_capture_range


Provenance: intensityreg.py — MATCHREG operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

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