LoginSignup
1
0

More than 1 year has passed since last update.

transform.jsonの修正

Last updated at Posted at 2022-12-17

「instantNeRFで遊ぶ Advent Calendar 2022」の18日目です。

testbedで起動時のモデルの姿勢を変更する方法を検討しました。クロップや回転が難しくなるので起動時に正対した姿勢にしたいからです。

Q unit cubeを回転させるようにすべてのカメラマトリクスを変更するヒントはありますか?
A 希望するunit cubeの回転に対応する 4x4 の回転行列を取り、すべてのカメラ行列にこれを掛けます。
(DeepLで翻訳しました https://www.deepl.com/ja/translator)

業務外の個人的な検討活動です。

警告
環境や入力内容によっては現在使用できている状況が壊れることがあります。
あなたの責任と判断で試してください。私は責任を取りません。

テストデータ

sketchfabのNefertiti statueを使用させていただきました。ありがとうございます。

transform.json

再掲します。カメラの位置と姿勢はtransform_matrixの名前で同次形のR|Tで保存されているようです。

12-4.png

transformJson.py

colmap2nerf.pyを流用し、各カメラのtransform_matrixを回転させます。transformJson.pyという名前にしました。

18-1.png

スニペット

    rot2 = R.from_euler("yzx", args.rotate, degrees=True)	

 	if ref_transforms:					
		# testbed.fov_axis = 0				
		# testbed.fov = ref_transforms["camera_angle_x"] * 180 / np.pi				
		if not args.screenshot_frames:				
        args.screenshot_frames = range(len(ref_transforms["frames"]))			
		# print(args.screenshot_frames)				
		for idx in args.screenshot_frames:				
			f = ref_transforms["frames"][int(idx)]			
			cam_matrix = f["transform_matrix"]			
			# print(cam_matrix)			
			rot1 = R.from_matrix(			
                    [[cam_matrix[0][0],cam_matrix[0][1],cam_matrix[0][2]],		
                    [cam_matrix[1][0],cam_matrix[1][1],cam_matrix[1][2]],
                    [cam_matrix[2][0],cam_matrix[2][1],cam_matrix[2][2]]])						
			rot3 = rot2 * rot1			
			camMatrix = rot3.as_matrix()			
			cam_matrix[0][0:3] = camMatrix[0][0:3]			
			cam_matrix[1][0:3] = camMatrix[1][0:3]			
			cam_matrix[2][0:3] = camMatrix[2][0:3]			
						
			t1 = [cam_matrix[0][3],cam_matrix[1][3],cam_matrix[2][3]]			
			t2 = np.dot(rot2.as_matrix(), t1)			
			t2 = t2.T			
			cam_matrix[0][3] = t2[0]			
			cam_matrix[1][3] = t2[1]			
			cam_matrix[2][3] = t2[2]			

testbed.exe

そのままのtransfrom.jsonを使うと横倒しでした。
18-2.png

transformJson.pyの実行

ここからz軸に-90deg回すと正対しそうなので、作成したtransformJson.pyに0, 0, -90を入力しました。

(ngp) D:\git\instant-ngp\data>python transformJson.py --rotate 0 0 -90 --screenshot_transforms 221214a\json\221214.json > 221214a\221214R.json

testbed.exe 調整後

新たに生成したjsonファイルを使用しtestbed.exeを実行したところ狙い通り正対して再生されました。

18-3.png

使用しないtransform.jsonは拡張子を変えたり別のフォルダに移しておかないと混ざります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0