問題タブ [flood-fill]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
11635 参照

python - 領域成長アルゴリズム

こんにちは、みなさん。私はこれでロジックを理解するのに本当に苦労していて、あなたが私を助けてくれることを望んでいました. 先に進む前に、私はアマチュア プログラマーであり、正式なコンピューター サイエンスのトレーニングを受けていない初心者であることをお伝えしたいと思います。ご容赦ください。:D また、私は Python を使用していますが、Java などを使用することもできます。

とにかく、初歩的な Drawbot で使用する Region Growing の実装を検討しています。地域の拡大に関する記事は次のとおりです: http://en.wikipedia.org/wiki/Region_growing

私が思い描く方法では、抽選の基になる画像は次の基準を満たします。

  • 画像は、任意の色深度で最大 3x3 インチのサイズになります

  • 画像は、白い背景に黒い連続した形になります

  • 形状は、背景のどこにでも配置できます。

この問題に対する次の解決策を検討しました。ある程度機能するものもありますが、それぞれのパフォーマンスまたは実現可能性にかなりの欠陥があります (少なくとも、私には実行可能ではないようです)。さらに、これは Drawbot であるため、これは 1 つの連続した線で行う必要があります。ただし、これは後戻りできないという意味ではなく、複数の開始点 (シード) の可能性を排除するだけです。

考慮されるアプローチ:

ランダムウォーク:

この問題をランダム ウォークで解決することは、私の最初の本能でした。これを実現するランダム ウォーク プログラムは、次のようになると思います。

疑似パイソン...

これは実現可能だと思いますが、非常に効果がないように思われ、良い結果を保証するものではありませんが、実際に何かを成し遂げるために、これを試すことになるかもしれません...疑似コードの私のロジックは漠然と正しいですか? ?

掃引パターン:

私には、この方法が最も簡単に実装できるように思えました。ここでの私の考えは、形状の 1 つの極値 (たとえば、一番左の一番下の点) で開始点を選択できるということです。そこから右に描画し、白いピクセルに到達するまで x 軸上でのみ移動します。ここから、y 軸で 1 ピクセル上に移動し、次に x 軸で白いピクセルに到達するまで左に移動します。真上のピクセルがたまたま白だった場合は、その上に黒いピクセルが見つかるまで x 軸をバックトラックします。

さらに調べてみると、この方法にはいくつかの大きな欠点があります。このような形状に直面した場合:

図1

結果は次のようになります。

図2

そして、しばらくしてからスイープを開始するように指示しても、中足はまだ見落とされます。

4/8 コネクテッド ネイバーフッド:

http://en.wikipedia.org/wiki/8-connected_neighborhood

この方法は私には最も強力で効果的であるように見えますが、現時点では完全には理解できません。

すべてのセルで、隣接する黒いセルを見て、どのセルを最初に訪問するかをランク付けする方法を考案し、それらすべてを訪問し、すべてのセルがカバーされるまでプロセスを繰り返します。

ここで見られる問題は、まず、これを達成するために必要なデータ構造を処理することと、その背後にあるロジックを理解することです。


これらは私が考えることができた最良の解決策です。時間を割いて読んでいただきありがとうございます。長いことは承知していますが、できるだけ明確にする必要があると思いました。すべての提案は大歓迎です...ありがとう!

編集:

迷路の生成と解決のアルゴリズムも調べましたが、ここでそれを実装する方法がわかりませんでした。迷路を解くアルゴリズムについての私の理解では、それらは迷路の通路が同じ幅であることに依存しているということです。もちろん、私はそれについて間違っている可能性があります。

0 投票する
3 に答える
4000 参照

actionscript-3 - Vector graphics flood fill algorithms?

I am working on a simple drawing application, and i need an algorithm to make flood fills.
The user workflow will look like this (similar to Flash CS, just more simpler):

  1. the user draws straight lines on the workspace. These are treated as vectors, and can be selected and moved after they are drawn.
  2. user selects the fill tool, and clicks on the drawing area. If the area is surrounded by lines in every direction a fill is applied to the area.

if the lines are moved after the fill is applied, the area of fill is changed accordingly.

Anyone has a nice idea, how to implement such algorithm? The main task is basically to determine the line segments surrounding a point. (and storing this information somehow, incase the lines are moved)

EDIT: an explanation image: (there can be other lines of course in the canvas, that do not matter for the fill algorithm)

enter image description here

EDIT2: a more difficult situation:

enter image description here

EDIT3: I have found a way to fill polygons with holes http://alienryderflex.com/polygon_fill/ , now the main question is, how do i find my polygons?

0 投票する
2 に答える
1344 参照

iphone - iPad でのフラッド フィルが遅すぎる

iPad の塗り絵アプリの 1 つにフラッド フィリングを使用しています。

このアプリは基本的に、画像の黒い線の内側を色で塗りつぶします。私はこれを問題なく行うことができますが、遅すぎます。

最初に再帰フラッド フィルを使用しましたが、パフォーマンスが最悪でした (スタック オーバーフローのため)。次に、次のコードでスタックを使用して反復に変換できましたが、これは遅すぎます。

iPad デバイスで最適に動作する別の方法を提案する人はいますか?

0 投票する
2 に答える
786 参照

c++ - c++フラッドフィルアルゴリズムの最終エラー

塗りつぶしアルゴリズムはほぼ完成していますが、どこかに小さなエラーがあり、デバッグに約3時間費やしましたが、見つからないようです。

注:読み込むときは、0から15までの数字を使用して壁を定義します

1=上2=右4=下8=左(つまり、13は上/下/左の壁があることを意味します)

私のプログラム:

  • フィールド数を読み込んで最大の部屋を計算します(したがって、以下のすべてはフィールド数に対して繰り返されるサイクルです)。

  • 次に、部屋の寸法を取得します

  • これで、クラスフィールドに、周囲の壁(左から右下)と16未満の値を格納するオブジェクトの配列(セル)が作成されます。

  • ここで問題が発生すると思います。std::cinを介して値を読み取ります。

  • そして、すべてが読み込まれると、空(0)をスキャンして部屋を作成し、その周りの利用可能なスペースをチェックします(ウォールチェックを使用)

  • そして最後に最大値を返し、完了です。

私が使用する入力:

つまり、どこか、壁のチェック、またはオブジェクトセルの作成で何かがうまくいかないということです(私は思います)

これが私のスクリプトです。このようなばかげた質問をしなければならないのは残念です。

前もって感謝します

0 投票する
4 に答える
5322 参照

c++ - バイナリ イメージを塗りつぶすための C++ アルゴリズム

バイナリ イメージ (1 とゼロの 2D マトリックス) を塗りつぶすための matlab 関数 "imfill" をシミュレートしようとしています。

マトリックスの開始点を指定したいのですが、imfill の 4 つの接続バージョンのように塗りつぶします。

これは C++ の世界のどこかに既に存在しますか? そうでない場合、これを実装する最も効率的な方法は何ですか?

0 投票する
2 に答える
1510 参照

delphi - Delphi - グラデーションでフラッドフィル?

D2007 で Canvas.FloodFill を使用して、カスタム形状のオブジェクトをグラデーション カラーで塗りつぶす方法はありますか。白からボーダーカラーへ。有用なものをグーグルで検索できませんでした。

または、カスタム形状のオブジェクトをグラデーション色で塗りつぶす他の方法はありますか?

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

0 投票する
1 に答える
1054 参照

jquery - jQuery フラッド フィル アルゴリズム

jQuery を使用してテーブル セルのフラッド フィル アルゴリズムを実行するにはどうすればよいですか?

現在、ユーザーが表のセルをクリックすると、それが空の場合、隣接するセルが表示されます。それを機能させるために私が見つけた1つの方法は、隣接する正方形のそれぞれに対してコードを繰り返し(コードのこの部分をコメントアウトしました)、コードを繰り返し、コードを繰り返すことでした...ただし、応答しなくなりました.

私は jQuery で最小スイーパー ゲームを作成しようとしています。これを実装する方法はわかりませんが、フラッド フィル アルゴリズムについて言及した人がいます。

0 投票する
1 に答える
1140 参照

graphics - アンチエイリアスされた線の周りにフリンジを残さずにアルファを考慮に入れるフラッドフィルアルゴリズム?

私は典型的なフラッドフィルアルゴリズムを実装しましたが、ARGBコンポーネント間のユークリッド距離を使用して色を比較する場合、単色を使用すると期待どおりに機能します。

私の問題は、透明な背景にアンチエイリアス処理された赤い線のようなものを描画すると、フラッドフィルアルゴリズムがほとんどの半透明のピクセルを塗りつぶさず、オブジェクトの周りにフリンジが残ることです。特にこの例では、線の中心は赤一色(つまり、ARGB形式では(255、255、0、0))であり、線のフリンジも赤一色ですが、これらのピクセルのアルファは1%アルファまでの範囲です。 (つまり、(1、255、0、0))。一般的には、アンチエイリアス処理された円の輪郭を描画できるようにし、中央に塗りつぶしを塗りつぶし、フリンジを残さないようにします。

色を比較するためにどの関数を使用しますか、および/またはそのようなフリンジがオブジェクトの周りに残らないようにフラッドフィルアルゴリズムをどのように適応させるのですか?

アルファが90%未満の場合、常にピクセルを塗りつぶすようにアルゴリズムに指示してみました。これは問題ないように見えることもありますが、かすかな線を塗りつぶすにはあまりにも積極的です。

編集:これがどのように見えるかを詳しく説明するために、0-5が0、20、40、60、80、および100%アルファの赤いピクセルを表す場合、アンチエイリアスされた赤い線の画像は次のようになります。

0 0 0 0 0 0 0

0 0 0 3 0 0 0

0 0 3 5 3 0 0

0 0 3 5 3 0 0

0 0 3 5 3 0 0

0 0 0 3 0 0 0

0 0 0 0 0 0 0

左上隅を赤で塗りつぶす現在のフラッドフィルアルゴリズムは、すべての0を5に置き換えます。残りの3は、線の周りに見苦しいハローを形成します。

0 投票する
1 に答える
1871 参照

java - 画像塗りつぶし後の色の違い

ここ Stack Overflow で見つけた画像フラッド フィルで遊んでいます。

コードは問題ないと思います。あなたがより良いものを持っているなら、私は見てうれしいです(または、このタイプの画像操作を備えたライブラリを知っていればさらに良いです).

私の問題は、この画像でアルゴリズムを実行した後、男のヘルメットが緑ではなく薄い灰色になることです。

ペイントで作成されたばかげた例で試してみましたが、正常に動作します。したがって、アルゴリズムで設定したrgb値を変更する画像設定またはそのようなものが必要だと思います。

コードに何を設定する必要があるかについて何か提案はありますか (以下を参照してください)。

これは私がテストで使用している画像です。テストで使用している画像.

0 投票する
2 に答える
1634 参照

c++ - 3次元ポリゴンの塗りつぶし

ここに問題があります;)

1 と 0 で満たされた 3 次元配列があります。1 は 3 次元の複雑な多角形 (単純な多角形ではない) を表します。ポリゴンの境界のみが値 1 を持ち、内部は 0 で埋められます。ここに問題があります:

これらのポリゴンを 1 で塗りつぶす高速アルゴリズムが必要です。配列の次元は通常、約です。512×512×100。

前もって感謝します!

2d での例を次に示します。

0000111110000
0000100010000
0000100010000
0000111110000

結果として

0000111110000
0000111110000
0000111110000
0000111110000


これは @Mikolas アルゴリズムの正しい 3 次元ソリューションですか?

}

よろしくお願いします、

ステフ