주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

estimateExtrinsics

보정된 카메라의 위치 계산

R2022b 이후

설명

camExtrinsics = estimateExtrinsics(imagePoints,worldPoints,intrinsics)는 카메라 외부 파라미터를 반환합니다. 이는 세계 좌표에서 카메라 좌표계로 점을 변환할 수 있는 3차원 강체 변환입니다.

예제

예제

모두 축소

보정 영상 세트를 만듭니다.

images = imageDatastore(fullfile(toolboxdir("vision"),"visiondata", ...
      "calibration","slr"));

영상에서 체커보드 코너를 검출합니다.

[imagePoints,boardSize] = detectCheckerboardPoints(images.Files);

패턴 중심 좌표계에서 왼쪽 위 코너를 (0,0)으로 설정하고 체커보드 코너의 세계 좌표를 생성합니다. 사각형 크기의 단위는 밀리미터입니다.

squareSize = 29;
worldPoints = patternWorldPoints("checkerboard",boardSize,squareSize);

카메라를 보정합니다.

I = readimage(images,1); 
imageSize = [size(I,1) size(I,2)];
cameraParams = estimateCameraParameters(imagePoints,worldPoints, ...
    ImageSize=imageSize);
intrinsics = cameraParams.Intrinsics;

새 위치에 영상을 불러옵니다.

imOrig = readimage(images,9); 
figure 
imshow(imOrig)
title("Input Image")

Figure contains an axes object. The hidden axes object with title Input Image contains an object of type image.

영상의 왜곡을 보정합니다.

[im,newIntrinsics] = undistortImage(imOrig,intrinsics,OutputView="full");

새 영상에서 참조 객체를 찾습니다.

[imagePoints,boardSize] = detectCheckerboardPoints(im);

영상 좌표계 이동을 보정합니다.

newOrigin = intrinsics.PrincipalPoint - newIntrinsics.PrincipalPoint;
imagePoints = imagePoints+newOrigin;

새로운 외부 파라미터를 계산합니다.

camExtrinsics = estimateExtrinsics(imagePoints,worldPoints,newIntrinsics);

카메라 자세를 계산합니다.

camPose = extr2pose(camExtrinsics);
figure
plotCamera(AbsolutePose=camPose,Size=20);
hold on
pcshow([worldPoints,zeros(size(worldPoints,1),1)], ...
  VerticalAxisDir="down",MarkerSize=40);

Figure contains an axes object. The axes object contains 11 objects of type line, text, patch, scatter.

입력 인수

모두 축소

점의 영상 좌표로, M×2 배열로 지정됩니다. 배열에는 M개의 [x, y] 좌표가 포함됩니다. imagePointsworldPoints 입력값은 둘 다 double형이거나 둘 다 single형이어야 합니다.

데이터형: single | double

영상 좌표에 대응하는 세계 좌표로, M×2 행렬로 지정됩니다. imagePointsworldPoints 입력값은 둘 다 double형이거나 둘 다 single형이어야 합니다. 이 함수는 점이 z = 0인 동일평면상에 있고 점 개수 M이 4 이상이어야 한다고 가정합니다.

데이터형: single | double

카메라 내부 파라미터로, cameraIntrinsics, fisheyeIntrinsics 또는 cameraIntrinsicsKB 객체로 지정됩니다. 이 객체는 렌즈 왜곡 파라미터를 포함한 카메라 내부 보정 파라미터에 대한 정보를 저장합니다.

출력 인수

모두 축소

카메라 외부 파라미터로, rigidtform3d 객체로 반환됩니다. 객체의 "R" 속성과 "Translation" 속성은 카메라의 방향과 위치를 나타냅니다.

  • 이 함수는 intrinsicscameraIntrinsics 객체인 경우 렌즈 왜곡을 고려하지 않습니다. 이러한 경우 점을 검출하기 전에 undistortImage 함수를 사용하여 영상의 왜곡을 보정하거나, undistortPoints 함수를 사용하여 검출된 점의 왜곡을 보정할 수 있습니다.

알고리즘

estimateExtrinsics 함수는 worldPointsM×2 행렬로 지정되었는지 여부에 따라 2개의 다른 알고리즘을 사용하여 외부 파라미터를 계산합니다. z= 0인 동일평면상의 점에 대해 M×2 행렬을 사용합니다.

estimateExtrinsics 함수는 닫힌 형식의 단일 영상에 대한 회전 행렬과 평행 이동 벡터를 계산합니다. 보정하는 동안 모든 보정 영상의 재투영 오차를 최소화하기 위해 외부 파라미터가 수치적으로 추정됩니다. 따라서 보정 영상 중 하나에 estimateExtrinsics 함수를 사용하면 보정하는 동안 얻은 값과 약간 다른 회전 행렬과 평행 이동 벡터가 반환됩니다.

확장 기능

모두 확장

버전 내역

R2022b에 개발됨

모두 확장