ParaView TrackingData - eiichiromomma/CVMLAB GitHub Wiki
ParaView) TrackingData
(CSVファイルに記録した座標データを可視化する際の手順
データの内容
KinectのSkeletonFrameから拾ったJointsデータで「ユーザID, FrameNumber, 頭(x), 頭(y), 頭(z), 肩中央(x), 肩中央(y), 肩中央(z)」のようなCSVデータ。
ID,nFrame,HeadX,HeadY,HeadZ,ShoulderCX,ShoulderCY,ShoulderCZ
4,70721,0.1548187,0.2210746,1.713204,0.1732067,0.03352049,1.762912
4,70722,0.1546937,0.2212802,1.714957,0.1730965,0.03360117,1.764042
4,70723,0.1546809,0.2216583,1.713367,0.1727339,0.03421642,1.762441
ここ から入手可能。
とりあえず表示
CSVファイルの読み取り
[File]-[Open]でcsvファイルを開く。 Pipeline BrowserにはSkeletonSample.csvのようにファイル名が表示される。
CSVにヘッダが無い場合はPropertiesのHave Headersのチェックを外す。但し扱い難いのでヘッダを入れた方が良い。 Applyボタンを押すとLayoutにデータテーブルが表示される。
Pointsへ変換1 (Head)
Pipeline Browserでcsvファイルが選択された状態で,[Filters]-[Alphabetical]-[Table To Points]を選択する。Pipeline BrowserにTableToPoints?(?は数字)が表示される。
PropertiesでX ColumnのコンボをHeadX,Y, Zも同様にHeadY, HeadZとしてApplyボタンを押す。 Layoutの表示もTableToPoints?となりHeadX, HeadY, HeadZが消えてPointsのみになる。
3D表示
Layoutの右上の□□アイコンをクリックしてViewを増やし「3D View」を選択する。
Pipeline BrowserのTableToPoints?の横の目のアイコンをクリックすると3D ViewにHeadデータが表示される。
ここでPipeline BrowserのTableToPoints?を選択して名前をHeadにするとともに,PropertiesのColorのEditボタンを押して別の色を選ぶ。
[File]-[Save State]でPipelineを保存できる。
ShoulderCenterの追加
Pipeline Browserのcsvファイルを選択して,再度TableToPointsとして処理を繰り返す。データはShoulderCX, ShoulderCY, ShoulderCZをX, Y, Zに使い,Pipeline Browserでの名前はShoulderCのようにした。
変位量のベクトル表示
変位量の計算
ParaViewで計算させる手もあるがデータ収集か後でExcelでフレーム間の差分を計算しておき,それぞれdHeX, dHeY, dHeZ, dSCX, dSCY, dSCZとでもする。( dHeX(n) = dHeX(n+1)-dHeX(n) として計算し,不足する最後の各データは削ってしまう)
ここ から入手可能。
ベクトルへの変換
先程保存したPipelineをLoadしてPipeline BrowserでHeadを選択する。[Filters]-[Common]-[Calculator]を選択し,Propertiesの中でResult Array NameをnHeadとして,その下の電卓のような画面でiHat, jHat, kHatを単位ベクトルと考えて式を下のように作成する。dHeX等はScalarsからも選択できる。
(iHat*dHeX)+(jHat*dHeY)+(kHat*dHeZ)
Applyボタンを押すしてもベクトルが出てこない。表示をGlyphにしても巨大な矢印しか出てこないので非表示にしておく。
Calculatorの結果のまま[Filters]-[Common]-[Glyph]を加える。Applyボタンを押し目玉アイコンを有効にすると、ベクトルが3D Viewに表示される。 数値によってはデカいベクトルが3D Viewに表われるので、PropertiesのScaleが1 1 1となっているところを0.05 0.05 0.05のように係数を小さくすると丁度良くなる。
更にColorでSolid ColorとなっているものをnFrameにすると経時変化で色が変化し,dHeX等を指定すると変化が大きかった所を色で可視化できる。矢印自体も上記のnHeadに応じた大きさになる。
dSCX, dSCY, dSCZも同様に処理すればShoulder Centerのベクトルも表示できる。
この例ではデータに異常値があるので大きい矢印が出来てしまっている。