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のベクトルも表示できる。

この例ではデータに異常値があるので大きい矢印が出来てしまっている。