가장 정확한 카메라 보정을 받으려면 어떻게합니까?


16

우선, 이것이 올바른 스택 교환 보드 가기를 바랍니다. 그렇지 않다면 사과드립니다.

카메라 보정이 필요한 작업을하고 있습니다. OpenCV (C ++) 에서이 작업을 수행하는 코드를 성공적으로 구현했습니다. 내장 된 체스 판 기능과 인쇄 한 체스 판을 사용하고 있습니다.

인터넷에는 체스 판을 두 번 이상보고 각 프레임에서 모서리를 추출하는 자습서가 많이 있습니다.

가장 정확한 카메라 보정을 위해 기능에 제공 할 최적의 뷰 세트가 있습니까? 교정 정확도에 어떤 영향을 미칩니 까?

예를 들어, 아무 것도 움직이지 않고 동일한보기의 이미지 5 개를 주면 웹캠 피드를 바꾸고 정렬을 해제 할 때 약간의 결과가 나타납니다.

참고로 방문하는 사람에게 참고 : 최근 비대칭 원 그리드와 해당 OpenCV 기능을 사용하여 더 나은 카메라 보정을 얻을 수 있음을 알게되었습니다.

답변:


8

서로 다른 시점과 각도에서 보정을 위해 이미지를 촬영해야합니다. 가능한 각도 사이의 차이가 크면 (3 가지 오일러 각도 모두 다를 수 있음), 패턴 직경은 여전히 ​​카메라의 시야에 맞습니다. 더 많은 뷰를 사용할수록 더 나은 보정이 이루어집니다. 교정하는 동안 초점 길이와 왜곡 매개 변수를 감지하므로 최소 제곱 법으로 다른 각도를 얻으려면 필요합니다. 카메라를 전혀 움직이지 않으면 새로운 정보를 얻지 못하고 교정이 쓸모가 없습니다. 일반적으로 초점 거리 만 필요하며 왜곡 매개 변수는 일반 소비자 카메라, 웹 카메라 및 휴대폰 카메라에서도 무시할 수 있습니다. 카메라 사양에서 초점 거리를 이미 알고 있다면 보정이 필요하지 않을 수도 있습니다.

왜곡 계수는 광각 또는 360 °와 같은 "특수"카메라에 더 많이 존재합니다.

다음은 보정 에 대한 Wikipedia 항목 입니다. 그리고 비선형 왜곡 은 대부분의 카메라에서 무시할만한 수준입니다.


Eulers angles에 따르면 x, y에서 체스 판 주위를 회전시키고 (체스 판을 피벗으로 사용) 카메라를 z의 체스 판쪽으로 또는 z에서 멀어지게하는 것입니까? 변형 된 체스 판을 인쇄하고 카메라를 같은 장소에 보관 한 사람에 대해 읽었습니다. 예를 들어 : i.imgur.com/rYzV4.pngi.imgur.com/McG9z.png . 이 같은 것들을 사용하는 것이 현실에서 어리석은 일을 나타내지 않을 수 있기 때문에 잘못된 결정입니까?
치타

카메라 이동에 대해 예. 다시 유지하는 것에 대해 다시 그렇습니다.
mirror2image

@ mirror2image 실제 작업에서는 다른 각도를 변경하는 것이 좋습니다. 그러나 그것은 다른 견해들이 다른 세계 조정 시스템을 가질 것이라는 것을 의미합니다. 객체 포인트를 동일한 조정 시스템에 유지하려면 공유 세계 조정 시스템을 사용해야합니까?
Richard

3

@Ben-뷰 수는 카메라와 필요한 최종 정확도에 따라 다릅니다.

체스 판 이미지를 많이 사용하여 왜곡을 매핑하는 고품질의 저 왜곡 렌즈 (고급 35mm SLR)를 사용하면 왜곡이 불안정 할 수 있습니다. 왜냐하면 왜곡은 픽셀의 일부이기 때문입니다.
이미지 센터가 일반적으로 공칭 x / 2, y / 2의 몇 픽셀 내에 있고 초점에 따라 변경되므로 보드 (또는 카메라)를 회전 한 상태에서 여러 번의 촬영이 필요합니다. 물론 줌은 모든 것을 바꿉니다.

렌즈 칩 중심과 초점 거리 (X 및 Y)를 확보하면 카메라 위치를 제공하기 위해 한 번에 단 하나의 체스 판 만 있으면됩니다.


나는 정말 나쁜 교정을 받고 있으며 정직하게 이유를 알 수 없습니다. 벽에 체스 판이 인쇄되어 있으며 카메라를 다른 위치로 이동하여 체스 판에서 다른 뷰를 갖지만 opencv에서 undistort 기능을 사용할 때마다 원본과 비교할 때 매우 이상하고 왜곡됩니다. 내 카메라는 Microsoft LifeCam Studio 1080p입니다.
Cheetah

@Ben 자동 초점을 비활성화합니다. 작은 렌즈 웹캠에서는 초점 거리와 렌즈 중심이 초점에 따라 바뀝니다. 센터에 잘 맞도록 회전하고 있습니까? 모서리에 사각형이 있습니까? 마지막으로 모든 대상이 모든 사각형을 감지했는지 확인하십시오.
Martin Beckett

자동 초점이 이미 비활성화되었습니다. 충분히 정의 하시겠습니까? 나는 포인트를 얻을 수있는 한 극한의 각도로 노력하고 있습니다. 추출 된 모서리를 이미지에 그리는 함수를 의미하는 경우 "모서리로 나가는 사각형"이 무엇을 의미하는지 잘 모르겠습니다. 나는 또한 모든 모서리가 감지되었는지 확인했습니다. 나는 내 문제가 생각하는 수도 있습니다 내가 교정 기능에 전달하는 고유 매트릭스에 초기 초점 거리를 설정 한 것과 거짓말. 1 : 1, 16 : 9 (웹캠의 가로 세로 비율이라고 생각하는 것)을 시도했지만 NOTHING (할 수있는)도 시도했습니다
Cheetah

@Martin 카메라와 체스 판 사이의 거리를 변경하지 않고 카메라를 문구 위치로 유지하고 체스 판 방향을 변경하여 보정을 수행 할 수 있습니까?

@Santosh-그렇습니다.
Martin Beckett

3

나는이 답변을 여기에 게시하기로 결정했습니다. 잠시 동안, 이것은 Google의 최고 결과로 나타 났으며 그 제안이 도움이되었습니다. 그래서 나는 내 경험을 공유하기로 결정했습니다.

Kinect에서 최상의 스테레오 캘리브레이션을 얻기 위해 수많은 시간을 보냈는데 블로그 게시물 에서 내 팁과 결과를 공유 했습니다 .

스테레오 캘리브레이션, 특히 Kinect에 중점을두고 있지만이 팁은 카메라를 캘리브레이션하려는 모든 사람에게 도움이 될 것입니다.

또한 언젠가 죽거나 호스팅 갱신을 잊어 버린 경우 게시물의 수정 된 인용문이 있습니다.

  1. 가능한 가장 큰 보정 패턴이 있는지 확인하십시오. 위에서 말한 내용을 따르십시오. 전문적으로 멋진 패턴을 인쇄하십시오. 각 사각형이 8cm x 8cm 이상인지 확인하십시오. 또한 캘리브레이션 패턴의 한쪽에 홀수 제곱이 있고 다른쪽에 짝수 제곱이 있는지 확인하십시오 (예 : 9 × 6 또는 7 × 8). 대상의 자세를 올바르게 감지하는 것이 중요합니다. 또한 일부 도구 상자는이 요구 사항이 충족되지 않은 패턴을 감지 할 수 없습니다. 앞에서 언급했듯이, 큰 시트에 인쇄하기에 적합한 패턴은 여기 (9cm 정사각형)와 여기 (10cm 정사각형)에 업로드됩니다.
  2. 인쇄 된 패턴 주위에 충분한 흰색 테두리가 있는지 확인하십시오. 그렇지 않으면 대부분의 도구 상자에서 쉽게 감지 할 수 없습니다.
  3. Kinect가 움직이지 않도록하십시오. Kinect를 삼각대에 마운트하기 위해 마운트를 사용했습니다.
  4. 교정 대상 이미지를 최대한 많이 얻으십시오. 카메라에서 0.5 미터에서 10 미터까지의 거리에서 300 개의 이미지를 사용하여 최상의 보정을 얻었습니다. X, Y 및 Z 축을 중심으로 패턴을 회전 시키십시오. 또한 같은 거리에서 촬영 한 이미지로 뷰를 타일링하십시오. 즉, 하나의 이미지를 촬영하고, 시야에서 다음 타일로 대상을 이동하고, 다른 타일을 촬영 한 후 현재의 모든 것을 "틸트"할 때까지 반복하십시오. 시야. 목표는 가능한 한 각 거리에서 전체 시야를 가리는 것입니다.
  5. 가능하면 MATLAB의 스테레오 교정 앱을 사용하십시오. 각 교정 단계 후에 이상 치를 제거 할 수 있습니다.

3

여기에 원래 게시 한 카메라 보정에 대한 '모범 사례'목록이 있습니다. https://calib.io/blogs/knowledge-base/calibration-best-practices

  • 올바른 크기의 보정 대상을 선택하십시오. 매개 변수를 올바르게 제한하기에 충분히 큽니다. 바람직하게는 약. 카메라 이미지에서 정면 평행으로 볼 때 전체 영역의 절반.
  • 최종 어플리케이션의 대략적인 작업 거리 (WD)에서 교정을 수행하십시오. 카메라는이 거리에 초점을 맞추고 보정 후에는 초점을 변경하지 않아야합니다.
  • 대상의 기능 수가 많아야합니다. 미세한 패턴을 사용하는 것이 좋습니다. 그러나, 어느 시점에서 검출 견고성이 손상된다. 3MPx 이상의 카메라와 조명이 잘 제어되고 좋은 경우에는 미세 패턴 수를 사용하는 것이 좋습니다.
  • 다른 영역에서 이미지를 수집하고 기울입니다. 대상을 움직여 이미지 영역을 완전히 덮고 고른 범위를 목표로합니다. 렌즈 왜곡은 정면 평행 이미지에서만 적절하게 결정될 수 있지만 초점 거리 추정은 단축을 관찰하는 데 달려 있습니다. 정면 평행 이미지와 보드를 수직으로 수평 방향으로 최대 +/- 45도까지 기울여 촬영 한 이미지를 포함합니다. 기능 현지화 정확도가 떨어 지므로 일반적으로 더 많이 기울이는 것은 좋지 않습니다.
  • 좋은 조명을 사용하십시오. 이것은 종종 간과되지만 매우 중요합니다. 보정 대상은 바람직하게는 제어 된 사진 조명에 의해 확산 조명되어야한다. 강한 포인트 소스는 고르지 않은 조명을 발생시켜 감지에 실패하고 카메라의 다이나믹 레인지를 잘 활용하지 못합니다. 그림자도 똑같이 할 수 있습니다.
  • 충분히 관찰하십시오. 일반적으로 교정은 교정 대상을 6 회 이상 관찰하여 수행해야합니다. 고차 카메라 또는 왜곡 모델을 사용하는 경우 더 많은 관측치가 유리합니다.
  • CharuCo 보드와 같이 고유하게 코딩 된 대상을 사용하십시오. 이를 통해 카메라 센서와 렌즈의 가장 자리에서 관측 값을 수집 할 수 있으므로 왜곡 매개 변수를 매우 잘 제한 할 수 있습니다. 또한 단일 기능 지점이 다른 요구 사항을 충족하지 않는 경우에도 데이터를 수집 할 수 있습니다.
  • 교정은 사용 된 교정 대상만큼 정확합니다. 레이저로 인쇄 된 대상은 확인 및 테스트에만 사용하십시오.
  • 보정 대상 및 카메라의 올바른 장착. 더 큰 대상에서 왜곡을 최소화하고 구부리려면 수직으로 설치하거나 단단한 지지대에 평평하게 놓으십시오. 이 경우에는 카메라를 움직이는 것을 고려하십시오. 양질의 삼각대를 사용하고 획득하는 동안 카메라를 만지지 마십시오.
  • 잘못된 관찰을 제거하십시오. 재 투영 오류를주의 깊게 검사하십시오. 뷰당 및 피처 당 이 중 하나라도 이상 값으로 나타나면 제외하고 다시 보정하십시오.

보정 대상에 대한 PDF를 생성하는 온라인 도구는 https://calib.io/pages/camera-calibration-pattern-generator에 있습니다.


안녕하세요, DSP SE에 오신 것을 환영합니다. 자체 홍보 답변은 일반적으로 환영받지 않습니다. 더 높은 품질의 답변을 만들어보십시오.
jojek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.