0

カラー画像のコンポーネント ラベル付けアルゴリズムを実装したいと思います。

(i,j) の現在のピクセルからの 4 つの近傍の色距離が計算され、アルゴリズムは次のように進みます。

  1. 事前定義されたしきい値 (T) よりも小さい色距離を持つ近傍がない場合、新しいラベルをピクセル (i,j) に割り当てます。

  2. 近傍の 1 つだけの色距離が T より小さい場合は、そのラベルをピクセル (i,j) に割り当てます。

  3. (a) 2 つ以上の近傍の色距離が T より小さい場合、(i,j) のピクセルには、色距離が最小のラベルが割り当てられます。

    (b) 色距離が最小のピクセルのラベルは、他の隣接ピクセルにも割り当てられます。

    (c) 他の隣接ピクセルのラベルと同じラベルを持つ画像内の以前にラベル付けされたすべてのピクセルは、最小の色距離を持つピクセルのラベルで再割り当てされます。

opencv ライブラリを使用して C++ でコードを実装したいと考えています。上記のアルゴリズムを実装するために使用できる最適なデータ構造は何ですか? std::map を使用して隣接距離の値を保存する必要がありますか?

また、いずれかの条件が満たされる場合 (1-3)、その対応するピクセルのラベルを現在のピクセル (i,j) に割り当てる必要があります。したがって、それがどの隣人のラベルであるか (つまり、左、上、左上の対角線、右上の対角線) も知る必要があります。どうすればそれを取得できますか?

4

2 に答える 2

0

このユースケースでは、ハッシュ テーブルが適切に機能します。

unordered_map<srcpixel,vector<pair<targetpixel,dist> > >

したがって、各 srcpixel はハッシュ テーブルへのキーとして機能し、値は隣接ピクセルからの距離を含むベクトルになります。

これは、各 srcpixel の O(1) ルックアップ時間と、その近隣の線形トラバーサルで高速になります。

于 2015-10-15T06:38:06.530 に答える