Main Content

objectDetection

単一オブジェクトの検出のレポート

説明

objectDetection オブジェクトには、単一のオブジェクトについてセンサーによって取得されたオブジェクト検出レポートが含まれます。multiObjectTracker などのトラッカーへの入力として objectDetection の出力を使用できます。

作成

説明

detection = objectDetection(time,measurement) は、指定した measurement の指定した time にオブジェクト detection を作成します。

ヒント

空の objectDetection オブジェクトを作成するには、objectDetection.empty() を使用します。

detection = objectDetection(___,Name,Value) は、1 つ以上の Name,Value ペア引数として指定されたプロパティを使用して detection オブジェクトを作成します。指定されていないプロパティはすべて既定値になります。Name,Value ペアを使用して Time プロパティと Measurement プロパティを指定することはできません。

入力引数

すべて展開する

検出時間。非負の実数スカラーとして指定します。この引数は Time プロパティを設定します。

オブジェクト測定。実数値 N 要素ベクトルとして指定します。ここで、N は測定ベクトルの次元です。この引数は Measurement プロパティを設定します。

カスタムのフィルター初期化関数で objectDetection を使用する場合、フィルター定義を満たしている限り、測定を任意の形式で定義できます。

initcvekf などの組み込みのフィルター初期化関数で objectDetection を使用する場合、測定の定義は次のルールに従います。

  • 直交座標系での完全な 3 次元位置測定では、一般的な形式は [x y z] です。速度測定を [x y z vx vy vz] として含める場合は、MeasurementParameters プロパティの HasVelocity フィールドを true として指定する必要があります。

    メモ

    initcvkf などの一部のフィルター初期化関数では、x の形式の 1 次元測定または [x y] の形式の 2 次元測定を受け入れることができます。

  • 球面座標系での測定を指定するには、MeasurementParameters プロパティの Frame フィールドが "Spherical" でなければなりません。完全な 3 次元球面測定では、一般的な形式は [[azimuth elevation range rangeRate]] です。このような 3 次元球面測定をフィルターによって解釈するには、MeasurementParameters プロパティの HasAzimuthHasElevationHasRange、および HasVelocity の各フィールドをすべて true として指定します。

    • 完全な 3 次元球面測定から azimuth を削除するには、HasAzimuthfalse に設定します。

    • 完全な 3 次元球面測定から elevation を削除するには、HasElevationfalse に設定します。

    • 完全な 3 次元球面測定から range を削除するには、HasRangefalse に設定します。

    • 完全な 3 次元球面測定から rangeRate を削除するには、HasVelocityfalse に設定します。

詳細については、Convert Detections to objectDetection FormatおよびobjectDetection を使用した追跡フィルターの初期化の例を参照してください。

出力引数

すべて展開する

単一のオブジェクトの検出レポート。objectDetection オブジェクトとして返されます。objectDetection オブジェクトには次のプロパティが含まれます。

プロパティ定義
Time測定時間
Measurementオブジェクト測定
MeasurementNoise測定ノイズ共分散行列
SensorIndexセンサーの一意の ID
ObjectClassIDオブジェクト分類
MeasurementParameters非線形カルマン追跡フィルターの初期化関数で使用されるパラメーター
ObjectAttributesトラッカーに渡される追加情報

プロパティ

すべて展開する

検出時間。非負の実数スカラーとして指定します。このプロパティを名前と値のペアとして設定することはできません。代わりに time 入力引数を使用してください。

例: 5.0

データ型: double

オブジェクト測定。実数値 N 要素ベクトルとして指定します。このプロパティを名前と値のペアとして設定することはできません。代わりに measurement 入力引数を使用してください。

例: [1.0;-3.4]

データ型: double | single

測定ノイズ共分散。スカラーまたは実数の半正定値の N 行 N 列の対称行列として指定します。N は測定ベクトルの要素数です。スカラーの場合、行列は、測定と同じデータ解釈をもつ N 行 N 列の正方対角行列になります。

例: [5.0,1.0;1.0,10.0]

データ型: double | single

センサー識別子。正の整数として指定します。センサー識別子により、各種センサーを識別できます。この識別子はセンサーに対して一意でなければなりません。

例: 5

データ型: double

オブジェクト クラス識別子。非負の整数として指定します。このプロパティを使用して、異なる種類のオブジェクトから生成される検出値を区別します。たとえば、タイプが "car" のオブジェクトに 1、タイプが "pedestrian" のオブジェクトに 2 を使用します。値 0 は、オブジェクトの型が不明であることを示します。

このプロパティを非ゼロの整数に指定した場合、ObjectClassParameters プロパティを使用して検出分類器の統計を指定できます。

例: 1

データ型: double

検出分類器のパラメーター。構造体として指定します。構造体には任意のフィールドを含めることができます。trackerGNN (Sensor Fusion and Tracking Toolbox) System object などのマルチオブジェクト トラッカーによる分類器の融合については、ConfusionMatrix フィールドを次のように指定できます。

フィールド名説明
ConfusionMatrix

検出分類器の混同行列。N 行 N 列の実数値行列として指定します。ここで、N は可能なオブジェクト クラスの数です。行列の (i,j) 要素は、真の検出クラスがクラス i の場合に、分類器が検出値をクラス j と分類する重みまたは確率を表します。

たとえば、分類器が 2 つのクラスを出力し、その際に 95% は正しく分類される場合、この行列を [0.95 0.05; 0.05 0.95] に指定します。

データ型: struct

フィルター状態から測定に変換する測定関数パラメーター。構造体配列、構造体配列が含まれた cell、または cell 配列として指定します。

カスタムの測定関数を追跡フィルターで使用する場合、カスタムの測定関数の定義を満たしている限り、測定を任意の形式で定義できます。

cvmeasctmeas などの組み込みの測定関数を追跡フィルターで使用する場合、次のフィールドをもつ構造体を使用して、直交座標系または球面座標系での測定を定義できます。

フィールド説明
Frame

測定のレポートに使用される座標系。以下のいずれかの値として指定します。

  • 'Rectangular' — 検出は直交座標でレポートされます。

  • 'Spherical' — 検出は球面座標でレポートされます。

ヒント

Simulink では文字ベクトルなどの可変サイズ変数をサポートしていないため、オブジェクト検出バスを作成するときは、fusionCoordinateFrameType.Rectangular または fusionCoordinateFrameType.Spherical の列挙オブジェクトとして Frame を指定します。

'spherical'
OriginPosition親座標系を基準とした座標系の原点の位置オフセット。[x y z] 実数値ベクトルとして指定します。[0 0 0]
OriginVelocity親座標系を基準とした座標系の原点の速度オフセット。[vx vy vz] 実数値ベクトルとして指定します。[0 0 0]
Orientation座標系回転行列。3 行 3 列の実数値正規直交行列として指定します。[1 0 0; 0 1 0; 0 0 1]
HasAzimuth

方位角を測定に含めるかどうかを示す logical スカラー。

このフィールドは、Frame フィールドが 'Rectangular' の場合は関連しません。

1
HasElevation仰角情報を測定に含めるかどうかを示す logical スカラー。直交座標系でレポートされる測定では、HasElevation が false の場合、レポートされる測定では仰角が 0 度と見なされます。1
HasRange

範囲を測定に含めるかどうかを示す logical スカラー。

このフィールドは、Frame'Rectangular' の場合は関連しません。

1
HasVelocityレポートされる検出に速度測定を含めるかどうかを示す logical スカラー。直交座標系でレポートされる測定では、HasVelocityfalse の場合、測定は [x y z] としてレポートされます。HasVelocitytrue の場合、測定は [x y z vx vy vz] としてレポートされます。球面座標系でレポートされる測定では、HasVelocitytrue の場合、測定には範囲率情報が含まれます。1
IsParentToChildOrientation で親座標系から子座標系への座標系の回転を実行するかどうかを示す logical スカラー。IsParentToChildfalse の場合、Orientation は子座標系から親座標系への座標系の回転を実行します。0

MeasurementParameters の使用の詳細については、次の例を参照してください。

トラッカーを介して渡すオブジェクト属性。cell 配列または構造体配列として指定します。これらの属性は、multiObjectTracker の出力に追加されますが、トラッカーでは使用されません。

例: {[10,20,50,100],'radar1'}

例: struct('myProperty',2)

すべて折りたたむ

位置測定から検出を作成します。直交座標の [100;250;10] の位置測定から 1 秒のタイムスタンプにおいて検出を行います。

detection = objectDetection(1,[100;250;10])
detection = 
  objectDetection with properties:

                     Time: 1
              Measurement: [3x1 double]
         MeasurementNoise: [3x3 double]
              SensorIndex: 1
            ObjectClassID: 0
    ObjectClassParameters: []
    MeasurementParameters: {}
         ObjectAttributes: {}

特定の時間および位置測定から objectDetection を作成します。[100;250;10] のオブジェクト位置測定について 1 秒の時間において検出を行います。測定ノイズを追加し、名前と値のペアを使用してその他のプロパティを設定します。

detection = objectDetection(1,[100;250;10],'MeasurementNoise',10, ...
    'SensorIndex',1,'ObjectAttributes',{'Example object',5})
detection = 
  objectDetection with properties:

                     Time: 1
              Measurement: [3x1 double]
         MeasurementNoise: [3x3 double]
              SensorIndex: 1
            ObjectClassID: 0
    ObjectClassParameters: []
    MeasurementParameters: {}
         ObjectAttributes: {'Example object'  [5]}

objectDetection オブジェクトを使用して追跡フィルターを初期化できます。

直行の検出による等速 trackingKF の初期化

等速モデルをもつ trackingKF オブジェクトを初期化するには、関数 initcvkf を使用します。

2 次元オブジェクトの検出を作成し、この検出を使用して trackingKF オブジェクトを初期化します。

detection = objectDetection(0,[1 2]);
filter = initcvkf(detection);
filter.State' 
ans = 1×4

     1     0     2     0

結果では、関数 initcvkf はシステムの次元を認識し、速度の状態 vx および vy0 に設定して、状態が [x vx y vy] の 2 次元フィルターを初期化しています。

3 次元オブジェクトの検出を使用して、3 次元 trackingKF オブジェクトを初期化することもできます。

detection = objectDetection(0,[1 2 3]);
filter = initcvkf(detection);
filter.State'
ans = 1×6

     1     0     2     0     3     0

結果では、関数 initcvkf は状態が [x vx y vy z vz] の 3 次元フィルターを初期化しています。

直行の検出による等速 trackingEKF の初期化

等速モデルをもつ trackingEKF オブジェクトを初期化するには、関数 initcvekf を使用します。関数 initcvekf では、検出が 3 次元である必要があり、常に 3 次元 trackingEKF オブジェクトを初期化します。

3 次元オブジェクトの検出を作成し、この検出を使用して trackingEKF オブジェクトを初期化します。

detection = objectDetection(0,[1 2 3]);
filter = initcvekf(detection);
filter.State' % [x vx y vy z vz]
ans = 1×6

     1     0     2     0     3     0

結果では、関数は速度が指定されていない場合にゼロを想定しています。速度情報を検出の測定に含めることもできます。HasVelocity フィールドを true に設定することで、測定パラメーターを使用して関数 initcvekf に速度状態を認識させます。

mp = struct(Frame="Rectangular", ...
    OriginPosition = zeros(1,3), ...
    OriginVelocity = zeros(1,3), ...
    Orientation = eye(3),...
    HasVelocity = true,...
    IsParentToChild = true);
detection = objectDetection(0,[1 2 3 0.1 0.2 0.3], ...
    MeasurementParameters=mp);
filter = initcvekf(detection);
filter.State' % [x vx y vy z vz]
ans = 1×6

    1.0000    0.1000    2.0000    0.2000    3.0000    0.3000

結果では、関数は速度を正常に初期化しています。

球面の検出による等速 trackingEKF の初期化

球面の検出を使用して trackingEKF オブジェクトを初期化することもできます。まず、45 度の方位角、60 度の仰角、および 2 メートルの範囲で、球面の検出を作成します。測定の形式を表すように、その測定パラメーターを指定します。

mp = struct(Frame="Spherical", ...
    OriginPosition = zeros(1,3), ...
    OriginVelocity = zeros(1,3), ...
    Orientation = eye(3),...
    HasAzimuth = true,...
    HasElevation = true,...
    HasRange = true,...
    HasVelocity = false,...
    IsParentToChild = true);
detection = objectDetection(0,[45 60 2], ...
    MeasurementParameters=mp);
filter = initcvekf(detection);
filter.State' % [x vx y vy z vz]
ans = 1×6

    0.7071         0    0.7071         0    1.7321         0

結果では、フィルターの状態は予想どおりであり、位置座標は [22 22 3] となっています。

測定パラメーターの HasVelocity フィールドを true に設定することで、範囲率の測定を有効にすることもできます。その後、検出の範囲率を 0.2 メートル/秒に設定します。

mp = struct(Frame="Spherical", ...
    OriginPosition = zeros(1,3), ...
    OriginVelocity = zeros(1,3), ...
    Orientation = eye(3),...
    HasAzimuth = true,...
    HasElevation = true,...
    HasRange = true,...
    HasVelocity = true,...
    IsParentToChild = true);
detection = objectDetection(0,[45 60 2 0.2], ...
    MeasurementParameters=mp);
filter = initcvekf(detection);
filter.State' % [x vx y vy z vz]
ans = 1×6

    0.7071    0.0707    0.7071    0.0707    1.7321    0.1732

結果では、関数は予想された速度でフィルターを初期化しています。

拡張機能

バージョン履歴

R2017a で導入

すべて展開する