ここで、単純な方法では本当に理解できない問題があります。たぶん、誰かがこれを別の角度から見るのを手伝ってくれるでしょう。基本的に、同じサイズの 2 つのx行列とy行列座標があります。最初のもの (マスク) には、-1 と 0 の 2 つの異なる値のみを持つピクセルが含まれます。2 番目のもの (ラベル) には、整数値 (1 から 1000) を持つピクセルを含めることができます。
この 2 つの行列の表現は次のとおりです。
- マスクは、さまざまなスーパーピクセルの輪郭を構成しているピクセルを表します。-1 の場合は境界上にあり、それ以外の場合は 0 です。
- ラベル マトリックスでは、各ラベルはスーパーピクセルを表し、各ピクセルは 1 つのスーパーピクセル ラベルに割り当てられます。
私の目標は、スーパーピクセルごとに、頂点を抽出する関連する凹面ポリゴンを作成する 2 つのマトリックスを結合することです。
これまでの私の解決策は次のとおりです。
- ディクショナリを作成します。キーはスーパーピクセルを表すラベルで、値はスーパーピクセルの輪郭のピクセルを含む配列です。
- ConvexHull を実行して、辞書の各キーの凸多角形を見つけます。
- 見つかった凸多角形ごとに、関連する凹多角形を検出するアルゴリズムを実行します ( https://github.com/sadaszewski/concaveman-cpp )。
残念ながら、結果が元のスーパーピクセルとは異なる可能性があるため、このソリューションでは十分に正確ではありません.
2 つの行列の簡単な例:
ラベル:
1 | 1 | 1 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 2 | 2 | 2 | 1 | 1 |
1 | 1 | 2 | 2 | 2 | 1 | 1 |
1 | 1 | 2 | 2 | 2 | 1 | 1 |
マスク:
-1 | -1 | -1 | -1 | -1 | -1 | -1 |
---|---|---|---|---|---|---|
-1 | -1 | 0 | 0 | 0 | 0 | -1 |
-1 | -1 | -1 | -1 | -1 | -1 | -1 |
-1 | -1 | -1 | -1 | -1 | -1 | -1 |
-1 | -1 | -1 | 0 | -1 | -1 | -1 |
-1 | -1 | -1 | -1 | -1 | -1 | -1 |
ご助力ありがとうございます!