www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱matlab程序源码 > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I4_08_3_video_measurement.m

    function lhood = video_measurement(pf, x_k_hat, z_k)
% 各粒子の尤度を返す
%   x_k_hat (N-by-6) : 予測ステップで予測された、各粒子の状態ベクトル
%   z_k (1-by-2) : correctの第2引数 => 検出されたボールの位置

% 状態ベクトル = [x, xd, xdd, y, yd, ydd]
N = pf.NumParticles;    % 粒子数

% 観測エラー
measurementNoise = ...
    [25  0; 
      0 25];
  
% 観測行列:座標xとyを測定
measurementModel = ...
    [1 0 0 0 0 0;
     0 0 0 1 0 0];

% 予測された全粒子の状態ベクトルから、予測される観測座標位置を計算
z_hat = x_k_hat * measurementModel';      % サイズ:Nx2

% 測定されたボール位置と、予測された全粒子位置の差を計算
z_error = abs(repmat(z_k, N, 1) - z_hat); % サイズ:Nx2

% 直線距離へ変換(error norm)
z_norm = sqrt(sum(z_error.^2, 2));        % サイズ:Nx1

% 尤度を算出
%(多変量正規分布:multivariate normal distributionの確率密度関数を使い計算)
lhood = 1/sqrt((2*pi).^3 * det(measurementNoise)) * exp(-0.5 * z_norm);
end


% Copyright 2018 The MathWorks, Inc.