전체 글 439

COLMAP read bin/txt/ db files in python

COLMAP을 사용하고 나면 나오는 결과 파일은 총 ( images, cameras, points3D ) 3개다. bin 파일이나 txt 파일로 저장되도록 설정이 되어있는데, 이를 주로 사용하는 python으로 가져오기가 매번 heuristic하기엔 번거로워 read function을 작성했다. 아래 함수를 통해서, colmap의 결과값을 각 요소 별로 list 형태로 얻을 수 있다. 이후에 원하는 형태로 사용하면 된다. 먼저 bin 파일을 갖고 있을 경우, txt 파일로 변환하는 것으로 시작한다. colmap model_converter --input_path /path/to/dir-of-bins/ --output_path /path/to/dir-of-txts/ --output_type TXT 1. c..

Knowhow/Vision 2022.07.13

3D transformation(R, t) matrix notation

Computer vision에서 3D transformation (rotation + translation)은 굉장히 흔히 접하고 많이 사용한다. 3차원 point의 좌표계 변환, 카메라 자세, extrinsic calibration 등 여러 키워드에서 반드시 등장한다. 그런데 문제는 transformation의 방향이 도대체 어느 방향인지 값만 봐서는 알 수가 없다는 것이다. 예를 들어, camera-to-world인지 world-to-camera인지, camera 1 to camera 2인지 camera 2 to camera 1인지 구분할 수 없다. 위 그림에서만 봐도 화살표 없이는 R,t가 어느 방향으로의 변환인지 알 수 없다. (사실 화살표를 알아도...해석하기 나름이라 헷갈린다.) 이것을 구분하..

Knowledge/Vision 2022.07.13

COLMAP[GUI] multi-camera setting

COLMAP은 워낙 유명해서 3D vision한다고 하면 한 번쯤은 들어봤을 것이다. 링크(https://colmap.github.io/index.html) 에서 소개하는 바와 같이 SfM과 MVS를 손쉽게 돌릴 수 있도록 도와주는 tool 혹은 코드라고 생각하면 된다. 설치가 복잡했으나, 최근에는 그냥 sudo apt install colmap 명령어 한 번으로 설치할 수 있고 튜토리얼 또한 잘 정리되어 있어서 사용성도 매우 뛰어난 장점이 있다. (단, 이렇게 깔면 CUDA를 사용하는 기능에서는 제한적임) 이 글에서는 튜토리얼에서 나오지 않지만, 꽤나 자주 벌어지는 상황이어서 매번 찾기 귀찮은 multi-camera setting에서의 colmap 사용법을 정리하고자 한다. 튜토리얼은 single-vi..

Knowhow/Vision 2022.07.07

Rotation representation for neural network

요즘 regression task를 풀고자 할 때 많이 시도하는 방법은 neural network를 이용하는 방법이다. classification, detection 등등 온갖 주제에서 neural network가 regression에 폭발적인 성능을 보여준다는 것이 입증된지 오래여서, 가장 먼저 떠오르는 방법이 됐다. (요즘은 neural network를 쓰는 것이 computational cost 측면에서까지 좋을 때도 있다.) 하지만 Rotation 값을 regression하는 경우에는 약간 상황이 다르다. Rotation은 유한한 범위 안에서 유일한 의미를 갖는 다른 값들과 달리, 범위가 무한하며 주기성이 있기 때문에 neural network를 이용하는데 어려움이 있다. (물론 풀긴 풀지만 성능..

Knowledge/Vision 2022.07.04

Open3d RGB/Depth image rendering

3D 데이터의 시각화를 위해서든 3D데이터의 2D 데이터화를 위해서든 공간에 임의의 위치에 카메라를 두고 렌더링을 해야할 때가 있는데, 다른 툴을 쓰자니 진입 장벽이 높고 라이센스 문제도 있어 애를 먹다가 open3d로 간단히 할 수 있는 방법을 찾아 정리한다. 3D graphics 툴 대비 퀄리티나 자유도 측면에서 아쉬운 점은 분명히 있겠지만, 그 정도의 수준을 요구하지 않는다면 충분한 방법같다. open3d.visualization.Visualizer()를 이용하는 방법인데 글로 설명하는 것보다 코드로 설명하는 것이 이해도 쉽고 혹 사용하고자 하는 사람에게도 편할 것 같아 하나의 class로 작성한 코드는 다음과 같다. class Renderer(): def __init__(self, obj, img..

Knowhow/Vision 2022.07.01

Obj file의 manifold/non-manifold 구분

mesh 데이터를 이용한 무언가를 진행할 때, 보통 mesh가 manifold한지, 아닌지 구분하는 작업이 필요하고 non-manifold mesh라면 해당 vertex와 face를 제거하든지 해서 전처리를 한 뒤에 사용하게 된다. 특히, 캐드에서나 3D graphic tool에서 non-manifold mesh를 그대로 사용한다면, 냅다 오류가 나거나 구멍이 뚫려있는 mesh를 볼 수 있다. 그래서 가장 대표적으로 mesh를 저장하는 데이터 포맷인 obj file에 대해서 mesh가 manifold한지 판단하는 방법 및 코드를 정리해보고자 한다. Manifold 먼저, 지금까지 내가 공부하고 그리고 직관적으로 해석한 바로 manifold mesh가 뭔지 정리해보자면, mesh의 모든 edge를 2개 이..

Knowhow/Vision 2022.06.30

Golang vscode 이용 시 failed to save 문제

Golang을 공부하던 차, Golang은 다른 python이나 javescript처럼 맘대로 프로젝트 위치를 지정할 수 없다는 걸 알았다. 보통 /usr/local/go 경로에 설치하고 그 하위에 src/PROJECT_DIR을 따로 만들어서 정리하는 식이다. 그러다 보니 보통 저 경로 상에 있는 파일을 수정하고자 하면 sudo 권한이 필요한데 VSCODE 에서 작업할 때, sudo 권한 때문에 매번 저장할 때마다, 다음 문구가 뜨면서 sudo 로그인을 요구한다. (꽤나 귀찮다...) Failed to save : ~~~.go insufficient permissions. select 'retry as sudo' to retry as superuser. 그렇다고 VSCODE 자체를 sudo 권한으로 실행..

Trouble/Others 2022.06.23

Javascript tips

1. 기본 골자는 html이 javascript를 실행시켜주는 형태로 다음과 같이 시작함. 2. 연동된 html 코드는 document라는 object로 정의되어 있음. const title = document.getElementById("title"); const title = document.querySelector(".hello h1"); // css style indexing console.dir(title); 3. event 는 2가지 형태로 구현이 가능함. 개인적으로 전자가 더 나은 듯. a.onclick = handleClick; a.addEventListener("click", handleClick); 4. class를 변경/추가/제거하는 작업이 가능한데 총 2가지 방법이 있음. 후자가 더..

Knowhow/Web 2022.06.21

CSS tips 2

1. transition state 변화를 설정했을 때, animation 효과와 함께 변화하도록 하는 기능 a { color : red; transition: color 2s ease-in-out, border-radius 5s 5px; } a:hover{ color : green; border-radius : 20px; } transition은 초기 root 선언에 적혀야 됨. a:hover 하위 (state)에 적히면 hover에 해당하지 않는 순간 바로 transition 취소됨. ease-in-out은 변화 양상을 표현하는 속성. matthewlein.com/tools/ceaser 위 링크에 가면 시각적으로 비교해볼 수 있음. 2. transformation img { transform : ro..

Knowhow/Web 2022.06.20

CSS tips 1

Tips 1. css 파일을 html 내에서 tag 형태로 부르는 방법이 있고, 아예 분리하는 방법이 있는데, 후자의 방법이 권장됨. # 전자 inline css # 후자 external css 두 방식을 동시에 쓸 경우( 권장 x), cascading 단어 뜻에 맞게 맨 마지막에 적혀있는 커맨드대로 적용됨. 2. 각 html tag 별로 속성을 지정하는 방식을 반복하면 됨. easy. tagname { color : blue; font-style : italic; font-size: 50px; } 위와 같음. 특정 id의 tag만 변경하고자 할 때는 다음과 같이 작성하면 됨. #id { } 모든 tag에 공통적으로 적용하고자 할 때는 다음과 같이 작성하면 됨. * { } 카테고리 레벨로 적용하고자 할 ..

Knowhow/Web 2022.06.19