Perception
-
SIBR ViewerSIBR (System for Image-Based Rendering)는 INRIA 산하 그래픽스 연구 그룹인 GraphDeco가 만드는 소프트웨어 프레임워크로 Image-based rendering 연구를 위한 인프라이다. 주로 Novel View Synthesis, 3D Reconstruction, 실시간 렌더링 논문들을 구현하고 실험하는 데 사용된다. SIBR Viewer는 3DGS 공식 코드에 포함된 표준 시각화 도구이다. 논문을 정확히 구현해 렌더링 정확도는 최고 수준이며 대규모 가우시안도 안정적으로 처리할 수 있지만, C++로 빌드해야 하고 확장성이 낮다는 단점이 있다. ViserViser는 Python/Web 기반 인터랙티브 뷰어이다. Python에서 웹(WebGL)으로 ..
3DGS Viewers : SIBR Viewer, GS-SLAM viewerSIBR ViewerSIBR (System for Image-Based Rendering)는 INRIA 산하 그래픽스 연구 그룹인 GraphDeco가 만드는 소프트웨어 프레임워크로 Image-based rendering 연구를 위한 인프라이다. 주로 Novel View Synthesis, 3D Reconstruction, 실시간 렌더링 논문들을 구현하고 실험하는 데 사용된다. SIBR Viewer는 3DGS 공식 코드에 포함된 표준 시각화 도구이다. 논문을 정확히 구현해 렌더링 정확도는 최고 수준이며 대규모 가우시안도 안정적으로 처리할 수 있지만, C++로 빌드해야 하고 확장성이 낮다는 단점이 있다. ViserViser는 Python/Web 기반 인터랙티브 뷰어이다. Python에서 웹(WebGL)으로 ..
2026.01.07 -
Tile-Grid based Rasterization3DGS는 최적의 병렬 처리를 위해 타일 그리드 기반 rasterization을 채택했다. #define NUM_CHANNELS 3 // Default 3, RGB#define BLOCK_X 16#define BLOCK_Y 16이는 이미지를 16x16 픽셀 타일로 분할하고 각 타일은 1 CUDA block이고, 각 픽셀은 1 thread이다. 같은 타일은 같은 Gaussian들을 사용한다.전체 파이프라인은 다음과 같다.Preprocessing (per-Gaussian)Prefix Sum (offset 계산)Key-Value 쌍 생성Radix Sort (타일별 + 깊이별 정렬)Tile Range 식별타일별 렌더링 타일 기반 방식은 다음과 같은 장점들이 있..
3DGS 소스 코드 분석 : Tile-Grid based RasterizationTile-Grid based Rasterization3DGS는 최적의 병렬 처리를 위해 타일 그리드 기반 rasterization을 채택했다. #define NUM_CHANNELS 3 // Default 3, RGB#define BLOCK_X 16#define BLOCK_Y 16이는 이미지를 16x16 픽셀 타일로 분할하고 각 타일은 1 CUDA block이고, 각 픽셀은 1 thread이다. 같은 타일은 같은 Gaussian들을 사용한다.전체 파이프라인은 다음과 같다.Preprocessing (per-Gaussian)Prefix Sum (offset 계산)Key-Value 쌍 생성Radix Sort (타일별 + 깊이별 정렬)Tile Range 식별타일별 렌더링 타일 기반 방식은 다음과 같은 장점들이 있..
2026.01.06 -
최근 3DGS 연구를 시작하면서 지도해주시는 선배님이 한 줄 한 줄 설명해주셔서 3DGS 원본 소스코드를 자세히 살펴 볼 기회가 있었다. 방법론만 새로운 것이 아니라 아름다운 수준의 코드로 말도 안 되게 구현되어 있는 것 같아 놀라웠다. 하드웨어 수준의 섬세한 병렬화와 최적화가 간결하게 구현되어 있었다. 이때까지 주먹구구식으로 "이거 입력하면 보이네?" 하고 넘어갔어서 마음이 불편했는데, 좋은 이론을 잘 배울 수 있어서 오랜만에 배우는 기쁨을 느낄 수 있었다. 특히 CUDA 프로그래밍은 예전에 책만 사놓고 잘 안 봤었는데 이참에 입문할 수 있어서 좋았다. 혼자였으면 코드를 제대로 볼 생각도 못 했을 것 같은데 감사한 일... GS가 주목받는 이유는 속도가 빠르다는 점 때문인데, 이 비결이 GPU 병렬처리..
3DGS 소스 코드 분석 : def forward()와 CUDA 프로그래밍최근 3DGS 연구를 시작하면서 지도해주시는 선배님이 한 줄 한 줄 설명해주셔서 3DGS 원본 소스코드를 자세히 살펴 볼 기회가 있었다. 방법론만 새로운 것이 아니라 아름다운 수준의 코드로 말도 안 되게 구현되어 있는 것 같아 놀라웠다. 하드웨어 수준의 섬세한 병렬화와 최적화가 간결하게 구현되어 있었다. 이때까지 주먹구구식으로 "이거 입력하면 보이네?" 하고 넘어갔어서 마음이 불편했는데, 좋은 이론을 잘 배울 수 있어서 오랜만에 배우는 기쁨을 느낄 수 있었다. 특히 CUDA 프로그래밍은 예전에 책만 사놓고 잘 안 봤었는데 이참에 입문할 수 있어서 좋았다. 혼자였으면 코드를 제대로 볼 생각도 못 했을 것 같은데 감사한 일... GS가 주목받는 이유는 속도가 빠르다는 점 때문인데, 이 비결이 GPU 병렬처리..
2026.01.06 -
Robot navigation에서 Gaussian Splatting의 활용 관련 공부를 요새 많이 하고 있는데, 지도해주시는 선배님이 이 레포를 따라해보면 GS 학습을 간략하게 맛볼 수 있다고 추천해주셨다. 논문에 나오는 핵심적인 수식들을 직접 코드로 구현해 볼 수 있게 빈칸을 뚫어 놓았기 떄문에 연습하기 좋다. https://github.com/learning3d/assignment4 GitHub - learning3d/assignment4: 3D Gaussian Splatting and Diffusion Guided Optimization3D Gaussian Splatting and Diffusion Guided Optimization - learning3d/assignment4github.com 환..
CMU 3DGS Tutorial의 TutorialRobot navigation에서 Gaussian Splatting의 활용 관련 공부를 요새 많이 하고 있는데, 지도해주시는 선배님이 이 레포를 따라해보면 GS 학습을 간략하게 맛볼 수 있다고 추천해주셨다. 논문에 나오는 핵심적인 수식들을 직접 코드로 구현해 볼 수 있게 빈칸을 뚫어 놓았기 떄문에 연습하기 좋다. https://github.com/learning3d/assignment4 GitHub - learning3d/assignment4: 3D Gaussian Splatting and Diffusion Guided Optimization3D Gaussian Splatting and Diffusion Guided Optimization - learning3d/assignment4github.com 환..
2025.12.29 -
*이전 포스팅 (https://zzziito.tistory.com/77) 과 이어집니다. SVD : Singular Value Decomposition SVD(특이값 분해) 란 ? 복잡한 행렬을 간단한 구성 요소로 분해하는 방법. SVD의 핵심은 행렬 A를 구성하는 데이터의 '특징'을 추출하는 데 있다. 여기서 U, V 는 Orthogonal (모든 basis 가 직교하고 크기가 1임) 이다. 또한 sigma 행렬은 1) 대각행렬에 위치한 singular value 를 제외한 요소가 다 0이고, 2) 이 singular value 를 제곱하면 eigen value 가 된다. 3) 이 singular value 들은 내림차순으로 정렬되어 있다. 우리는 Ax=0 의 답을 찾기 위한 방법으로 SVD 를 사용한..
Ax=0 을 풀기 위한 SVD (Singular Value Decomposition)*이전 포스팅 (https://zzziito.tistory.com/77) 과 이어집니다. SVD : Singular Value Decomposition SVD(특이값 분해) 란 ? 복잡한 행렬을 간단한 구성 요소로 분해하는 방법. SVD의 핵심은 행렬 A를 구성하는 데이터의 '특징'을 추출하는 데 있다. 여기서 U, V 는 Orthogonal (모든 basis 가 직교하고 크기가 1임) 이다. 또한 sigma 행렬은 1) 대각행렬에 위치한 singular value 를 제외한 요소가 다 0이고, 2) 이 singular value 를 제곱하면 eigen value 가 된다. 3) 이 singular value 들은 내림차순으로 정렬되어 있다. 우리는 Ax=0 의 답을 찾기 위한 방법으로 SVD 를 사용한..
2024.01.24 -
Homography 는 image stitching 을 할 때 많이 쓰입니다. (굉장히 많이 쓰이는 중요한 개념이지만, 일단은 image stitching 으로 시작해 봅시다. ) image stitching 은 여러 장의 사진을 이어 붙이는 작업으로, 파노라마 이미지를 만들 때 사용됩니다. 이런 파노라마 이미지를 만들 때에는 어떤 방법들이 사용될 수 있을까요 ? 매우 넓은 FoV 를 가진 렌즈를 사용한다 - 이 방법의 단점은 이미지 왜곡이 일어나고, FoV 가 200도를 넘기기 어렵고, 비쌉니다. 여러 장을 찍어서 이어 붙인다. 그러려면 여러 장의 이미지들의 관계에 대해서 알아야 하고, 이때 사용되는 것이 특징점입니다. 앞으로도 LiDAR 를 사용하지 않고 2D 이미지에서 3D reconstructio..
Homography : 평면과 평면 사이 관계, Pseudo InverseHomography 는 image stitching 을 할 때 많이 쓰입니다. (굉장히 많이 쓰이는 중요한 개념이지만, 일단은 image stitching 으로 시작해 봅시다. ) image stitching 은 여러 장의 사진을 이어 붙이는 작업으로, 파노라마 이미지를 만들 때 사용됩니다. 이런 파노라마 이미지를 만들 때에는 어떤 방법들이 사용될 수 있을까요 ? 매우 넓은 FoV 를 가진 렌즈를 사용한다 - 이 방법의 단점은 이미지 왜곡이 일어나고, FoV 가 200도를 넘기기 어렵고, 비쌉니다. 여러 장을 찍어서 이어 붙인다. 그러려면 여러 장의 이미지들의 관계에 대해서 알아야 하고, 이때 사용되는 것이 특징점입니다. 앞으로도 LiDAR 를 사용하지 않고 2D 이미지에서 3D reconstructio..
2024.01.24 -
이전 포스팅 (https://zzziito.tistory.com/43) 에서도 언급했듯이, Stereo Matching 을 이용하면 이론상으로는 두 장의 이미지를 통해 3차원을 복원할 수 있습니다. Python, OpenCV, Open3D 를 이용하여 2장의 이미지로 3차원을 복원하는 예제를 통해 과정을 더 자세히 살펴보도록 하겠습니다. (전체 코드는 글 하단에 있습니다.) 과정 1. Undistortion 2. Rectification 3. Disparity Map 얻기 4. Disparity map 을 Depth map 으로 바꾸기 5. Depth Map 을 이용한 Point Cloud reconstruction Undistortion 카메라 왜곡을 먼저 펴주기 위해 Undistortion 을 수행합..
2장의 이미지로 3차원 복원하기 with Python Open3D이전 포스팅 (https://zzziito.tistory.com/43) 에서도 언급했듯이, Stereo Matching 을 이용하면 이론상으로는 두 장의 이미지를 통해 3차원을 복원할 수 있습니다. Python, OpenCV, Open3D 를 이용하여 2장의 이미지로 3차원을 복원하는 예제를 통해 과정을 더 자세히 살펴보도록 하겠습니다. (전체 코드는 글 하단에 있습니다.) 과정 1. Undistortion 2. Rectification 3. Disparity Map 얻기 4. Disparity map 을 Depth map 으로 바꾸기 5. Depth Map 을 이용한 Point Cloud reconstruction Undistortion 카메라 왜곡을 먼저 펴주기 위해 Undistortion 을 수행합..
2023.07.11 -
Disparity Disparity (양안 시차) 는 Stereo Vision 의 핵심 개념입니다. 다음 사진과 같이, 가까이 있는 물체일 수록 Left - Right 간의 위치 차이가 커지게 됩니다. 따라서 Disparity 는 Depth 와 반비례한다는 것을 알 수 있습니다. Triangulation Triangulation 은 이미지 상의 포인트를 3차원으로 복원할 때 사용됩니다. 3차원 복원을 위해서 필요한 정보는 다음과 같습니다. 1. 두 카메라 사이의 Rotation / Translation 2. 카메라 intrinsic parameter 3. 두 픽셀이 "같은 것인지" 알기 (Correspondences) 따라서 우리는 Triangulation 을 통해서 Disparity 를 이용해 Dept..
Stereo Vision : Disparity 와 Rectification, Epipolar GeometryDisparity Disparity (양안 시차) 는 Stereo Vision 의 핵심 개념입니다. 다음 사진과 같이, 가까이 있는 물체일 수록 Left - Right 간의 위치 차이가 커지게 됩니다. 따라서 Disparity 는 Depth 와 반비례한다는 것을 알 수 있습니다. Triangulation Triangulation 은 이미지 상의 포인트를 3차원으로 복원할 때 사용됩니다. 3차원 복원을 위해서 필요한 정보는 다음과 같습니다. 1. 두 카메라 사이의 Rotation / Translation 2. 카메라 intrinsic parameter 3. 두 픽셀이 "같은 것인지" 알기 (Correspondences) 따라서 우리는 Triangulation 을 통해서 Disparity 를 이용해 Dept..
2023.07.09 -
두 장의 이미지로 3D 를 복원하기 위해 알아야 하는 카메라 매트릭스 이미지를 통해서 3차원 포인트를 복원하기 위해서는 1) 2d 이미지 위 특징점 사이의 매칭 정보 2) 해당 카메라 pose 사이의 자세 정보 (Rotation / Translation) 정보 를 알아야 합니다. 이때 Epipolar Geometry 에 의해서 , P 점에 대응되는 매칭점의 후보군은 Epipolar Line 위에서 찾을 수 있습니다. Intrinsic , Extrinsic Matrix 카메라 파라미터는 Extrinsic Matrix, Intrinsic Matrix 로 구성됩니다. Extrinsic Matrix 는 World 좌표계의 3차원 포인트를 나의 카메라 좌표계로 옮기는 매트릭스입니다. 따라서 해당 Rotation ..
Essential Matrix 와 Fundamental Matrix두 장의 이미지로 3D 를 복원하기 위해 알아야 하는 카메라 매트릭스 이미지를 통해서 3차원 포인트를 복원하기 위해서는 1) 2d 이미지 위 특징점 사이의 매칭 정보 2) 해당 카메라 pose 사이의 자세 정보 (Rotation / Translation) 정보 를 알아야 합니다. 이때 Epipolar Geometry 에 의해서 , P 점에 대응되는 매칭점의 후보군은 Epipolar Line 위에서 찾을 수 있습니다. Intrinsic , Extrinsic Matrix 카메라 파라미터는 Extrinsic Matrix, Intrinsic Matrix 로 구성됩니다. Extrinsic Matrix 는 World 좌표계의 3차원 포인트를 나의 카메라 좌표계로 옮기는 매트릭스입니다. 따라서 해당 Rotation ..
2023.07.02