2

フォーム画像から特定のフィールド境界線をドロップアウトするシステムを作成しています。フィールドには、手書きがフィールドの境界を越えても正しく保持する必要がある書き込みが含まれている場合があります。

2 つの画像があります: 1 つのカラー画像 (HSV 色空間に変換) と 1 つの白黒画像 (これらはスキャナーによって生成されます)。

カラー画像の色を考慮して、白黒画像からフィールド境界ピクセルを削除 (摘み取り) したいと思います。

私は、フィールドの正確な位置と、フィールドの境界線の幅/高さをアプリオリに知っているという利点があります。

私の現在の実装は、(フィールドごとに)カラー画像のフィールド境界をスキャンし、そのフィールド境界の平均HSV値を計算することで構成されています(フィールド境界がどこにあるかを正確に知っているため、「フィールド境界」ピクセルのみにアクセスしますが、また、フィールドの境界を越える場合は、いくつかの手書きピクセルにアクセスすることもあります。これは、平均をあまり歪めないという考えによるものです)。フィールド境界の「平均」HSV 値を取得したら、フィールド境界を再度スキャンし、ピクセルごとに次のデルタ関数を計算します。

ここに画像の説明を入力

「現在の」ピクセルと平均 HSV の間のデルタ値が 0.07 未満 (経験的に判明) の場合は、ピクセルを白に設定し (色が互いに接近している)、それ以外の場合はピクセルを黒のままにします。

フィールドの例を次に示します。

カラー画像: ここに画像の説明を入力 白黒画像 非ドロップアウト: ここに画像の説明を入力 ドロップアウトされた白黒画像 式で彩度が使用されていない場合: ここに画像の説明を入力 実際のドロップアウトされた白黒画像 数式が完全に使用されている (H、S、および V の 3 つのコンポーネントすべてを使用) ここに画像の説明を入力

3番目のドロップアウト画像を取得するために使用している式は上記の式ですが、式から彩度を除外しました(私はちょうど物事をいじっていました)。
これは明らかに色の変化に対して十分に繊細ではありませんが、式は彩度の変化に非常に敏感です (これは主に、画像内に存在する JPEG 圧縮のアーティファクト (アーティファクトの例) によって引き起こされます)。

ここに画像の説明を入力

4 番目の例は、色の変化に非常に敏感であるため、手書きを削除する可能性が低いため、最適だと思いますが、問題は、単純なスキャンまたは圧縮アーティファクトによって生じるわずかな色の違いにより、境界線を拾いやすくなることです。 .

フィールドの境界内で発生する色 (彩度) の変動の一部を緩和するために、ヒストグラムを使用することについてどうお考えですか? ビンの数を減らすために量子化が含まれていますか?

私は人々が持っているアイデアを聞きたいです。

ありがとうございました。

4

2 に答える 2

0

ここであなたの優先事項を完全に理解しているかどうかはわかりません.3番目の画像は私にはかなり良く見えます(4番目よりもはるかに優れています). 最初の「S」の下に隙間があることに気付きました。

いずれにせよ、境界の位置を知っていて、それらのピクセルをスキャンしているので、それらの H、S、および V に関する統計をコンパイルすることをお勧めします。S と VI については、平均と標準偏差を計算するだけでよいとします。色相は、角度のラップアラウンドの性質と未定義の可能性があるため、よりトリッキーです。モード(またはウィンドウ加重モード)を量子化して見つけることができます。ボックスの白以外のコンテンツについても同じことを行うことができるため、ペンストロークとボックスのピクセルの性質を定量化できます。分布を狭めるには、x SD の範囲外にあるピクセルを外れ値として破棄し、平均と SD を再計算します。その時点から、ピクセルがどの確率分布内にあるかに基づいて単純に分類できます。

その最適化には次のものが含まれます。

  • 低彩度の H コンポーネントを無視します。
  • 不明な場合は、既知の国境の場所の近くにある場合は、国境に向かってバイアスをかけます。
  • 不明な場合は、既にペン ストロークとして分類されている隣接ピクセルがある場合は、ペン ストロークにバイアスをかける 2 番目のパスを実行します。
于 2013-05-01T02:19:53.200 に答える
0

この問題に機械学習の手法を適用すると、良い結果が得られる可能性があります。

たとえば、画像のすべてのピクセルにフィールドの境界線またはフィールドの境界線ではないラベルを付けたい場合は、いくつかの画像のピクセルに手動でラベルを付けて、一連の機能を計算することができます (現在は色のみを使用していますが、方向付けられた勾配もいくつかの良い結果をもたらす可能性があります)、すべてをサポート ベクター マシン (SVM) にダンプします。

OpenCV は、C++ または Python に精通している場合、SVM および勾配ベースの機能 (記述子) の実装を提供します。

あるいは、Matlab は、SVM をトレーニングし、勾配機能も計算するコードを提供します。

于 2013-04-25T18:01:54.183 に答える