카메라 캘리브레이션 프로그램 (DarkCamCalibrator)

개발한 것들 2014.07.17 21:14

카메라 캘리브레이션을 할 때 편하게 사용할 목적으로 개발한 프로그램입니다. 필요하신 분은 편하게 가져다 사용하시기 바랍니다 (실행파일 하나로 구성되어 있으며 별도 설치가 필요없고 바로 실행가능합니다).



다운로드:


DarkCamCalibrator.zip




- 'Live Cam' 버튼을 눌러 웹캠과 실시간 연결한 후 스페이스 바를 눌러서 이미지 획득

- 또는 'Load Images..' 버튼을 눌러 캘리브레이션 패턴을 촬영한 이미지들을 불러옴

- 캘리브레이션에 사용된 패턴(체스판)의 형태는 Grid Rows, Grid Cols, Cell Sz(mm)로 설정

- Grid Rows & Cols는 격자패턴의 가로(행), 세로(열) 방향 격자의 개수이며 Cell sz는 하나의 격자 셀의 실제 크기(단위: mm)

- 'SHOW' 버튼을 누르면 Grid Rows, Grid Cols를 제대로 입력했는지 확인할 수 있음

- 'Detect Corners' 버튼을 눌러서 코너점 검출 (검출에 성공한 경우 자동으로 체크됨)

- 'Calibrate (Polynomial)' 또는 'Calibrate (Fisheye)' 버튼을 눌러서 캘리브레이션 수행

- Fisheye 방법의 경우, 어느 정도 결과값이 수렴하는 것처럼 보이면 "Stop" 버튼을 눌러서 캘리브레이션을 종료시켜야 함

- 단, 이미지 목록에서 체크표시된 이미지에 대해서만 캘리브레이션이 수행됨

- 특정 이미지를 캘리브레이션 과정에서 제외하고 싶으면 이미지 목록에서 체크 해제



굳이 직접 구현한 이유


공개된 카메라 캘리브레이션 프로그램으로 이미 GML Camera Calibration Toolbox라는 훌륭한 프로그램이 있습니다. 그럼에도 불구하고 굳이 다시 구현한 이유는 다음과 같습니다.


개발한 프로그램은 아래 그림처럼 fisheye 렌즈왜곡 모델에 대한 캘리브레이션도 가능합니다.




광각렌즈의 왜곡을 펼때 사용될 수 있는 fisheye 렌즈왜곡 모델은 GML Calibration Toolbox 프로그램이나 OpenCV로는 파라미터를 구할수 없기 때문에 직접 구현해 보았습니다. 그리고, 이왕 구현한 김에 일반적으로 많이 사용되는 polynomial 렌즈왜곡 모델(논문: Z. Zhang. “A Flexible New Technique for Camera Calibration”, IEEE Trans. Pattern Analysis and Machine Intelligence, 22(11):1330-1334, 2000 )도 같이 캘리브레이션이 가능하도록 구현하였습니다.


실제로 해보니 fisheye 모델이 영상 테두리 부분에서 좀더 자연스럽게 왜곡이 펴지는 것 같습니다. 그리고 fisheye 모델은 왜곡보정된 좌표를 atan 함수계산 한번으로 곧바로 구할 수 있다는 장점이 있습니다 (fisheye 모델 논문: F. Devernay and O. D. Faugeras. Straight lines have to be straight. Machine Vision and Applications, 13(1):14–24, 2001.)


카메라 한대로 3차원 공간 매핑 및 위치추적이 가능한 PTAM/PTAMM 기술의 경우 내부적으로 fisheye 모델을 사용하는데, PTAM에서 제공하는 캘리브레이션 프로그램은 너무 버벅대고 사용이 불편합니다. 하지만, 이 프로그램을 이용하면 간단하게 캘리브레이션이 가능합니다.


그리고 또 하나의 이유는 기존 프로그램들은 이미지를 따로 캡쳐한 후 프로그램에서 불러와서 캘리브레이션을 수행해야 하는데, 이게 은근 성가십니다. 그래서 카메라(웹캠)에서 직접 영상을 실시간으로 획득하면서 캘리브레이션을 해 볼수 있도록 프로그램을 구현해 보았습니다.



WebCam + PGR 카메라 지원 버전 다운로드


혹시 필요하신 분이 있을 것 같아서 PGR(Point Grey Research) 카메라 연결을 지원하는 버전도 같이 올립니다. LiveCam 버튼을 누르면 만일 컴퓨터에 PGR 카메라가 연결되어 있으면 웹캠 연결여부와 관계없이 PGR 카메라와 연결되고, PGR 카메라가 없을 경우에는 웹캠과 연결을 시도합니다.


DarkCamCalibratorPGR.zip



참고사항


- Zhang 방법(polynomial 모델)은 opencv의 코드를 그대로 이용한 것이기 때문에 opencv와 성능상의 차이는 없습니다.


- 원래 제가 블로그에 올리는 프로그램들은 windows xp 이상인 모든 pc에서 단독으로 동작하도록 만듭니다만 이번 것은 vista, win 7, ... 이상에서만 동작하고 xp에서는 실행이 안될 수도 있습니다.


- 이미지는 기본적으로 원본 크기로 보여주나 크기가 너무 큰 경우(960 x 720 이상)에는 크기를 줄여서 보여줍니다.


- 최근 일부 모니터의 화면 해상도에서 프로그램의 레이아웃이 이상하게 표시되는 것이 확인되어서 이를 수정한 버전을 2016.7.15일자로 다시 올렸습니다.



by 다크 프로그래머


저작자 표시 비영리 변경 금지
신고
  • 이전 댓글 더보기
  • Astroboy 2015.07.06 22:54 신고 ADDR 수정/삭제 답글

    안녕하세요, 항상 다크프로그래머님의 글을 보며 많이 공부하고 있습니다.
    이 프로그램에서 나오는 결과값에 대한 질문이 있는데요, 여기서 나오는 focal length fx,fy의 단위가 무엇인가요? 처음에는 mm단위라고 생각했는데, 결과값이 수백 단위로 나오는 것을 보아 mm 단위라고 생각하면 물리적으로 불가능한거 같아서 질문 드립니다. (focal length라는 것이 다크프로그래머님께서 다른 글에서 설명하셨듯이 렌즈 중심에서부터 image sensor까지의 거리이니 수백 mm단위는 webcam에서 나올수가 없을 것 같아 문의드립니다.)

    • Astroboy 2015.07.07 01:34 신고 수정/삭제

      카메라 캘리브레이션 (Camera Calibration) 관련 포스팅에 단위가 pixel이라고 해주셨네요....
      잘 찾아보지 않은 저의 불찰입니다.
      항상 감사합니다!

    • BlogIcon 다크pgmr 2015.07.07 14:15 신고 수정/삭제

      그렇지 않아도 본문 중에 있다고 말씀드리려 했는데 찾으셨네요 ^^

  • zelda 2015.07.09 18:04 신고 ADDR 수정/삭제 답글

    안녕하세요, 항상 잘 배우고 있습니다.
    제가 intel사의 creative depth 카메라를 사용하고 있는데요, calibration에 관하여 질문드립니다.

    RGB 카메라의 경우, 사진들을 찍은 다음 올려주신 tool을 이용하여 intrinsic 파라미터들을 얻을 수 있었습니다. 질문은 depth camera(IR)의 intrinsic 파라미터들을 얻는 방법입니다.
    rgb 사진처럼 격자가 선명하게 보이면, 같은 tool을 이용해서 구할 수 있지 않을까 하여 격자 인쇄한 거를 하얀색 부분만 잘라서 없앤 뒤, 공중에 띄워놓고 depth 이미지로 찍어서 도전해봤습니다.
    결과는 실패인데, 아무래도 IR 이미지다 보니까 노이즈가 많아서 그런걸까요? 그냥 찍으면 회색 이미지인지라 노멀라이즈 해서 격자 부분을 까만색으로 convert 시켜도 결과가 잘 안나오네요.. 격자가 많다 보니 끝부분은 흐릿하게 나오는 것도 문제가 될 수 있었을 것 같고요.
    질문 : 이 툴을 이용해서 depth intrinsic 파라미터를 구하기는, 이런 대안들을 활용해봐도 잘 안되는건가요? 혹시 코드를 짜신 입장에서 '이렇게 하면 되지 않을까' 하는 alternative한 대책이 떠오는게 있으신지요ㅠㅠ
    만약 없으시다면, 어떻게 depth 카메라의 intrinsic 파라미터를 구할 수 있는지 아시는 방법이 있다면 가르쳐주실 수 있으신가요.. 찾아봤는데 아직 못 찾아서요ㅜㅜ
    감사합니다.

    • BlogIcon 다크pgmr 2015.07.10 10:06 신고 수정/삭제

      저도 depth 카메라 캘리브레이션에 대해서는 딱히 아는 바가 없습니다만 사용하신 방법도 타당한 방법이라 생각됩니다. 구글에서 tof camera calibration으로 검색해 보시면 어떨까 싶습니다. 저도 여력이 된다면 한번 방법에 대해 찾아보고 싶네요.

  • 공돌이 2015.08.06 11:31 신고 ADDR 수정/삭제 답글

    안녕하세요, 항상 감사히 보고 있습니다. 질문이 있는데요, stereo calibrating에서 한 영상에서의 이미지를 다른 영상으로 옮기는 것을 하고 있습니다. rgb-depth인데요, depth 카메라로 3차원 좌표를 알 수 있으니 이를 rgb 카메라 좌표로 바꾼 다음, K_rgb를 이용하여 rgb 내의 좌표로 표현하고 싶습니다. 여기서 문제가, 변환하였더니 계산 결과가 음수이기도 하고, 엄청 크기도 하고 합니다. 원하는 이미지 크기, 즉 픽셀 가로세로 사이즈는 320*480입니다. 물론 딱 들어맞진 않을 것이라 생각은 했는데, 생각보다 오차가 크네요. 노멀라이즈 같은 방법이 있나요?

    • BlogIcon 다크pgmr 2015.08.06 21:17 신고 수정/삭제

      K-rgb를 적용하기 전에 카메라 좌표를 depth로 나누어서 정규 이미지 좌표로 변환해야 합니다. http://darkpgmr.tistory.com/77 글을 읽어보시면 도움이 되리라 생각합니다.

    • 공돌이 2015.08.07 09:54 신고 수정/삭제

      감사합니다!

  • 미니마니모 2015.08.28 17:30 신고 ADDR 수정/삭제 답글

    안녕하세요. 항상 부족한 지식을 배우기위해 자주 들려서 배우고있습니다 ^^ (꾸벅)

    캘리브레이션이라는걸 처음 접해보는데요, 사용법에 설명해주신 Cell Sz(mm) 셀크기라함은 가로 x 세로 를 말씀하시는건가요, 아니면 한 셀의 길이만을 말씀하시는건가요 ? ^^;

    사진을 22장을 찍어서 SHOW를 눌러보니 Grid size should be even x odd or odd x even이라는데
    제가 뭘 잘못한건지 ..

    초보가 허접한 질문 드려서 죄송합니다 ^^;

  • 미니마니모 2015.08.28 18:13 신고 ADDR 수정/삭제 답글

    제가만든 체스보드로 하니 안되고 ... 다크프로그래머님이 파일에 첨부해주신 체스영상을 출력해서 하니 되네요 ... (-_-;;) Cell사이즈는 한변의 길이였군요^^;

    하지만 바로위에 댓글남겨드린것처럼 Grid size should be even x odd or odd x even 이게 어느상황에서 뜨는 에러인지 모르겠습니다.

    • BlogIcon 다크pgmr 2015.08.28 19:34 신고 수정/삭제

      체스판의 가로방향 격자 개수와 세로방향 격자 개수가 둘다 짝수이거나 둘다 홀수면 뜨는 에러입니다. 지금 보니 에러 메시지가 조금 명확하지 않은 것 같긴 합니다 ^^;

  • 천서린 2015.11.17 15:25 신고 ADDR 수정/삭제 답글

    안녕하세요. 알려주신 자료들이 캘리브레이션을 하는데 많은 도움이 되었습니다.

    그 중에서 GML Camera Calibration Toolbox 를 사용할 때, 캘리브레이션 종류가 세 가지가 있는 것을 확인했습니다.

    Native OpenCV 방법, Modified OpenCV 방법, New method라고 명시해놓은 방법인데요.

    그런데 각각 세 가지 방법이 어떤 논문을 인용한 방법인지 찾아봤는데 잘 찾아지지 않네요.
    그러다보니 본문에 언급하신 논문도 위에서 언급한 방법들 중 어떤 방법을 매칭되는지 모르겠습니다.

    혹시 위 세 가지 방법이 어떤 논문을 인용한 방법들인지 아신다면 가르쳐주실 수 있나요?


    글이 좀 길었는데 읽어주셔서 감사합니다.

    • BlogIcon 다크pgmr 2015.11.17 16:08 신고 수정/삭제

      Native OpenCV는 Z. Zhang, A flexible new technique for camera calibration, IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(11):1330-1334, 2000. 논문을 구현한 것이고 나머지는 저도 알지 못합니다. 직접 gml 사이트에 이메일(avelizhev@graphics.cs.msu.ru)로 한번 문의해 보시면 좋을 것 같습니다.

  • 똘똘이 2015.11.18 18:11 신고 ADDR 수정/삭제 답글

    안녕하세요 fisheye카메라변수는 일반 카메라하고 다른거 같은데 그에 대한 설명을 좀 해주세요. 그와 관려한 국무논문을 소개해줘도 됩니다. 미안합니다.

    • BlogIcon 다크pgmr 2015.11.19 09:13 신고 수정/삭제

      fisheye라 해서 일반카메라와 크게 다르지 않습니다. fisheye 카메라에 일반카메라 모델을 사용해도 무방합니다. 하지만 좀더 정확도를 높이기 위해 fisheye 카메라에 특화된 몇몇 카메라 모델들이 제안되어 온 것으로 알고 있습니다. 그러한 모델들에 대해서는 웹 검색을 활용해 보시고 관련 논문들을 보는게 가장 좋겠습니다만 국문자료는 저도 아는바가 없습니다.

  • 우니 2015.12.06 16:12 신고 ADDR 수정/삭제 답글

    안녕하세요, 오랜만에 다시 들렀습니다.
    궁금한게 생겼는데

    캘리브레이션에 입력이미지로 넣은 axb사이즈 이미지로 얻은 intrinsic, distorsion 파라미터들을 가지고 같은카메라로 촬영한 axb사이즈의 이미지에 어떤 자세로(cvfindextrinsic~~) 물체를 증강시키는건 두말할 필요 없이 잘 됩니다.

    근데 요즘 이미지들(스마트폰만 해도 해상도가 ㄷㄷ) 해상도가 너무 커서 해상도를 줄여서 작업하는데, 위의 axb에서 얻은 intrinsic distorsion 파라미터들을 같은카메라로 찍었지만 해상도를 절반으로 줄인 0.5a x 0.5b이미지에 같은방법으로 extrinsic 파라미터들을 적용하면 증강이 이상하게 되는 현상이 나타납니다. 캘리브레이션 입력이미지도 같이 0.5a x 0.5b로 맞춰주면 해결될것으로 보입니다만,

    한마디로 요약하면 : 똑같은 체스판을 같은위치/방향에서 촬영했지만 이미지 해상도를 변경해서 캘리브레이션을 수행하면 결과로 얻는 파라미터들이 달라질까요? (저는 yes라고 생각합니다) 의견 여줘봅니다!

    • BlogIcon 다크pgmr 2015.12.07 09:14 신고 수정/삭제

      이미지의 크기가 1/2이 되면 fx, fy, cx ,cy도 1/2로 해주면 됩니다.

    • 우니 2015.12.07 21:49 신고 수정/삭제

      (uvw) = k E (xyz)
      여서 uvw가 1/2이면 E가 고정이니 k가 1/2이 되는게 맞나요?
      이론상으로는 그렇게 보이기는 하는데
      캘리브레이션을 할 때 나오는 distorsion coefficients를 고려해서 k 가 계산이 되어서 실제로 원본이미지 캘리브레이션 결과가 1/2이미지 캘리브레이션 결과가 정확하게 절반이 안되는 것 같아 여쭤봅니다.
      비율만큼 줄여서 증강을 시켜보는데도 원본이미지만큼 정확하게 증강이 되질 않네요

    • BlogIcon 다크pgmr 2015.12.08 17:34 신고 수정/삭제

      왜곡 계수는 normalized image 좌표에서 계산되기 때문에 이미지 해상도와는 무관합니다. 아마도 다른 원인이 있을 것으로 생각됩니다..

    • 우니 2015.12.09 09:53 신고 수정/삭제

      다른쪽에도 한번 찾아봤는데,
      실제로 캘리브레이션 계수 f, c에 scale값이 있어서 sf, sc 형태로 있는 것 같습니다. 게다가 scale s가 non linear 형태로 구성되어 있어 다른지 않나 싶네요

  • 갱해이 2016.02.26 01:53 신고 ADDR 수정/삭제 답글

    안녕하세요.
    3D Scanner를 제작하고 있는 대학생입니다.
    스캐닝하기 전에 켈리브레이션을 실행하려고 하는데 별도의 스페이스 바 키 필요없이
    몇초마다 한장씩 찍어서 360도 돌게끔 하고 싶은데요. 방법이 있을까요??

    • BlogIcon 다크pgmr 2016.02.26 10:01 신고 수정/삭제

      윈도우즈 환경이라면 WM_TIMER 메시지를 활용해서 타이머를 설정하시면 되지 않을까요?

  • 롱기 2016.05.01 22:26 신고 ADDR 수정/삭제 답글

    안녕하세요
    프로그램 하면서 궁금한게 있습니다.
    거리에 따라 상관없이 사진을 찍었을때 Focal Length와 principal point 가 똑같이 나와야 하나요??
    거리에 따라 내부파라메터 값은 같다고 생각을 했는데 실제 적용을 해보니 차이가 좀 나서 제가 생각이 잘못 했나 싶어서 질문을 하게 되었습니다.

    • BlogIcon 다크pgmr 2016.05.01 23:20 신고 수정/삭제

      네, 동일해야 합니다만 영상인식 오차(체스판의 꼭지점을 추출하는데 있어서 오차)와 캘리브레이션의 알고리즘의 오차(정확한 해를 구하는 것이 아니라 최적화 기법을 이용해서 해를 근사적으로 탐색) 등으로 인해 결과가 조금씩 달라질 수 있습니다. 체스판이 카메라로부터 멀면 멀수록 꼭지점 추정 오차가 커질 수 있기 때문에 캘리브레이션은 가급적 가까이에서 수행하는 것이 좋습니다. 그리고 만일 그 차이가 생각보다 너무 크다면 혹시 오토 포커싱 기능이 켜져 있는 건 아닌지 확인해 보시기 바랍니다.

  • 연구원 2016.05.02 02:28 신고 ADDR 수정/삭제 답글

    다크님 안녕하세요~
    fisheye 렌즈왜곡 모델에서 추정한 w파라미터(w = 0.029165)가
    의미하는 바가 무엇인지 알려주실 수 있나요? 감사합니당

    • BlogIcon 다크pgmr 2016.05.02 13:31 신고 수정/삭제

      저도 왜곡계수 정도로만 알고 있습니다. w의 의미를 알려면 FOV 왜곡모델의 식이 어떻게 나왔는지 알아야 하는데, 논문에 있는 설명만으로는 알기 어려운 것 같습니다.

  • 누크 2016.06.19 15:12 신고 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님
    캘리브레이션 프로그램을 만드는 중에 궁금한 것이 생겨서 질문드립니다.
    우선 9*6 체스보드에서 좌표를 54개를 찾았습니다.

    x=PX에서
    P = ( a, b, c, d,; e, f, g, h,; i, j, k,l), X(X,Y,Z,1)로 두고
    x= (aX+bY+cZ+d)/(iX+jY+kZ+l)
    y= (eX+fY+gZ+h)/(iX+jY+kZ+i)
    opencv에서 제공하는 svd 클래스를 이용하여 작성하려고 합니다.

    svd를 손으로 몇문제 풀어보고 그 다음
    연립방정식을 구하는 프로그램을 만들어보았습니다.
    연립방정식 AX=B에서 A(2, -1, 1,; 3, 3, 9,;3,3,5)
    B=(1,0,4)를 해서 X값을 구해보는 것 까지는 해봤습니다.

    그런데 문제는 제가 아는 것은 54개의 (x, y) 좌표인데
    x= (aX+bY+cZ+d)/(iX+jY+kZ+l)
    y= (eX+fY+gZ+h)/(iX+jY+kZ+i)
    이것을 어떻게 svd하여서 카메라 매트릭스인 P를 구해야할지 막막하여 질문드립니다...

    • BlogIcon 다크pgmr 2016.06.19 18:45 신고 수정/삭제

      안녕하세요. 체스판을 월드좌표 XY평면으로 보고 한 모서리를 꼭지점으로 생각하면 54개의 (x,y)에 대응하는 (X,Y,Z) 좌표도 알고 있는 셈입니다. 자세한 것은 Z. Zhang의 논문을 보시면 좋지 않을까 싶습니다.

    • 2016.06.19 20:25 수정/삭제

      비밀댓글입니다

    • BlogIcon 다크pgmr 2016.06.19 23:11 신고 수정/삭제

      월드좌표이기 때문에 체스판의 실제 격자 크기를 반영해서 X, Y, Z 값을 적어주면 됩니다. 예를 들어 격자 간격이 30mm라면 원점으로 잡은 꼭지점은 (0,0,0), 그 바로 옆 X축 방향 격자점은 (30, 0, 0), ...와 같이 체스판을 좌표평면처럼 보고 각 격자점들의 실제 좌표를 적어주면 됩니다. 단위는 mm를 사용하던, cm를 사용하던 관계없으며 일관되게만 사용하면 됩니다. 또한 원점, X축, Y축은 체스판에 있는 격자점들을 기준으로 임의로 정하되 모든 이미지에서 일관되게만 정해주면 됩니다.

    • 누크 2016.06.20 00:29 신고 수정/삭제

      정말 감사합니다..ㅠㅠ
      P를 구하는 과정은 완벽히 이해되었습니다.
      하지만 x와 X좌표를 알고도...
      SVD 처리 과정을 아직까지 이해하지 못하여
      손으로라도 마무리 짓도록 해야겠습니다.

  • 태크닉 2016.07.14 14:04 신고 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님 블로그 보며 많은 공부를 하고 있습니다.
    calibration 결과에서 rms가 정확히 무엇을 의미 하는지 궁금합니다.

    • BlogIcon 다크pgmr 2016.07.14 14:33 신고 수정/삭제

      안녕하세요. rms는 root mean square의 약자로서 평균오차 정도로 해석하시면 됩니다. 캘리브레이션을 하면 카메라 모델이 얻어지는데 얻어진 카메라 모델로 계산한 픽셀위치와 영상에서 실제 관측된 픽셀 위치 사이의 오차입니다. 캘리브레이션이 정확할수록 rms는 작은 값을 갖게 됩니다.

    • 태크닉 2016.07.15 17:41 신고 수정/삭제

      아 그러면 다크프로그래머님께서 개발하신 캘리브레이션 툴에서의 rms값은 다른 GML 툴이나 매틀랩 툴에서의 fixel error 값과 동일한 것인가요??
      다크님 툴을 사용해서 구했을때 rms는 0.265 정도의 값이 나오며 GML이나 매틀랩에서 계산한 결과로는 fixel error값이 [0.17 0.18] 수준으로 동일합니다.

    • BlogIcon 다크pgmr 2016.07.15 18:35 신고 수정/삭제

      네 동일합니다. Zhang 방법의 코드는 opencv의 코드를 이용해서 구현했기 때문에 성능상의 차이는 없습니다. 해당 내용을 명시하지 않아서 괜한 혼동을 드린 것 같습니다..(본문에 추가하였습니다)

  • 태크닉 2016.08.01 20:00 신고 ADDR 수정/삭제 답글

    안녕하세요 캘리브레이션 공부중인 학생입니다.
    다크님께서 개발하신 캘리브레이션 툴을 사용해서 어안렌즈의 내부파라미터를 구하는데요,
    총25장의 사진을 확보하여 캘리브레이션 하면 1.0이 넘는 rms가 나옵니다......
    제가 궁금한 것은 통상적으로 어느정도의 rms값(혹은, fixel error 값)을 기준으로 쓸만하다 쓸만하지못하다라고 판단하나요??
    또한 Fisheye모델 캘리브레이션을 수행하면 rms=-1.#IND00 라고 나오는데 어떠한 문제인가요?

    • BlogIcon 다크pgmr 2016.08.02 18:33 신고 수정/삭제

      안녕하세요. rms에 대한 기준이 있는지는 모르겠습니다. 하지만 rms가 1 이상이면 코너점마다 평균 1 픽셀 이상의 오차가 발생했다는 것인데 그 정도면 오차가 큰 편으로 생각됩니다. 해를 못 구하는 경우(rms=-ind00)는 어떤 경우인지 저도 모릅니다. 다양하게 실험을 해 보면서 원인을 찾아보시면 좋을 것 같습니다 (이미지 개수, 조합 등).

  • 태크닉 2016.08.04 14:15 신고 ADDR 수정/삭제 답글

    다크님 안녕하세요 자주 질문하게 되는데요..
    혹시 수평, 수직 화각이 다른 비대칭 어안렌즈의 경우에는 툴을이용한 캘리브레이션이 힘든가요?

    • BlogIcon 다크pgmr 2016.08.05 18:37 신고 수정/삭제

      그건 저도 잘 모르겠습니다. 비대칭 렌즈는 저도 캘리브레이션 해 본 적이 없는데요, 실제로 본 적이 없어서 비대칭 렌즈란게 어떤건지 잘 감이 안오네요.. 렌즈 자체가 비대칭으로 설계된 것인가요?

  • 주니짱 2016.08.10 15:57 신고 ADDR 수정/삭제 답글

    'Calibrate (Polynomial)' 또는 'Calibrate (Fisheye)' 버튼이 비활성화 되어있는데 활성화는 어떻게 시키나요?

    • BlogIcon 다크pgmr 2016.08.10 16:35 신고 수정/삭제

      캘리브레이션 이미지들이 존재하고, detect corner 버튼으로 체스판 코너점들이 찾아지면 자동으로 활성화됩니다.

  • BlogIcon 너부리이놈 2016.09.01 23:15 신고 ADDR 수정/삭제 답글

    안녕하세요.
    잘문몇가지하려고요

    이미지를 여러개 넣으니 fisheye 는 계산을 계속합니다

    Polynomial의 k1,k2,p1,p2 가 계속 0이 나오는데 왜그런건가요?

    휴대폰 카메라를 데스크탑에 연결해서 하고있습니다.

    • BlogIcon 다크pgmr 2016.09.03 18:30 신고 수정/삭제

      fisheye는 원래 계산을 계속하도록 구현되어 있습니다. 육안으로 확인했을 때 어느 정도 값이 수렴하는 것처럼 보이면 "Stop" 버튼을 눌러서 캘리브레이션을 종료시키면 됩니다 (관련 설명이 누락되어 있어서 본문에 추가했습니다).. polynomial로 했을 때 k1, k2, p1, p2가 0이 나오는 건 저도 모릅니다.. 혹시 프로그램에서 distortion 파라미터 추정 기능을 끄고 캘리브레을 수행한 것은 아닌지요?

  • openmin 2016.10.07 10:25 신고 ADDR 수정/삭제 답글

    안녕하세요
    다크님 블로그를 보고 어떤 사물을 cascade 학습을 통해 detection 가능하게 됬는데

    이 detection 된 물체와 카메라의 거리를 카메라 캘리브레이션을 통해 알수가있을까요??

    카메라 (휴대폰 ) 한대 가지고 가능여부를 알고싶습니다.

    정리를하면
    1. 현재 핸드폰으로 어떤 사물인식이 가능한 상태
    2. 사물이 detection 되면 카메라와 detection 된 사물의 거리를 카메라 캘리브레이션을통해 알수있는지? (오차는 상관없음)
    3. 물체와 거리재는 다른 방법이있는지?

    이상입니다.. 가능하다면 시도해볼려고하는데 아직 확신이없어서 문의드립니다.
    답변주시면 감사하겠습니다.

    • BlogIcon 다크pgmr 2016.10.08 05:24 신고 수정/삭제

      저도 잘은 모르지만 카메라의 포커스를 이용해서 거리를 재는 방법이 있는 것 같습니다. Fast Depth from Defocus with Your Mobile Phone for Synthetic Defocus 논문을 한번 참조하시기 바랍니다.

  • 안녕하세요 2017.06.01 14:12 신고 ADDR 수정/삭제 답글

    코너점은 찾아지고 화면에 표시되는데, calibrate 버튼들이 비활성화되어 있는데,
    win7 32bit도 문제없나요?

    • BlogIcon 다크pgmr 2017.06.01 14:33 신고 수정/삭제

      혹시 이미지의 개수가 너무 적어서 그런건 아닌지 모르겠습니다. 이미지를 좀더 추가해 보시기 바랍니다.

  • BlogIcon DRAGONITE 2017.07.18 14:38 신고 ADDR 수정/삭제 답글

    감사합니다. 컴공과 대학생입니다. 응용 프로그램에 opencv 예제 코드를 어떻게 적용했는지가 궁금해요. 소스 코드를 분석해보고 싶은데, 코드를 볼 수 있을까요?

    • BlogIcon 다크pgmr 2017.07.18 20:20 신고 수정/삭제

      소스코드는 gui 등 의존성이 있고 여러가지로 번거로운 문제들이 있기 때문에 공개하지 않습니다. opencv의 samples 폴더에 있는 calibration.cpp 예제코드를 보시면 캘리브레이션 함수 사용법이 있으니 구현에 참고하시면 좋을 것 같습니다.