オブジェクトの抽出と使用
たとえば、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グラフィックコンテキストの場合:Drawing a 2D Feature from the List of E3DObjects |
□ | 3Dビューアの場合:Drawing 3D Features from a List of E3DObjects |