Main Content

단일 카메라 보정의 정확도 평가하기

이 예제에서는 Using the Single Camera Calibrator App 앱 또는 estimateCameraParameters 함수를 사용하여 추정된 카메라 파라미터의 정확도를 평가하는 방법을 보여줍니다.

개요

카메라 보정은 특수한 보정 패턴의 영상을 사용하여 카메라의 파라미터를 추정하는 과정입니다. 이러한 파라미터에는 카메라 내부 파라미터, 왜곡 계수, 카메라 외부 파라미터가 있습니다. 카메라를 보정한 후 다음과 같은 여러 방법으로 추정된 파라미터의 정확도를 평가할 수 있습니다.

  • 카메라의 상대적 위치와 보정 패턴을 플로팅

  • 재투영 오차 계산

  • 파라미터 추정 오차 계산

카메라 보정하기

체커보드 보정 패턴의 영상 세트를 사용하여 카메라 파라미터를 추정합니다.

% Create a set of calibration images.
images = imageDatastore(fullfile(toolboxdir("vision"), "visiondata", ...
    "calibration", "mono"));
imageFileNames = images.Files;

% Detect calibration pattern.
[imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);

% Generate world coordinates of the corners of the squares.
squareSize = 29; % millimeters
worldPoints = generateCheckerboardPoints(boardSize, squareSize);

% Calibrate the camera.
I = readimage(images, 1); 
imageSize = [size(I, 1), size(I, 2)];
[params, ~, estimationErrors] = estimateCameraParameters(imagePoints, worldPoints, ...
                                     ImageSize=imageSize);

외부 파라미터

카메라와 보정 패턴의 상대적 위치를 플로팅하여 보정에서 명백한 오차를 빠르게 발견할 수 있습니다. showExtrinsics 함수를 사용하여 카메라 좌표계의 보정 패턴 위치 또는 패턴 좌표계의 카메라 위치를 플로팅합니다. 패턴이 카메라 뒤에 있는 경우 또는 카메라가 패턴 뒤에 있는 경우 등 명백한 문제를 찾으십시오. 또한 패턴이 카메라에서 너무 멀거나 너무 가까운지 확인하십시오.

figure; 
showExtrinsics(params, "CameraCentric");

Figure contains an axes object. The axes object with title Extrinsic Parameters Visualization, xlabel X (mm), ylabel Z (mm) contains 23 objects of type patch, text, line.

figure; 
showExtrinsics(params, "PatternCentric");

Figure contains an axes object. The axes object with title Extrinsic Parameters Visualization, xlabel X (mm), ylabel Y (mm) contains 47 objects of type patch, text, line.

재투영 오차

재투영 오차는 정확도의 정성적 측정을 제공합니다. 재투영 오차는 보정 영상에서 검출된 패턴 키포인트와, 동일한 영상에 투영되어 대응하는 세계 좌표 점 간의 거리입니다. showReprojectionErrors 함수는 각 보정 영상에서 평균 재투영 오차를 파악하기 쉽게 시각화합니다. 전반적으로 평균 재투영 오차가 너무 높으면 오차가 가장 높은 영상을 제외한 뒤 재보정해 보십시오.

figure; 
showReprojectionErrors(params);

Figure contains an axes object. The axes object with title Mean Reprojection Error per Image, xlabel Images, ylabel Mean Error in Pixels contains 3 objects of type bar, line. This object represents Overall Mean Error: 0.18 pixels.

추정 오차

추정 오차는 추정된 각 파라미터의 불확실성을 나타냅니다. estimateCameraParameters 함수는 추정된 카메라 파라미터 각각에 대응하는 표준 오차가 포함된 estimationErrors 출력을 선택적으로 반환합니다. 반환된 표준 오차 σ(대응하는 파라미터와 동일한 단위)를 사용하여 신뢰구간을 계산할 수 있습니다. 예를 들어 +/- 1.96σ의 신뢰구간은 95%입니다. 즉, 주어진 파라미터의 실제 값이 추정값 1.96σ 내에 있을 확률은 95%입니다.

displayErrors(estimationErrors, params);
			Standard Errors of Estimated Camera Parameters
			----------------------------------------------

Intrinsics
----------
Focal length (pixels):   [  714.1886 +/- 3.3219      710.3786 +/- 4.0579  ]
Principal point (pixels):[  563.6480 +/- 5.3967      355.7252 +/- 3.3036  ]
Radial distortion:       [   -0.3536 +/- 0.0091        0.1730 +/- 0.0488  ]

Extrinsics
----------
Rotation vectors:
                         [   -0.6096 +/- 0.0054       -0.1789 +/- 0.0073       -0.3835 +/- 0.0024  ]
                         [   -0.7283 +/- 0.0050       -0.0996 +/- 0.0072        0.1964 +/- 0.0027  ]
                         [   -0.6722 +/- 0.0051       -0.1444 +/- 0.0074       -0.1329 +/- 0.0026  ]
                         [   -0.5836 +/- 0.0056       -0.2901 +/- 0.0074       -0.5622 +/- 0.0025  ]
                         [   -0.3157 +/- 0.0065       -0.1441 +/- 0.0075       -0.1067 +/- 0.0011  ]
                         [   -0.7581 +/- 0.0052        0.1947 +/- 0.0072        0.4324 +/- 0.0030  ]
                         [   -0.7515 +/- 0.0051        0.0767 +/- 0.0072        0.2070 +/- 0.0029  ]
                         [   -0.6223 +/- 0.0053        0.0231 +/- 0.0073        0.3663 +/- 0.0024  ]
                         [    0.3443 +/- 0.0063       -0.2226 +/- 0.0073       -0.0437 +/- 0.0014  ]

Translation vectors (mm):
                         [ -146.0515 +/- 6.0391      -26.8685 +/- 3.7318      797.9027 +/- 3.9002  ]
                         [ -209.4356 +/- 6.9637      -59.4564 +/- 4.3578      921.8198 +/- 4.6295  ]
                         [ -129.3823 +/- 7.0907      -44.1029 +/- 4.3751      937.6831 +/- 4.4913  ]
                         [ -151.0047 +/- 6.6905      -27.3252 +/- 4.1339      884.2789 +/- 4.3925  ]
                         [ -174.9498 +/- 6.7056      -24.3498 +/- 4.1606      886.4961 +/- 4.6686  ]
                         [ -134.3095 +/- 7.8887     -103.4980 +/- 4.8925     1042.4554 +/- 4.8184  ]
                         [ -173.9844 +/- 7.6891      -73.1690 +/- 4.7812     1017.2386 +/- 4.8126  ]
                         [ -202.9445 +/- 7.4327      -87.9090 +/- 4.6482      983.6957 +/- 4.9072  ]
                         [ -319.8860 +/- 6.3213     -119.8897 +/- 4.0922      829.4582 +/- 4.9591  ]

보정 정확도를 높이는 방법

어떤 재투영 오차 또는 추정 오차가 허용 가능한지 여부는 특정 응용 분야의 정밀도 요구 사항에 따라 다릅니다. 그러나 보정 정확도를 허용할 수 없다고 판단한 경우 다음과 같은 여러 가지 방법으로 정확도를 개선할 수 있습니다.

  • 보정 설정을 수정합니다. 3개의 방사형 왜곡 계수를 사용하여 접선 왜곡 또는 왜도를 추정해 보십시오.

  • 더 많은 보정 영상을 사용합니다. 영상의 패턴은 서로 다른 3차원 방향이어야 하며 시야의 모든 부분에 키포인트가 있도록 배치되어야 합니다. 특히 왜곡 계수에 대한 더 나은 추정값을 얻으려면 키포인트가 영상의 가장자리와 코너 가까이에 있어야 합니다.

  • 재투영 오차가 높은 영상을 제외한 뒤 재보정합니다.

요약

이 예제에서는 카메라 보정 오차를 구하고 해석하는 방법을 다루었습니다.

참고 문헌

[1] Z. Zhang. A flexible new technique for camera calibration. IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(11):1330-1334, 2000.