반응형



 

Camera Calibration


영상과 실제 물체간의 관계를 나타내는 폼인 카메라 매트릭스를 얻는 일련의 작업.


카메라 파라미터는 내부 파라미터와 외부 파라미터로 구성된다.

내부 파라미터는 영상좌표와 카메라 좌표간의 관계를 의미하고, 외부 파라미터는 카메라 좌표와 월드좌표간의 관계를 의미한다.


그럼 월드좌표상의 한점과 영상좌표상의 한점의 관계를 알아보자.


이 둘간의 관계에 대한 수식은 다음과 같다.


Pi = K * E * Pw = K * [R|t] * Pw


이 수식에서 Pi는 영상좌표계에서의 한점을 의미하고, K는 내부파라미터, E는 외부파라미터, Pw는 월드좌표계상에서의 한점을 의미한다. 수식을 살펴보면 외부파라미터 E는 3x3의 Rotation 매트릭스와 3x1의 Translation Vector로 이루어짐을 알수 있다.


내부 파라미터 K는 focal length와 skew vector, optical center 등으로 이루어진다.

이것을 수식을 표현하면..


f * (xc/zc) = Sx * (Xi - Ox)

f * (yc/zc) = Sy * (Yi-Oy)


로 표현될 수 있다.


f는 focal length를 의미하고, (xc, yc zc)는 카메라 좌표상의 한점, (Sx, Sy)는 카메라 좌표계와 영상 좌표계간의 크기변화를 의미한다. (Xi, Yi)는 영상 좌표상의 한점, (Ox, Oy)는 Optical Center를 의미한다.


이를 이용해서 월드 좌표상의 한점과 영상 좌표상의 한점과의 관계를 나타내면,


(x, y, z) = P * (X, Y, Z, 1) = K * E * (X, Y, Z, 1)


로 표현될 수 있다. (참고로 x, y, z 벡터의 transpose를 표현해야 하는데 쓰기 힘들어서 생략, Transposed vector라고 생각하자.)


이 식에서 (X, Y, Z, 1)는 월드상의 한점인데 homogenious 좌표계로 표현된 것이고, K는 내부 파라미터, E는 외부파라미터, P는 프로젝션 매트릭스이고 내/외부 파라미터를 이용해서 구한 투영된 영상의 한 점이 (x, y, z)이다. 따라서 이것을 실제 영상좌표계상의 한점 (Xi, Yi)로 표현하면,


Xi = x/z, Yi = y/z


로 표현될 수 있다.


그럼 영상좌표상의 점들과 월드 좌표상의 점들의 관계를 알아 보았다.


이제 카메라의 영상을 이용해서 카메라 파라미터를 얻어보는 방법을 알아보자.

이 단계가 바로 Camera Calibration이다.


Camera Calibration에는 여러가지 방법이 있는데 일반적으로 Zhang이 제안한 방법이 많이 사용된다. 이 방법은 구현된 함수가 OpenCV에 함수로 제공되고 있고 논문이 존재하니 그것을 찾아보도록 하고, 우리는 쉽게 카메라 파라미터를 이해하기 위해서 가장 기본적인 Direct Method를 써서 구해보자.



Direct Method


이 방법은 보정판을 이용하는 방법이다.


우선 이 방법을 사용하기 위해서는 Pi와 Pw를 알아야 한다.

따라서 보정판을 만들고, 그 보정판을 카메라로 촬영한다.

(단, 이 방법의 경우 평면의 보정판을 사용하지 말고, 3차원형태의 보정판(두개의 보정판을 90도로 붙이면 된다.)을 사용하길 권한다. 2차원 보정판을 사용할 경우 zhang의 방법처럼 여러번 촬영해서 사용해야 정확한 값을 얻을 수 있을 것이다. )


그렇게 하면 3차원 상의 점 Pw와 영상의 한점 Pi를 얻을 수 있다.


Pw와 Pi의 Correspondece pair를 이용해서 우리는 Projection Matrix를 구하는 것이 가능하다.

Projection Matrix는 3x4 형태의 행렬이므로 전체 미지수는 12개, 따라서 우리가 필요한 식의 개수는 12개(사실은 11개만 있어도 된다).. 따라서 6쌍의 점들을 알면 우리는 이 문제를 해결하는 것이 가능하다.

이것을 구하는 식을 나타내면 다음과 같다.





사용자 삽입 이미지


다음식을 이용해서 6개의 Pair에 대한 12개의 연립방정식을 구할 수 있고 이것을 행렬형태로 표현할 수 있다. 이렇게 표현한 식을 SVD를 이용해서 풀면 Projection Matrix를 얻을 수 있다. 이 결과를 QR decomposition 하면 내부파라미터와 외부 파라미터를 분리하는 것이 가능해진다.


식 아래의 그림이 실제 Calibration에 대한 전반적인 흐름과 결과를 나태는 그림이다.

(이 결과는 박순용 교수님(http://vision.knu.ac.kr)의 결과를 인용한 것이다. )


몇몇 분들이 종종 문의하는 Camera Calibration에 대해 간단히 요약해 봤습니다.

(일일이 답해줄수가 없습니다. 죄송.. 저도 먹고 노는 것이 아니기 때문에.. )


예전에 봤던 수업 자료를 토대로 아주 간단하게 적어봤습니다. 이보다 간단할 수 없다?? ㅡㅡ;

조금만 공부한 사람들이 보면.. 정말 간단하구나 할 정도인듯??


Direct Method는 정말 간단한 방법으로 두 점사이의 관계만 안다면 쉽게 카메라 칼리브레이션을 수행할 수 있을 겁니다.


written by chamcham


P.S :

종종 쪽지로 이것 저것 문의하시는 분들 계신데... 답해드리기 힘듭니다.

쪽지에 몇자 적으면 끝.. 거기다.. 저도 놀고 먹는 백수가 아니고, 논문도 프로젝트도 해야하는 대학원생인지라... 생활이 있어서.. 제법 바쁩니다.. 그러니 그간 쪽지에 대한 것은.. 이걸로.. Pass.. 하겠습니다. ㅋㅋ

혹.. 프로그래머가 야근 안하는 세상이 오거나.. 제가 로또 된다면... 모르지만.. ㅡㅡ;;

여튼.. 간간히 포스팅되는 걸루 때울듯.. 특히.. 학교 숙제 질문하면 저한테 졸 맞습니다. 숙제는 엄마에게 물어보세요.. ㅡㅡ;;



반응형
반응형

Cylindrical Projection

사용자 삽입 이미지


3d coordinate -> cylinder coordinate -> warped image

3d coordinate to cylinder coordinate


if a point in 3dimension is (X, Y, Z) ...


theta = atan(X/Z)

h = Y/sqrt(X^2+Z^2);


cylinder coordinate to warped images


x' = f*theta + 0.5 * alpha

y' = f*h + yp


it is called forward mapping. this method has one problem that include holes in image.

therefore, we can use linear or bilinear interpolation..

or.. we can use backward mapping .

a result of backward maaping is better than forward maapping.

Therefore, in the following implementations, we choose the warping method based on backward mapping instead of that on forward mapping.


Experiments

사용자 삽입 이미지




반응형
반응형
 

CUDA (Compute Unified Device Architecture)


general purposed gpu programming에 대해 알고 있는가?

알고 있다면, 이게 뭐하는 건지 전혀 설명할 필요가 없을 거다.


그렇다. gpgpu를 쉽게 하기 위해 만든 거니까.. 어디서? nvidia에서..

적절한 라이브러리들도 지원되고 에뮬레이션 모드도 동작하고.. 음..


뭐 그래도 단점이 있다면... 그래픽 카드도 8800 정도는 되야.. 예제가 다 돌아간다는 점 정도.. ㅡㅡ;

내껀 7950인데.. 예제 중에 20% 정도만 돌아간다. ㅡㅡ;


그래.. 그럼 이제 모르는 사람들을 위해서..

컴퓨터 뜯어보면 그래픽 카드가 다 보일것이다. 거기보면 gpu라는 프로세서가 달려있다.

이건 누구나 알겠지? 모른다면... 아마 프로그래밍이랑 관련없는 분이실테니.. 조밑에 수영관련 글이나 읽으시길..


그 gpu는 막강한 프로세서다. 일부 계산에 특화된... 그 계산에선 cpu를 능가할 정도의...

그래.. 그거다. 그 성능 좋은 녀석은 매일 풀로 일하는게 아니다. 적당히 놀고 있다.

3d 게임 같은거하면 거의 풀로 일하겠지만.. 익스플로어나 띄워놓고 지금처럼 블로그나 돌아다니는 수준에선 거의 논다.


그래서 사람들이 일 시키기로 결심을 했다. 노는 꼴을 어떻게 보냐..  나도 뼈빠지게 일하는데..

그래서 얘를 그래픽 작업 말고 다른 일을 시키기로 한거다.

그래서 얘가 잘하는 수학연산등을 시키는거다.

이게 gpgpu다..


그럼 cuda는?

gpgpu 프로그램을 작성하려면 귀찮은 준비 작업들이 필요하다.

계산할 input 데이터를 넣어줄 texture도 만들어야 하고.. output시에 pixel도 읽어야 하고..

거기에 좀 더 낫게 하려고 pingpong buffer니 뭐니.. 아.. 짜증난다.


그래서 이런거 할 필요없이 cuda로 짜라고 해서 nvidia가 던져 준거다.

이런 귀찮은 작업들이 라이브러리에 함수로 정리되어 있고 간단한 코드들은 다 함수로 제공된다.

그냥 짜면 된다.


아.. 세상은 날로 발전하고 있다... 올 여름엔 cuda랑 놀아볼까나..




반응형
반응형
 In  epipolar geometry,

Or : Optical Center Right

Ol : Optical Center Left

Pl : a point in the left image

Pr : a point in the right image


T = Or - Ol
Pr = R(Pl-T)


In Essential Matirx

Pr*E*Pl = 0;
E = TxR


In Fundamental Matirx

Pr'*F*Pl' = 0;


Relation in two matrices


K : intrinsic

U : epipolar line


 E = K.T * F * K
u = F * p
F = K.I.T * E * K.I
U = E * P
u = K.I.T * E * K.I * p




written by chamcham

reference : introductory Techniques for 3d computer vision




반응형
반응형
 

writer : chamcham
reference : Elementary Linear Algebra by ANTON


- 언제나 x가 0인 해를 가짐 : trivial solution

- Ax = y, A는 m(행, 식의 수) x n(열, 변수의 수) matrix

- m개의 A의 열들 중 서로 독립인 열의 수를 m' < m이라 하면, m' < n일 때, 즉 독립인 식의 수 < 변수의 수 일때만 nontrivial solution 을 가짐


Ax = b

- 일반적으로 homogeneous system(Ax=0)에서는 x=0 이라면 항상 해가 된다. 이 해를 trivial solution이라고 한다.

- Ax=0 이 nontrivial solution을 가질 필요충분조건은 A의 column이 linearly independent이기 때문이다. 또한 Ax=0 이 nontrivial solution을 가진다는 이야기는 동시에 수많은 해를 가진다는 이야기와 같다.

만일 A가 정사각행렬이고, nontrivial solution을 가진다면 A는 singular matrix가 된다.




반응형
반응형

Triangulation

writer : chamcham
reference : ENGIN TOLA's MS paper

Triangulation is finding M in 3d space.
it has many solution such as Mid-point, Linear Triangulation, Linear LM etc.

most useful method is Linear Triangulation. because it is very easy in implementation.

equation form is AM = 0
we just solve this linear equation using Pseudo-inverse or SVD.



반응형
반응형
 Stereo Vision

writer : chamcham
reference : Three Dimension Computer Vision..


Stereo Vision have two problem..
Given two images, We want to solve this problem.

the First is correspondence problem.
if point m1 in image plane 1 is given, decide which point m2 in image plane 2 it corresponds to.

the Second is recosntruction problem.
if point m1 and m2 are given, we compute the 3D coordinates of M in the world reference frame.




반응형
반응형

Outlier를 제거하는 알고리즘 중 하나...

( RANSAC's Algorithm )


Given: data - a set of observed data points
model - a model that can be fitted to data points
n - the minimum number of data values required to fit the model
k - the maximum number of iterations allowed in the algorithm
t - a threshold value for determining when a data point fits a model
d - the number of close data values required to assert that a model fits well to data
Return: bestfit - model parameters which best fit the data (or nil if no good model is found)


iterations = 0
bestfit = nil
besterr = something really large
while iterations < k
maybeinliers = n, randomly selected values from data
maybemodel = model parameters fitted to maybeinliers
alsoinliers = empty set
for every point in data not in maybeinliers
if point fits maybemodel with an error smaller than t
add point to alsoinliers
if the number of elements in alsoinliers is > d
% this implies that we may have found a good model now test how good it is
bettermodel = model parameters fitted to all points in maybeinliers and alsoinliers
thiserr = a measure of how well model fits these points
if thiserr < besterr
bestfit = bettermodel
besterr = thiserr
increment iterations
return bestfit


출처 : 인터넷 어딘가... 기억이 잘.. ㅡㅡ;




반응형
반응형

Camera Calibration.

카메라 보정을 한마디로 정의하자면,
intrinsic parameter와 extrinsic parameter를 구하는 것을 Camera Calibration 이라고 합니다.

extrinsic은 카메라 외부의 즉, 위치에 관한 파라미터이고,
intrisic은 카메라 자체 내부의 focal length나 optical center등에 관한 정보 입니다.


여러가지 방법으로 Calibration을 수행할 수 있지만, 그 중에서 가장 단순한 Direct Method의 경우,
intrinsic과 extirinsic을 Projection 매트릭스로부터 구해낼 수 있습니다.


Projection 매트릭스는 image좌표와 world 좌표 간의 매핑을 가능하게 해주는 매트릭스 입니다.
우선 우리는 두 좌표를 이용해서 projection 매트릭스를 구하고


P = K(R|T)

이므로.. 우린 P를 QR Decomposition함으로서 intrinsic과 extrinsic을 구할 수 있습니다.

이러한 방법을 Direct Method 라고 하고,
조금씩 다른 Tsai나 Zhang의 방법들 또한 존재하고 있습니다.


written by chamcham



반응형

+ Recent posts