Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

confusion about diff gaussian rasterization #6

Closed
whwh747 opened this issue Dec 13, 2024 · 7 comments
Closed

confusion about diff gaussian rasterization #6

whwh747 opened this issue Dec 13, 2024 · 7 comments

Comments

@whwh747
Copy link

whwh747 commented Dec 13, 2024

你好,我担心用英文说不清楚,我就用中文描述一下我的问题吧。
在每次render之前,都会利用相机位姿将高斯函数从世界坐标系转换到当前相机坐标系, 但渲染相机的参数让我很困惑,viewmatrix以及projmatrix在每一帧中都是相同的,viewmatrix是第一帧的相机位姿,说明渲染相机一直都是第一帧的相机?projmatrix指的又是什么呢?

@lif314
Copy link
Owner

lif314 commented Dec 14, 2024

@whwh747 我们参照Splatam的方式,所有位姿都转换为相对第一帧的位姿,因此,在raster的设置中,我们可以始终采用第一帧的位姿,然后在每次render之间,将高斯点转化到第一帧的位姿,你可以看代码. 在绝大多数GS方法中,都是变换raster设置的相机位姿来观察高斯点,但Splatam采用的变换高斯点到第一帧位姿与它们是等价的。

@whwh747
Copy link
Author

whwh747 commented Dec 14, 2024

感谢你的回复,我的理解是 transform_to_frame将高斯函数利用当前帧的位姿转换到了当前帧 是我的理解有偏差吗

@lif314
Copy link
Owner

lif314 commented Dec 14, 2024

@whwh747 see here

@whwh747
Copy link
Author

whwh747 commented Dec 14, 2024

很抱歉,我看到过这个issue,但我没理解,transform_to_frame这个函数利用的是当前相机位置的变换矩阵也就是Tcw(第i帧的Tcw)将世界坐标系中的高斯函数Gw投影到相机坐标系得到Gc,然后直接将Gc传递给Render,然后这个Render中使用了viewmatrix与projmatrix,viewmatrix是第一帧的w2c 我的理解就是第一帧的Tcw(第1帧的Tcw),然后这个projmatrix我的理解是w2c2ncd,将世界坐标系的坐标转换到ncd坐标系进行光栅化,但前面使用transform_to_frame已经将高斯函数从世界坐标系转化到了相机坐标系,为什么在forward.cu中的preprocessCUDA函数中执行float4 p_hom = transformPoint4x4(p_orig, projmatrix); 已经在相机坐标系的高斯函数为什么要再使用projmatrix进行转换呢?

@whwh747
Copy link
Author

whwh747 commented Dec 16, 2024

你好,请问你是否有空给我解答呢

@lif314
Copy link
Owner

lif314 commented Dec 16, 2024

@whwh747 抱歉这么晚回复,我最近有点感冒🤧。你可能忽略了绝对位姿和相对位姿的关系。在原始的scanent和replica数据集中,它们的位姿是绝对位姿,当你转换为w2c时,你可以采用这个位姿将世界坐标系中的高斯点投影到相机坐标系中。而在splatam/gs3lam中,我们将这些绝对位姿转换成了相对位姿(相对第一帧的位姿,这时,大多数情况下第一帧位姿会被定义为单位阵),这在SLAM中经常使用。因此,如果你将第N帧对应的三维高斯点与相对位姿进行作用,那么这意味你只将第N帧对应的高斯点转换到了第1帧,这个转换是在世界坐标系中进行的。以上解释应该有助于你理解transform_to_frame函数的作用。如果你还有不理解的,你可以发我的邮箱,我可以加微信尽可能给你解答!

@whwh747
Copy link
Author

whwh747 commented Dec 16, 2024 via email

@lif314 lif314 closed this as completed Dec 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants