마나님의 외출

잡기장 2013. 9. 26. 15:56

내일부터 2박 3일간 마나님이 집을 비우신다.


그동안 직접 말은 못했지만 나도 좀 남들처럼 방바닥에서 뒹굴면서 예전의 자유와 게으름을 만끽해 봤으면 하는 바람이 있었는데.. 드디어 내일 마나님이 집을 비우신다.


그런데...


사랑스런 애들은 고스란이 남겨두시고 혼자만의 외출이시다.


-----

아내가 육아와 가사 문제로 인해 한동안 우울해 한 적이 있었다.


집안일은 해도해도 끝이 없고.. 아이들을 잘 가르키고 돌보는 것이 아무리 중요하다고 하지만 아이들이 커버린 후, 품을 떠났을 때 남게되는 자신의 모습과 나이를 생각하면 어쩔 수 없는 한숨을 내쉬게 된다는 것이다.


무슨 말을 해줘야 할지도 모르겠고 또 마땅한 해결책이 있는 문제도 아니기에 어찌할까 고민하다가 책을 한권 선물했다.


'아빠를 키우는 아이'란 책인데 한 남자가 2살 딸아이를 키우면서 겪은 일을 쓴 책이다. 책을 읽고난 아내의 소감은 자신이 겪는 감정과 어려움을 남들도 똑같이 느끼고 겪는다는 것, 그리고 자신이 여자라서가 아니라 남자라도 이런 상황에 처하게 되면 누구나 그렇다는 점에서 많은 위로를 받았다고 한다.


아내가 먼저 읽고 난 후 나도 그 책을 읽게 되었다. 그런데 책 중간쯤 남자가 아내에게 딸아이를 맡겨놓고 잠시 휴가(?)를 다녀오는 얘기가 나온다.


문득 깨달아지는 게 있어서 마나님께 내가 잠시 애들을 볼테니 며칠이라도 바람도 쐬고 어디라도 다녀오시라고 했더니.. 설마.. 며칠 후.. 몇월 며칠에 시간이 괜찮냐고 하신다. 아는 언니랑 어디 어디 둘러보시기로 하셨단다.



그게 바로 내일이다. 묘한 기대와 걱정이 섞인...


by 다크 프로그래머


'잡기장' 카테고리의 다른 글

행복과 아이, 공부  (7) 2013.11.07
블로그 방문객 10만명을 기념하며..  (14) 2013.08.29
아내의 하이샤파  (11) 2013.08.10

여러 장의 이미지를 pdf로 만드는 간편한 방법

알아두면 좋은 것들 2013. 9. 26. 10:23

별도 프로그램 설치 없이 윈도우의 기본 기능을 이용해서 간단하게 여러 장의 이미지 파일들을 하나의 pdf 파일로 변환하는 방법입니다.


단, 아래한글 hwp 등을 설치하면 자동으로 깔리는 pdf 인쇄 드라이버만 있으면 OK입니다.


먼저, 변환할 이미지 파일들을 선택합니다.



다음으로 파일들 위에서 마우스 오른쪽 버튼을 클릭하여 나오는 팝업메뉴에서 '인쇄(P)'를 선택합니다.




그러면, 아래 그림과 같이 윈도우즈(windows)에 내장된 기본 기능인 사진인쇄 창이 뜹니다.




이 때, 인쇄할 프린터를 PC에 설치되어 있는 pdf 인쇄 드라이버로 선택해 준 후 인쇄를 누르면 pdf 파일이 생성됩니다.


pdf 인쇄 드라이버로는 아래한글(hwp)를 깔면 자동으로 깔리는 Hancom PDF나 기타 pdf 인쇄 드라이버 등을 설치하여 사용하면 됩니다.


이미지들은 위 그림처럼 한 페이지에 하나씩 배치할 수도 있고, 아니면 아래 그림처럼 여러 이미지들을 배치할 수도 있습니다 (창 오른쪽 배치방식 선택).




pdf 파일로 합쳐지는 그림들의 순서는 탐색기에서의 순서를 따르되, 어떤 파일 위에서 마우스 우클릭을 했느냐에 따라서 첫 이미지가 결정됩니다.


즉, 위 예에서 1.jpg 위에서 우클릭 했다면 1.jpg, 2.png, 3.png 순으로 배치되고, 2.png 위에서 우클릭 했다면 2.png, 3.png, 1.jpg 순으로 배치됩니다.


☞ 유료 adobe pdf 프로그램 설치 없이 이미지들을 pdf로 합치는 방법을 찾다가 발견한 방법입니다. 이미 아시는 분도 있겠지만 ^^


by 다크 프로그래머


'알아두면 좋은 것들' 카테고리의 다른 글

Visual Studio 버전  (6) 2014.03.17
참고 자료들  (3) 2014.03.11
공개 SW 라이센스 GPL, LGPL, BSD  (13) 2013.08.05

solvePnP 함수 사용법과 Rodrigues 표현법

영상처리 2013. 9. 25. 12:43

opencv의 solvePnP 함수 사용법과 3차원 회전변환을 표현하는 한 방법인 Rodrigues' rotation formula에 대한 내용입니다.



1. solvePnP 사용법


solvePnP 함수는 영상을 획득한 카메라의 위치 및 방향 (camera pose)을 알아낼 때 유용하게 사용할 수 있습니다만, 인터넷에 사용법 정보가 잘 없는 것 같아 여기에 적어봅니다.


[solvePnP 사용예제]


// matching pairs

vector<Point3f> objectPoints; // 3d world coordinates

vector<Point2f> imagePoints; // 2d image coordinates


// camera parameters

double m[] = {fx, 0, cx, 0, fy, cy, 0, 0, 1}; // intrinsic parameters

Mat A(3, 3, CV_64FC1, m); // camera matrix


double d[] = {k1, k2, p1, p2}; // k1,k2: radial distortion, p1,p2: tangential distortion

Mat distCoeffs(4, 1, CV_64FC1, d);


// estimate camera pose

Mat rvec, tvec; // rotation & translation vectors

solvePnP(objectPoints, imagePoints, A, distCoeffs, rvec, tvec);


// extract rotation & translation matrix

Mat R;

Rodrigues(rvec, R);

Mat R_inv = R.inv();


Mat P = -R_inv*tvec;

double* p = (double *)P.data;


// camera position

printf("x=%lf, y=%lf, z=%lf", p[0], p[1], p[2]);



위에서 구한 P는 카메라의 위치를 나타내고, 회전변환(월드좌표->카메라좌표) 행렬 R로부터는 카메라의 자세(방향) 정보를 추출할 수 있습니다.



2. Rodrigues' rotation formula (이하 2014.4.22 추가된 내용)


opencv의 solvePnP 함수에서 반환되는 rvec는 Rodrigues를 컴팩트(compact)하게 표현한 벡터입니다. 먼저, Rodrigues가 무엇인지 살펴본 후 opencv에서 사용하는 Rodrigues 표현법에 대해 살펴보겠습니다.


3차원에서 회전변환은 보통 3 × 3 행렬로 표현됩니다. 그런데, Rodrigues를 사용하면 임의의 3차원 회전변환을 4개의 값(회전축 벡터 + 회전각) 만으로 표현할 수 있습니다. 3차원 공간에서 점 p를 회전축 v에 대하여 θ만큼 회전시킨 값은 다음 식에 의해 계산될 수 있는데, 이 식을 Rodrigues' rotation formula라고 부릅니다 (Rodrigues는 이 식을 만든 프랑스 수학자의 이름).


 --- (1)


이 때, v는 단위벡터(unit vector)이어야 하고 회전방향은 오른손 법칙을 따릅니다 (엄지를 펴고 오른손을 쥐었을 때 엄지의 방향이 회전축 방향, 쥔 손가락의 방향이 + 회전방향).


식 (1)을 행렬 형태로 표현하면 다음과 같습니다.


 --- (2)


식 (2)로부터 Rodrigues v = (vx,vy,vz), θ에 대응하는 회전변환 행렬 R이 다음과 같음을 알 수 있습니다.


 --- (3)


식 (3)은 우리가 임의의 회전축에 대한 회전을 회전변환 행렬로 표현할 수 있음을 나타냅니다.


반대의 경우로, 임의의 회전변환 행렬에 대한 Rodrigues 표현은 다음 수식을 이용하여 구할 수 있다고 합니다 (참조: 위키피디아).


 --- (4)



3. opencv에서의 Rodrigues 표현


opencv에서는 회전변환행렬 표현과 Rodrigues 표현 사이의 상호 변환을 위해 Rodrigues()란 함수를 제공합니다. 그런데, opencv에서 사용하는 Rodrigues 표현은 보다 컴팩트(compact)한 형태로서 단 3개의 값만으로 회전변환을 표현합니다.


opencv API 설명문서에 따르면 원래 회전변환은 3 자유도이기 때문에 opencv에서는 회전변환을 rod2 = [a, b, c]의 3차원 벡터로 컴팩트하게 표현하고 이로부터 회전각(θ) 및 회전축 벡터(v)는 다음과 같이 추출합니다.


 --- (5)


 --- (6)


이와같이 solvePnP 함수에서 반환되는 rvec는 Rodrigues에 대한 3차원의 컴팩트한 표현법이므로 회전각 및 회전축을 알기 위해서는 식(5), 식(6)을 이용해야 합니다.



by 다크 프로그래머