5.8. フラッドフィルと検出グリフ¶
このセクションの冒頭の幾何学的プリミティブは、アプリケーションがすでに知っている位置にマークを置きます。画像合成は1つの画像を別の画像の上に重ねます。最後の小さな描画メソッド群は別のことをします。それらは、画像内にすでにあるもの、あるいは何らかの先行アルゴリズムがその中で見つけたものに形が依存するマークを置きます。
5.8.1. フラッドフィル¶
flood_fill() は単一のピクセル(シード)から開始し、外側へと成長していき、シードに十分似ていてかつ他の類似ピクセルの連鎖を通じてシードと接続しているすべてのピクセルを塗ります。結果として得られるのは、その境界が呼び出しに渡されたものではなく画像自体によって決まる、塗りつぶされた領域です。
最も単純な形式は、シードの座標と塗りつぶす色を取ります。
img.flood_fill(x=160, y=120, color=(0, 255, 0))
2つのしきい値パラメータが、塗りつぶしがどれだけ積極的に成長するかを制御します。seed_threshold(0.0 から 1.0 までの正規化された比率)は、ピクセルが元のシードの値からどれだけ異なっていても含めるかを設定します。floating_threshold は、すでに含まれている各隣接ピクセルからどれだけ異なっていてもよいかを設定します。2つのしきい値は協調して働きます。寛容な floating_threshold は塗りつぶしが画像を横切るグラデーションに沿うことを許し、一方で厳しい seed_threshold は、そのグラデーションに沿ってもシードの値から離れすぎないようにします。
いくつかのフラグが結果をさらに調整します。
invert=Trueは、一致するピクセルそのものではなく、一致しないすべてのピクセル(一致領域の補集合)を塗ります。clear_background=Trueは塗りつぶし領域の外側のすべてのピクセルをゼロにします。塗りつぶされた領域だけをマスクとして抽出するのに便利です。maskキーワードは通常の意味を持ちます。マスクでオフになっているピクセルは、そうでなければ塗りつぶしが到達したであろうかどうかに関わらず、そのまま残されます。
フラッドフィルは2つのパターンで最も有用です。1つ目は、何らかの領域検出器が見つけたものを可視化することで、検出された領域を独特の色で塗りつぶしてフレームの他の部分に対して際立たせます。2つ目は、領域自体を抽出することで、clear_background=True を領域内の既知のシードと組み合わせ、結果として得られる画像を後続の操作のためのマスクとして読み取ります。
5.8.2. 検出結果の描画¶
画像処理アルゴリズムはしばしば、位置と何らかの追加構造の両方を持つ結果オブジェクトを返します。向きを持つキーポイント、バウンディングボックスとは別個の重心を持つ顔検出、4つの角点を持つAprilTagなどです。それらをうまく描画すること(バウンディングボックスだけでなく構造を捉えるグリフで)は十分に繰り返し現れるパターンなので、モジュールはそのために2つのヘルパーを公開しています。
draw_keypoints() は、特徴抽出器が返したキーポイントディスクリプタ、または (x, y, rotation) のタプルの単純なリストのいずれかを取り、各点に小さなグリフを描画します。グリフは位置と向きの両方を表します。点の周りの円に加え、回転を示す中心から出る線です。その1回の呼び出しによる可視化は、キーポイント抽出器がアプリケーションの期待する向きを返しているかを確認する最も簡単な方法です。
draw_detection() は6要素のタプル (rx, ry, rw, rh, cx, cy)(バウンディング矩形に加え別個に報告される重心)を取り、両方を一度に描画します。バウンディングボックスの周りの矩形、重心の十字、そしてオプションで矩形の角にテキストラベルです。この形式は、重心がバウンディングボックスの中心よりも正確な位置となる、ニューラルネットワークの検出やテンプレートトラッカーが通常報告するものに一致します。
どちらのグリフメソッドも、このセクションの冒頭の幾何学的プリミティブの上にある便利なレイヤーです。アプリケーションは、draw_rectangle()、draw_circle()、draw_cross()、draw_string() を直接呼び出すことで、いつでも同じ可視化を再現できます。グリフメソッドは、何度も繰り返し現れるパターンのための手間を省くだけです。
既知の幾何形状のための幾何学的プリミティブ、オーバーレイのための画像合成、画像由来の領域のためのフラッドフィル、そして標準的な可視化パターンのための検出グリフがそろい、描画ツールキットは完成です。アルゴリズムの出力を可視化するためにアプリケーションが必要とするものは何であれ、それを表面に置くメソッドが用意されています。