2016-07-11 20 views
1

の「囲まれた」領域を検出すると、白と黒の領域を持つB/W(バイナリ)イメージが得られます。今、私は完全に白で囲まれ、Image境界に触れないblacj領域を見つけて、floodfillしたいと思っています。バイナリイメージ

基本的にすべてのピクセル(すべての "境界"行/列)を反復している "brute-force"アプローチです。黒色を検出した場合は、訪問された ")、黒であれば再帰的に隣人に行く。そして私が白いピクセルだけを叩いて境界線で終わらないと、私はその領域をフラッドフィルします。 これは、高解像度の画像ではしばらく時間がかかることがあります。

これにはあまり複雑でない速い方法がありますか? ありがとうございます。

答えて

0

バイナリイメージがあるので、黒いコンポーネントの接続コンポーネントのラベル付けを実行できます。見つかったすべてのコンポーネントは白で囲まれています。次に、ボーダーに沿って移動して、ボーダーに接触するコンポーネントを見つけ、それらを削除します。

他のより単純で高速な解決策は、境界線に沿って進むことです。黒いピクセルが見つかると、元のピクセルに接するすべての黒いピクセルが白になるまで展開するシードを設定します。そうすることで、境界線に触れるすべての黒いピクセルが削除されます。境界線に触れない黒い成分だけが残ります。

+1

こんにちは、 アイデアありがとう!私はあなたの2番目の提案を使用し、それは完全に働いた。 – user6576329

0

ほとんどの黒い領域が境界線に触れていない場合、その逆を行うほうが高速です(しかし同様に複雑です)。

境界線から到達可能なピクセル(到達可能な意味は、黒いピクセルだけで境界線に到達することができます)。この後、全体の画像のパスを行います。黒く見えていないものは囲まれたエリアになります。

+0

こんにちは、 お返事ありがとうございます。私が正しく理解していれば、あなたの答えはFiReTiTの2番目の提案に似ています。両方を解決策としてマークしますが、1つしか動作せず、まだアップvoteできません! – user6576329

関連する問題