SLAM(Simultaneous Localization And Mapping)

- Odometry + Loop closure



stereo 이점: estimate the exact trajectory 



monocular 이점: only estimate the trajectory, unique only up to a scale factor.



http://avisingh599.github.io/vision/visual-odometry-full/



Undistortion: lens distortion을 보완, calibration과정에서 얻는 distortion parameter로 수행됨



Rectification: disparit map 연산의 문제점을 줄이기 위해 수행. 모든 epipolar line들이 parallel -> horizontal로. disparty computation에서 matching blocks를 한 방향으로만 찾으면 됨

# Disparity Map Computation

스테레오 카메라를 통해 나온 pair images를 통해 disparity map을 계산할 수 있음

첫 이미지의 (x,y)가 두 번째ㅐ 이미지의 (x+d, y)에 존재한다면 좌표 (x, y)의 disparity map에는 value d를 갖고있다.

 y좌표는 동일(rectified됐기 때문). 즉, d = x(first) - x(second)



# Block-Matching Algorithm

sliding window를 사용해 각 좌표의 disparity를 계산. 



# Sum-of-Absolute Differences(SAD 알고리즘)

https://blog.naver.com/ppgt1225/100191849023

https://studyandroid.tistory.com/66

http://zone.ni.com/reference/en-XX/help/372916M-01/nivisionconceptsdita/guid-53310181-e4af-4093-bba1-f80b8c5da2f4/

영역의 유사성을 측정하는 알고리즘



# Feature Detection

- FAST: http://www.edwardrosten.com/work/fast.html

https://m.blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220655420471&proxyReferer=https%3A%2F%2Fwww.google.com%2F





focal length - pinhole과 film(image plane) 사이의 거리



visual odometry



egomotion



calibration - 우리가 보는 세상은 3차원, 카메라로 찍을 경우 2차원 이미지가 됨. 이 때 3차원의 점들이 어디에 맺히는지는 당시의 카메라의 위치/방향에 의해 결정. 하지만 실제 이미지는 사용된 렌즈, 렌즈와 이미지 센서와의 거리, 각 등 카메라 내부의 기구적인 부분에 의해서 큰 영향을 받음. 따라서 3차원 점들이 영상에 투영된 위치를 구하거나 역으로 영상좌표로부터 3차원 공간좌표를 복원할 때에는 이러한 내부 요인을 제거해야만 정확한 계산 가능, 그리고 이러한 내부 요인의 파라미터 값을 구하는 과정이 calibration(https://darkpgmr.tistory.com/32?category=460965)



extrinsic parameter: 카메라 외부 파라미터(카메라의 설치 높이, 방향(팬, 틸트) 등 카메라와 외부 공간과의 기하하적 관계에 관련된 파라미터



intrinsic parameter: 카메라 내부 파라미터(카메라 초점거리, aspect ratio, 중심점 등 카메라 자체의 내부적인 파라미터)

https://darkpgmr.tistory.com/32



SFM(Structure from Motion)



bundle adjustment



degree of freedom(DOF)



Moravec -> 1. motion estimation pipeline, 2. corner detector(Moravec corner detector)

  - slider stereo 를 사용(a single camera sliding on a rail) - stop and go fashion, digitizing and analyzing images at every location



epipolar line: https://darkpgmr.tistory.com/83

'공부일지 > SLAM' 카테고리의 다른 글

SLAM 0301 스트리밍  (0) 2020.03.05

https://learnopengl.com/

 

teaching platform for the graphics API = OpenGL

 

An object in OpenGL is a collection of options that represents a subset of OpenGL's state.

 

id로 저장 -> id를 이용, obj를 target location of the context에 bind -> window option 설정, un bind the object by setting the current object id of the window target to 0

 

The options we set are stored in the object referenced by objectId and restored as soon as we bind the object back to GL_WINDOW_TARGET

 

1개의 object보다 많이 정의할 수 있음

 

https://learnopengl.com/Getting-started/Creating-a-window

GLFW 소스코드 다운 -> cmake configure/generate -> build glfw.sln

 

'공부일지 > OpenGL' 카테고리의 다른 글

OpenGL - 3 (Shaders)  (0) 2020.03.07
OpenGL - 2 (triangle)  (0) 2020.03.06
OpenGL -1 (window생성)  (0) 2020.03.05

cp 명령어 수행 도중 omitting directory 오류 발생시 그냥 해당 디렉토리를 어떤 사용자가 사용중인 것

 

cp -r 원본디렉 옮길디렉

 

요렇게

 

디렉토리 삭제할 때 디렉토리가 비어있는 것이 아닐 경우

rm -rf 디렉

'공부일지 > etc' 카테고리의 다른 글

선형대수학 - 물리적 벡터  (0) 2020.04.28
선형대수학 - 행렬  (0) 2020.04.28
대용량 구글 드라이브 파일 터미널 다운로드  (0) 2020.01.14
cuda 경로  (0) 2020.01.14
windows에서 cmake 설치하기  (0) 2020.01.14

[1. Octave]

1. 원본 이미지 2배 확대한 이미지에 점진적으로 블러(octave 1)

2. 원본이미지를 점진적으로 블러(Oct.2)

3. 원본이미지를 반으로 축소시킨 이미지에 점진적으로 블러(Oct.3)

4. 또 반으로 축소시킨 후 이미지에 점진적으로 블러(Oct.4)

 

-> 원본 이미지를 일단 2배하는 이유

: DoG이미지를 만들때 같은 옥타브 내에서 인접한 2개의 블러 이미지를 활용해서 만들고, 또 그렇게 생성된 DoG이미지들 중에서 인접한 세 개의 DoG이미지를 활용해서 keypoint를 찾기 때문

 

 

[2. DoG]

octave들을 구한 이후 DoG

 

(모든 octave에서) 전 단계에서 얻은 같은 옥타브 내에서 인접한 두 개의 블러 이미지들끼리 빼주면 됨

-> 결과적으로 4개씩 16장의 DoG를 얻음

 

[3. keypoints]

한 픽셀에서의 극대값, 극소값을 결정할 때에는 동일한 octave내의 세 장의 DoG이미지가 필요

 

지금 체크할 픽셀 주변의 8개 픽셀, scale이 한 단계씩 다른 위 아래 두 DoG이미지에서 가까운 9개 픽셀

-> 총 26개 픽셀 검사

 

체크하는 픽셀의 값이 주변 26개의 픽셀값 중에 가장 작거나 가장 클 때 key point로 인정

 

 

=> 두 장의 극값 이미지를 얻게 됨(4장의 DoG이미지로)

 

4. keypoint 선별

1) 낮은 contrast 제거 -> threshold두기

2) edge위에 존재하는 것들 제거 -> 노이즈를 엣지로 찾아낼 가능성 존재, 코너점들만을 keypoint로 남겨서 안전하게..

=> 수직, 수평 gradient계산 - 모든 방향으로 변화가 크면 코너

=> Hessian Matrix사용

 

=> scale invariance를 만족

 

5. keypoint에 방향 할당

=> rotation invariance를 위해

각 keypoint주변의 gradient방향과 크기를 모으기 -> 가장 두드러지는 방향을 찾아내어 keypoint의 방향으로 할당

=> keypoint 주변에 윈도우를 만들어준 다음 가우시안 블러링 (scale값으로 가우시안 블러링)

 

 

'공부일지 > Computer Vision & Image Processing' 카테고리의 다른 글

Tensorflow in Practice 1, Computer Vision  (0) 2020.06.21
GAN  (0) 2020.06.02
OpenCV, visual studio에서 시작  (0) 2020.05.28
scale  (0) 2020.01.28
OpenCV 정리하기(1)_Finger Count  (0) 2019.10.16

+ Recent posts