관리 메뉴

Wiredwisdom

Convert 3D Gaussian to 2D splat Method 본문

3D Vision/Gaussian Splatting

Convert 3D Gaussian to 2D splat Method

Duke_Ryan 2024. 6. 22. 17:34

PDF (Probability Density Function)

 

`G(bbx)=e^(-1/2  (bbx)^T sum^(-1)(bbx)`
`G(bbx)=e^(-1/2  (bbx-mu)^T sum^(-1)(bbx-mu)`

 

`Sigma : `Covariance Matrix
`mu` : Center Point 



위에는 3D 가우시안에 대한 식이다.
`bbx` 에는 (x,y,z) 좌표가 포함이 된다. 

이를 통해 특정 position에 대한 밀도를 지수함수적으로 구할 수 있고
해당 지점의 Color 또한 같이 저장하게 되면 얼룩덜룩한 Gaussian splat 을 만들 수 있게 된다.
문제는 이 3D Gaussian 을 2D 계산인 `alpha`-blending 으로 계산하기 위해서는

해당 픽셀의 Ray에 수직되는 평면을 구해야 한다는 것이다. 

 

 

 

 

 

 

 

Zwicker et al. [2001a]



`Sigma'=JWSigmaW^TJ^T`

`W` : 시야 변환
`J` : affine Jacobian of the projective transformation

 

 

 

 

 

 

XYZ의 세계좌표를 W를 통해 뷰포인트와 뷰포인트가 바라보는 xy 축에 평행하게 Rotaion을 한다.
그리고 나서 각 xy 픽셀에 대한 XYZ의 변화량에 따른 변화량 값인 편미분을 통해 각 Ray의 도출되는 값인 방향에 대한 가우시안 분산의 2D의 투영 면을 구할 수 있게 되는데, Z 축은 이미 Scale Factor로 반영이 되었기 때문에 축 하나가 사라지면서, `2xx3`의 행렬이 완성된다. 
이를 통해 Back propagation이 진행될 때에도 분명한 Ray의 궤적을 가우시안에 적용할 수 있게 된다. 

 

 

위에는 Rotation으로 Align 된 뷰 포인트와 세계좌표

아래는 상부에서 바라본 모습. 

 

비율, 그리고 삼각 측정을 통해 이미지에 투사되는 색상을 세계좌표로부터 끄집어 낼 수 있다. 

재밌는건 멀리 있어 보이는 물체라 하더라도, 뷰 포인트에서 Z축을 향해 발사되는 축의 거리에 걸쳐 있다면
거리는 무조건 Z 라는 것이다. 이를 이용하여 각 픽셀 좌표에 투영되는 색상을 구할 수 있다. 

 

 

 

 

x 값에 투영되는 실제 X의 가우시안을 모델링해서 보자.

아래는 그 모델이다.

뷰포인트와 이미지 좌표로부터 계산된 Ray의 궤적에 직각하는 면에 
해당 3D 가우시안이 투영된다. 그리고 그 일부분에서 방사되는 색상을 그대로 가우시안에 적용시켜주면
가상현실에서의 모델링의 첫번째 절차가 시작되는 것이다. 

 

그래서 `Sigma'`는 `2xx2` 의 행렬이 된다. 

 

`Sigma'=[(a,b,c),(d,e,f),(g,h,i)]`
여기서 3행 3열은 제외가 되어 `2xx2` 형식으로 만든다.

 

 

 

 

 

 

 

 

 

 

 

 

 

In Gaussian Splatting


해당 논문에서 사용하는 수식은 아래와 같다.

`Sigma=RSS^TR^T`


`Sigma=[text(EigenVectorMatrix_Rotating Axes)][text(EigenValue)][text(EigenVectorMatrix_Rotating Axes)]^T`


R :  Rotation (회전)

S : Scale (가우시안의 크기를 x,y,z 축으로 표현)

 

`SS^T`는 Covariance Matrix `Sigma`의 대각행렬만을 추출한 값이 된다. 
그 이외의 각 축끼리의 공분산의 영역은 버리게 되고

이후의 Back Propagation의 학습 과정에서 해당 Opacity 와 Color를 학습하게 된다.

아래는 해당 매트릭스의 형태이다.

최종적으로는 해당 `SS^T`를 기반으로 픽셀의 위치에 따른 Ray의 각도로 Rotaion하여 

3D가우시안의 형태를 2D로 변환하게 된다.  
즉 3개의 각 평면간의 분산을 제외한 가우시안의 99%신뢰도의 크기만을 고려하여 Rotaion을 하였다 볼 수 있다.


`S=[(s_x,0,0),(0,s_y,0),(0,0,s_z)]`  `S^T=[(s_x,0,0),(0,s_y,0),(0,0,s_z)]`


`S^2=SS^T=[(s_x^2,0,0),(0,s_y^2,0),(0,0,s_z^2)]` 

이 수식에서 활용하려는 Matrix

 

`Sigma=[(a,b,c),(d,e,f),(g,h,i)]`

기존의 가우시안을 나타내는 각 평면의 분산이 적시된 Matrix 와는 표현이 다르나
대각 행렬의 축방향 크기는 같은 의미를 갖고 있다.

 

공분산이 0이라는 의미는 각 축간의 관계도가 없다는 의미이다. 
즉 밀도는 일정하다 라고도 볼 수 있다. 

 

또한, 각 축에 대한 표준편차만 표현이 되므로 이는 가우시안의 99% 신뢰도라는 규칙에 의하여 크기를 결정하게 된다.

그리고 이 모양은 어느 면에서 보나 타원이나 원형이 아니므로 각 축에서 자른 단면을 보게 되면 마름모의 형태를 갖게 된다.

이는 시각적으로 부자연스러워 보일 수 있으며, 랜더링 품질에 영향을 주게 되나
학습을 거듭할 수록 각 가우시안의 크기가 픽셀의 크기 만큼 분할되어 작아지기 때문에

시각적 왜곡이 큰 편은 아닐 것으로 추측된다. 

 

 

 

 

 

물체를 기술하는 세계좌표계에서의 가우시안을 Scale Factor로만 기술한다.
여기서는 편의상 다른 평면의 공분산을 제외시켰다. 그리고 결국엔 제외되어 위와 같이 기술된다.
즉, 각 축으로 투영되는 새로운 가우시안이 만들어지는 것이다.

 

여기서 이미지를 통해 투영되는 특정 픽셀의 뷰 포인트, Ray가 생긴다.

뷰 포인트는 z 축이므로 Z축을 중심으로 z축에 Align 하도록 Rotaion을 만든다.

 

 

 

그럼 위와 같이 축이 회전하여 뷰 포인트와 평행하게 되는데
여기서 투영되는 매트릭스를 `RSS^T` 를 통해 구현할 수 있다.

여기서는 대각행렬 이외의 값이 0이 되지 않고 각각의 분산 값을 갖게 된다.

 

그러나 해당 가우시안을 학습시키기 위해서는 

다시 세계좌표위에서의 가우시안으로 치환하여 위치와 매개변수 확장과 분리 등의 결정들을 해야 한다.

그러므로 마지막에 `R^T`를 계산하여 행렬을 원래대로 돌려준다.
`R^T`의 경우 Rotation의 역행렬 역할을 하기 때문에 오른쪽에서 계산을 해주어야 한다.

 

 

 

 

 

이렇게 위와 같이 기존의 World Coordinate 에서 View Point에 투영된
2D의 가우시안의 `3xx3` Covariance Matrix를 구했다.

*회전행렬 R은 각 Column이 직교하는 성질을 갖기 때문에
왼쪽에서 곱하나 오른쪽에서 곱하나 그 결과는 같다.

 

`RA=AR`

 


 

 

 

'3D Vision > Gaussian Splatting' 카테고리의 다른 글

3D Gaussian-Covariance  (0) 2024.07.03
FAST DIFFERENTIABLE RASTERIZER FOR GAUSSIANS  (0) 2024.06.30
Overview  (0) 2024.06.22
Ray for Final Color (Alpha-blending & NeRF)  (0) 2024.06.22
Gaussian Splatting  (0) 2024.06.21