3

ビットマップ画像の領域からベクターグラフィックを生成しようとしていますが、現在のアルゴリズムはほとんどの場合機能しますが、いくつかの問題があり、非常に低速です。

ですから、これを効率的に行う方法の簡単なアルゴリズムやコード例をご存知でしょうか。

私の状況は単純です。いくつかの平らな均一な領域を持つビットマップ画像があります。これらの領域を、後でベクターグラフィックとして再作成するために使用できるポイントのセットに変換したいと思います。形状が重なることはありません。形状は常に囲まれ、常に1つの色(すべてのピクセルで同じRGB値)であるため、輪郭を決定するのは非常に簡単ですが、効率的に行うのは困難です。

編集:送信ボタンを押すのが早すぎました...

理想的には、.NETで機能するソリューションが必要ですが、擬似コードも適切に機能するはずです。たぶん、皆さんは画像操作に関するいくつかの優れたリソースを知っていますか?

もう一度編集:つまり、私が求めているのは、ベクトル化された画像自体ではなく、画像内の各領域を表す点またはベクトルのリストを提供するアルゴリズムまたはライブラリです。

4

5 に答える 5

4

オブジェクトは別個のものであるため、連結成分のラベル付けのためのアルゴリズムを実行できます。ウィキペディアの記事は最初は問題ありませんが、なぜマルチパスアルゴリズムに集中しているのかわかりませんが、1パスで十分に機能します。接続されたコンポーネントを見つけている間、アウトラインを表すためにいくつかのデータ構造を維持する必要があります。オブジェクトが単純であることがわかっている場合(たとえば、軸からの法線角度の長方形、または円)、表現は非常に単純である可能性があります。それらが一般的な形状である場合は、より複雑な曲線表現が必要になります。(「U」または「O」の形のようなトリッキーなオブジェクトに注意してください。)

于 2009-02-02T22:29:21.590 に答える
3

私はこの分野での経験がないので、おそらく使用できる最悪のアルゴリズムについて説明します。うまくいけば、この質問に合格する可能性のある他の人が私の答えに激怒し、利用可能なより良いアルゴリズムのいくつかを提供してくれることを願っています.今日のアルゴリズム。

フラッド フィル アルゴリズムを実行して各ブロブのエッジを見つけ、各ブロブの各エッジ ポイントのベクトルを使用してポリゴンを作成します。これにより、ブロブを囲むピクセルと同じ数のコーナーを持つポリゴンが得られます。

次に、たとえば、同じ線上にある一連のベクトルを取り、すべての中間点を削除するポリゴン単純化ルーチンを調べます。

フラッド フィルも完全に必要というわけではありません。現在のピクセルから隣接するピクセルを検索し (8 つの隣接ピクセルがあります)、右側のエッジ フォローイングを使用してポリゴン ポイントを設定します。

非常に優れた単純化ルーチンを取得しない限り、ポリゴンは非常に複雑になりますが、比較的高速である必要があります。

-アダム

于 2009-02-02T22:37:01.450 に答える
1

少しからかって、固定観念にとらわれずに考えるために、モーション検出を使用してこれを試してみましたが、かなり成功しました。3つの円が入った白い写真がありました。

この Web カメラ モーション検出プログラム ( http://www.codeproject.com/KB/audio-video/Motion_Detection.aspx ) のソースを使用して、3 つの円すべての領域を取得し、それらを簡単にマッピングできました。モーション検出ルーチンに画像を 2 回送り、そのうちの 1 つで画像を少し右に押しました。使用する検出アルゴリズムに応じて、さまざまな詳細レベルを持つことができます (下の例の図に示すように)。

すべての信用は、モーション検出プログラムの作成者であるアンドリュー・キリロフに帰します。

代替テキスト

代替テキスト

于 2009-02-02T23:07:29.983 に答える
0

このホワイト ペーパーでは、いくつかの一般的な手法を比較します。アルゴリズムは単純とは言えませんが、処理は徹底しています。

于 2011-10-07T06:38:08.250 に答える