本日は AzureKinect と Blender の調査枠です。
AzureKinect から取得したカラー画像とデプス画像を使って Blender で立体を再構築してみます
カラー画像とデプス画像を取得するツールは k4a_mkv2image を利用します。
github.com
k4a_mkv2image のビルド手順は前回記事を参照ください。
bluebirdofoz.hatenablog.com
k4a_mkv2imageでカラー画像とデプス画像を取得する
初めに k4a_mkv2image を使って AzureKinect の記録ファイル(*.mkv)からカラー画像とデプス画像を取得します。
k4a_mkv2image.exe の配置ディレクトリに記録ファイル(*.mkv)をコピーしてShift+右クリックで PowerShell を開きます。
以下のコマンドを実行します。必ず"-t=true"オプションを付与します。
こうすることでデプス画像がカラー画像と同じサイズで出力され、位置合わせが行われた状態で出力されます。
.\k4a_mkv2image.exe -i=".\OFFICE_SAMPLE_WFOV_UNBINNED.mkv" -t=true
出力したカラー画像とデプス画像から対応する1枚を取得します。
Blenderのプロジェクト作成
次に立体を再構築するための Blender プロジェクトを作成します。
デフォルトの Cube は削除し、カラー画像とデプス画像を反映する平面メッシュを追加します。
この平面メッシュが画像を反映するスクリーン代わりとなります。
回転と拡大縮小を使ってスクリーンの向きとサイズを調整します。
オブジェクトのトランスフォームは変えたくないので[編集モード]で実施します。
今回出力した画像ファイルは 1920x1080 の 16:9 比だったので、縦軸を 0.5625 倍してスクリーンも 16:9 比にしました。
カラー画像の反映
まずはカラー画像を反映します。
変更を見た目で確認するため、[3Dビューのシェーディング]を[ルック開発]に切り替えておきます。
メッシュの[マテリアル]タブを開き、マテリアルを指定したら[ベースカラー]に[画像テクスチャ]を指定します。
[画像テクスチャ]の[開く]ボタンをクリックし、カラー画像を指定します。
これでカラー画像の反映は完了です。
デプス画像の反映
次にデプス画像を反映します。
まずは変形のためのメッシュの頂点数を増やします。この頂点数が変形時のポリゴンの解像度になります。
[モディファイア]タブを開きます。
[モディファイアの追加]のプルダウンを開き、[サブディビジョンサーフェス]を選択します。
モディファイアが追加されたら[細分化アルゴリズムのタイプ]を[シンプル]に設定します。
(デフォルトの[カトマルクラーク]ではスクリーンが変形してしまいます)
更に細分化の[ビューポート:]の数値を上げて、頂点数を増やします。今回は[9]としました。
画面下の情報で現在の頂点数と面数が分かります。
このスクリーンにデプス画像を反映します。
再び[モディファイアの追加]のプルダウンを開き、[ディスプレイス]を選択します。
[ディスプレイス]モディファイアが追加されます。
テクスチャの[新規]ボタンをクリックし、その横のテクスチャ表示ボタンをクリックします。
すると新規作成した[テクスチャ]タブが開くので、[画像]パネルの[開く]ボタンからデプス画像を開きます。
画像を開くとプレビューが読み込まれます。
デプス画像はカラー情報ではなく、16bitの深度情報を持った画像ファイルです。
[色空間]の設定を[sRBG]から[NonColor]に変更することで、16bitの深度情報が取得できます。
再び[モディファイア]タブに戻ります。
[ディスプレイス]モディファイアの各項目を以下の通り変更します。
・テクスチャ座標:[UV]
・中間レベル:[0.00]
・強さ:[-64.0]
テクスチャ座標を[UV]にすることで、カラー画像と同様にUV展開に基づいたマッピングになります。
中間レベルはデプスの 0 情報が Y:0.00 の位置に合うように[0.00]としています。
強さはデプス画像の深度情報に掛け合わせる係数です。今回は実測を元に凡そ適切と思われる数値を設定しました。
このままだとノイズやデプスの欠如部分が多すぎるので、次回はノイズ部分を削除します。
bluebirdofoz.hatenablog.com