オブジェクトの抽出と使用

オブジェクトの抽出

メソッドを使用して、オブジェクトの抽出を実行します。

たとえば、ZMapの一部を無視したり、抽出プロセスを高速化したりするために、抽出をに制限できます。

抽出の処理速度は、以下に直接依存します:

ZMapまたはERegionのピクセル数。
セグメント化されたオブジェクトの数。
The computer features for each segmented object.

To speed up the extraction process:
- Adjust the extraction ranges to reduce the number of objects.
- Disable the features you do not need.

オーバーラップしたオブジェクト

デフォルトでは、抽出でZMapとオーバーラップするオブジェクトは生成されません。「スタック」オブジェクトを抽出するためにはを有効にする必要があります。

面積比高さ差異のパラメーターがオーバーラップしたオブジェクトがどのように抽出されるかをコントロールします:

面積比はで設定されます。ボトムオブジェクトの面積をトップオブジェクトで割った値がその比率と同等以上である必要があります。

オーバーラップした抽出が無効になっています。

オーバーラップした抽出が有効になっています、 = 4

オーバーラップした抽出が有効になっています、 = 4
トップオブジェクトが抽出するのに大きすぎます。面積比が4以下になっています。

高さ差異はで設定されます。トップオブジェクトとボトムオブジェクトの最小高さ差異を表します。

オーバーラップした抽出が有効になっています、 = 2
ボトムオブジェクト(グリーン)からトップオブジェクト(レッド)までの高さが小さすぎます。オブジェクトを抽出できません。

オーバーラップした抽出が有効になっています、 = 2
ボトムオブジェクトからトップオブジェクトまでの高さが2より大きいです。オブジェクトが抽出されています。

オブジェクト検出を制御する

2つのオプションパラメータがオブジェクトの検出に影響します:

SetExtractionSensitivityは、抽出の感度をコントロールします。
値が高いほど、周囲と混ざり合ったオブジェクトを検出する能力が高まります。グレイ値が背景に近い、またはオブジェクトと背景間のグラデーションがスムーズであるためです。
このパラメータ値の範囲は0~1です(デフォルト設定は0.6です)。

抽出感度:0.5(左)、0.8(右)

SetContourReinforceは、オブジェクトの抽出に影響します。
オブジェクトが互いに近すぎる、または接触している場合は抽出が失敗します。そのため、このパラメータはオブジェクト間の境界を明確にしてそのようなオブジェクトの抽出を可能にします。
フィルターが測定値に影響を与える場合があります。

輪郭の協調:オフ(左)、オン(右)

オブジェクトを使用する

メソッドは、設定基準を満たすのリストを作成します。

それぞれのは、内の関連付けられた3Dポイントの記述的な特徴の集合で、有向バウンディングボックス、その高さ、ボリューム(体積)などです。
関連付けられたメソッドを呼び出して、機能にアクセスします。
リストは、最小領域から最大領域にソートされます。
Use GetObjectsMask to get the mask of all the extracted E3DObjects.

以下のコードスニペットは、リストから機能を抽出する例を示しています。


                    // get the extracted objects and loop over them

std::vector<Easy3D::E3DObject> objects = extractor.GetObjects();
int nObjects = objects.size();
for (int index = 0; index < nObjects; ++index)
{
  // inspect bounding box dimensions
  E3DPoint bbCenter = objects[index].GetBoundingBox().GetCenter();
  float bbHeight = objects[index].GetBoundingBox().GetXSize();
  float bbLength = objects[index].GetBoundingBox().GetYSize();

  // inspect object plane and base plane
  Easy3D::E3DPlane opjPlane = objects[index].GetPlane();
  Easy3D::E3DPlane basePlane = objects[index].GetBasePlane();

  // inspect the ERegion that exactly contains the object
  ERegion objRegion = objects[index].GetRegion();
}

                    // get the extracted objects and loop over them
E3DObject[] objects = extractor.Objects;
int nObjects = objects.Length; 
for (int index = 0; index < nObjects; ++index) 
{
    // inspect bounding box dimensions 
    E3DPoint bbCenter = objects[index].BoundingBox.Center; 
    float bbHeight = objects[index].BoundingBox.XSize; 
    float bbLength = objects[index].BoundingBox.YSize; 

    // inspect object plane and base plane
    E3DPlane opjPlane = objects[index].Plane;
    E3DPlane basePlane = objects[index].BasePlane; 

    // inspect the ERegion that exactly contains the object 
    ERegion objRegion = objects[index].Region; 
} 

オブジェクトの視覚化

これらの機能の一部を2Dまたは3Dで視覚化するには:

メソッドを使用します。
またはにリストを送信します。

で、構造を使用してレンダリングスタイルを選択します

次のコードスニペットは、いくつかのオブジェクト機能を描画する方法を示しています:

2Dグラフィックコンテキストの場合:Drawing a 2D Feature from the List of E3DObjects

3Dビューアの場合:Drawing 3D Features from a List of E3DObjects