6

文字がつながっている場合、どのようにセグメント化できますか? コンポーネントの数を見つけるために、距離変換(http://opencv-code.com/tutorials/count-and-segment-overlapping-objects-with-watershed-and-distance-transform/ )で流域を使用しようとしましたが、うまく機能しないようです。

  1. うまく機能させるには、オブジェクトをしきい値の後に分離する必要があります。

そうは言っても、どうすればキャラクターを効果的にセグメント化できますか?ヘルプ/アイデアが必要です。

少し繋がった 添付のとおり、バイナリ イメージの例です。

強く結びついた重くつながった例。

答え:

@mmgpこれは私のo / pです

血圧 o/p

4

3 に答える 3

8

ここには 2 つのアプローチがあると思います。1) 現在持っているこれらの画像につながった 2 値化ステップをやり直します。2) 画像サイズに基づいてさまざまな可能性を検討します。質問が与えられた場合、2 番目のアプローチに注目しましょう。

最小の画像では、2 つの数字のみが接続されており、これは 8 接続性を考慮した場合にのみ発生します。画像を 4-connected として処理する場合、分離する必要がある 2 つのコンポーネントが接続されていないため、何もする必要はありません。これを以下に示します。右の画像は、8連結性を考慮した場合にのみ、別のポイントと接続するポイントを見つけるだけで取得できます。この場合、そのような点は 2 つしかなく、それらを削除することで 2 つの数字「1」を切り離します。

ここに画像の説明を入力     ここに画像の説明を入力

あなたの他の画像では、これはもはや当てはまりません。そして、それを悪化させることなく小さな画像に適用できる簡単な方法はありません。しかし、実際には、バイナリ表現から移動しないように、最近傍による補間を使用して、両方の画像を共通のサイズに拡大することを検討できます。幅が 200 になるように両方の画像のサイズを変更し、縦横比を維持することで、次の形態学的手法を両方に適用できます。最初に間引きを行います。

ここに画像の説明を入力

ご覧のとおり、形態学的分岐点は数字を接続するものです (左端の数字「6」にも別の分岐点があり、これが処理されます)。これらの分岐点を抽出し、2*height+1 (高さは画像から取得) の垂直線でモルフォロジカル クロージングを適用できるため、ポイントがどこにあるかに関係なく、クロージングによって完全な垂直線が生成されます。あなたの画像はもうそれほど小さくはないので、この線は 1 ポイント幅である必要はありません。実際、私は 6 ポイント幅の線を考えました。いくつかの分岐点は水平方向に接近しているため、この閉鎖操作はそれらを同じ垂直線で結合します。分岐点が別の分岐点に近くない場合、侵食を実行すると垂直線が削除されます。そして、こうすることで、左の数字6に関する分岐点をなくします。これらの手順を適用すると、左の次の画像が得られます。そこから元の画像を差し引くと、右の画像が得られます。

ここに画像の説明を入力     ここに画像の説明を入力

これらの同じ手順を「8011」画像に適用すると、最初とまったく同じ画像で終了します。しかし、8 連結でのみ連結されている点を削除する単純な方法を適用すると、以前のように分離されたコンポーネントが得られるため、これはまだ良いことです。

于 2013-01-17T05:30:50.183 に答える
2

これには「塗り付けアルゴリズム」を使用するのが一般的です。ランレングス スムージング アルゴリズム (RLSA) とも呼ばれます。白黒画像をブロックに分割する方法です。ここでいくつかの情報を見つけるか、インターネットで調べてアルゴリズムの実装を見つけることができます。

于 2013-01-09T13:19:34.333 に答える
0

キャプチャの解決を手伝いたいかどうかはわかりませんが、erosionを使用するのが 1 つのアイデアです。処理するピクセル数によっては、文字を破壊することなく文字を十分に分離できる場合があります。これは、他のセグメンテーション アルゴリズムの前処理ステップとして使用するのが最適です。

于 2013-01-08T17:11:52.837 に答える