私は、Tim Cootes が 教科書と元の論文で説明した Active Shape Models アプローチに従いました。これまでのところ、すべてうまくいきました (Procrustes 分析、主成分分析、画像の前処理 (コントラスト、ノイズ))。フィッティング手順自体だけが収束していないようです。
教科書(p. 13) で説明されているように、グレーレベル構造アプローチの統計モデルを使用して、8 つの切歯のそれぞれと 40 のランドマークのそれぞれのフィッティング関数を作成します (したがって、合計で 320 の異なるフィッティング関数が作成されます)。k
8 本の切歯のそれぞれの 40 個のランドマークのそれぞれを介して、境界に垂直なプロファイルに沿って両側で5 (= ) ポイントをサンプリングすることにより、切歯ごとに。これらの関数は、マハラノビス距離 (教科書p. 14) と同じです。
フィッティング手順中m>k
、現在の歯の近似の 40 個のランドマークのそれぞれを通る境界に垂直なプロファイルに沿って、両側で 10 (= ) 点をサンプリングします。そのように2(m-k)+1
して、対応するフィッティング関数でサンプルを評価する必要があります。これらの各サンプルには、2k+1
ポイントの勾配値が含まれています。関数を最小化するサンプルが選択され、対応するランドマークがそれらの2k+1
点の中間点に配置されます。これは、40 のランドマークごとに行われます。これにより、歯の新しい (まだ検証されていない) 近似値が得られます。
画像座標フレームでのこの近似は、画像座標フレームでの歯のモデルと一致します。bi
次に、主成分分析の係数 ( ) が計算さ|bi|<3*sqrt(eigenvalue_i)
れ、モデルの形状から大きく逸脱しないようにチェックされます。係数 ( bi
) は必要に応じて制限され、画像座標フレームに変換して新しい反復を開始します。
左上の切歯を見つけたい画像を表示します。
反復 19 の画像座標フレームでの歯の近似値を含む勾配画像を示します。 (赤: 検証前 - 緑: 検証後) ご覧のとおり、最適解から少し離れています。
def create_gradient(img):
temp = cv2.Scharr(img, ddepth=-1, dx=1, dy=0)
return cv2.Scharr(temp, ddepth=-1, dx=0, dy=1)
反復 19 のモデル座標フレームの歯の近似を示します。 (青: モデル - 赤: 検証前 - 緑: 検証後) ご覧のとおり、まだモデルの形状に近づいています。
19 回の反復に対するモデル座標フレームでの歯の近似を示します。(青: モデル - 赤: 検証前 - 緑: 検証後) ご覧のとおり、これらすべての反復中、モデルの形状に近いままです。
そのため、(主成分分析によって保護された) 形状に近い状態を保ちますが、ランドマーク周辺の強度の挙動 (フィッティング関数によって保護された) には近くありません。