Main Content

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

어안 보정 기본 사항

카메라 보정은 카메라의 외부 파라미터와 내부 파라미터를 계산하는 과정입니다. 카메라를 보정한 후에는 영상 정보를 사용하여 2차원 영상에서 3차원 정보를 복구할 수 있습니다. 어안 카메라로 촬영한 영상의 왜곡을 보정할 수도 있습니다. Computer Vision Toolbox™에는 핀홀 카메라 모델과 어안 카메라 모델을 위한 보정 알고리즘이 포함되어 있습니다. 카메라에 최대 195도의 시야각(FOV)을 갖는 어안 모델을 사용할 수 있습니다.

어안 카메라는 오도메트리 측정에서 사용되며 동시적 위치추정 및 지도작성(SLAM) 문제를 시각적으로 해결하는 데에도 사용됩니다. 다른 응용 분야로는 감시 시스템, GoPro, 360도 시야각(fov)을 캡처하는 가상 현실(VR) 및 이어 붙이기(stitching) 알고리즘이 포함됩니다. 이러한 카메라는 일련의 복합 렌즈를 사용해 카메라의 시야각을 확대하여 와이드 파노라마 또는 반구형 영상을 캡처할 수 있도록 합니다. 그러나 이러한 렌즈는 영상에서 원근법 선을 왜곡하여 아래와 같이 매우 넓은 각도의 뷰를 생성합니다.

어안 렌즈가 생성하는 과도한 왜곡으로 인해 핀홀 모델은 어안 카메라를 모델링할 수 없습니다.

어안 카메라 모델

Computer Vision Toolbox 보정 알고리즘은 Scaramuzza[1]가 제안한 어안 카메라 모델을 사용합니다. 이 모델은 전방향(omnidirectional) 카메라 모델을 사용합니다. 이 과정에서 영상 시스템은 하나의 집약된 시스템으로 취급됩니다. 3차원 세계 좌표 점을 2차원 영상 위에 연결하기 위해 카메라 외부 및 내부 파라미터를 구해야 합니다. 세계 좌표 점은 외부 파라미터를 사용하여 카메라 좌표로 변환됩니다. 카메라 좌표는 내부 파라미터를 사용하여 영상 평면에 매핑됩니다.

외부 파라미터

외부 파라미터는 회전 R과 평행 이동 t로 구성됩니다. 카메라 좌표계의 원점은 광학적 중심에 놓이며 카메라 좌표계의 x축과 y축에 따라 영상 평면이 정의됩니다.

세계 좌표 점에서 카메라 점으로의 변환은 다음과 같습니다.

Matrix operations showing w, (the scale factor) times the column vector x,y,1 (the image points) equal to P times the column vector x,y,z,1 (the world points). Also, P, (the camera matrix) equal to K, (the intrinsics matrix) times the row vector R, t,(the extrinsics, rotation and translation).

내부 파라미터

어안 카메라 모델의 경우, 내부 파라미터는 투영 함수의 다항식 매핑 계수를 포함합니다. 정렬 계수는 센서 정렬 및 센서 평면에서 카메라 영상 평면의 픽셀 위치로의 변환과 관련이 있습니다.

다음 방정식은 영상 점을 대응하는 3차원 벡터로 매핑합니다.

  • 는 실제 점의 이상적인 영상 투영입니다.

  • 는 스칼라 인자를 나타냅니다.

  • 는 Scaramuzza 모델이 설명하는 다항식 계수입니다. 여기서 입니다.

  • 는 (u,v)의 함수이며 다음과 같이 영상 중심으로부터 점까지의 거리에 따라서만 달라집니다. .

내부 파라미터는 또한 늘이기와 왜곡을 설명합니다. 늘이기 행렬은 센서와 렌즈 간 부정합을 보정하고 왜곡 벡터는 영상 평면의 (0,0) 위치를 조정합니다.

다음 방정식은 실제 왜곡된 좌표 (u'',v'')를 이상적인 왜곡된 좌표 (u,v)에 연결합니다.

MATLAB에서의 어안 카메라 보정

어안 영상에서 렌즈 왜곡을 제거하기 위하여 체커보드 보정 패턴을 검출한 후 카메라를 보정할 수 있습니다. detectCheckerboardPoints 함수와 generateCheckerboardPoints 함수를 사용하여 체커보드 점을 찾을 수 있습니다. estimateFisheyeParameters 함수는 검출된 점을 사용하고 어안 카메라의 내부 파라미터와 외부 파라미터를 포함하는 fisheyeParameters 객체를 반환합니다. fisheyeCalibrationErrors 객체를 사용하여 보정 정확도를 확인할 수 있습니다.

렌즈 왜곡에 대해 어안 영상 보정하기

체커보드 보정 패턴을 검출한 후 카메라를 보정하여 어안 영상에서 렌즈 왜곡을 제거합니다. 그런 다음 결과를 표시합니다.

일련의 체커보드 보정 영상을 수집합니다.

images = imageDatastore('calibrationImages');

영상에서 보정 패턴을 검출합니다. 'PartialDetections' 이름-값 인수는 기본적으로 true로 설정되어 있으며 이에 따라 부분적인 체커보드를 검출할 수 있습니다.

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

체커보드 정사각형의 코너에 대한 세계 좌표를 생성합니다.

squareSize = 20; % millimeters
worldPoints = generateCheckerboardPoints(boardSize,squareSize);

영상 및 세계 좌표 점을 기반으로 어안 카메라 보정 파라미터를 추정합니다. 첫 번째 영상을 사용하여 영상 크기를 가져옵니다.

I = readimage(images,10); 
imageSize = [size(I,1) size(I,2)];
params = estimateFisheyeParameters(imagePoints,worldPoints,imageSize);

첫 번째 영상 I에서 렌즈 왜곡을 제거하고 결과를 표시합니다.

J1 = undistortFisheyeImage(I,params.Intrinsics);
figure
imshowpair(I,J1,'montage')
title('Original Image (left) vs. Corrected Image (right)')

J2 = undistortFisheyeImage(I,params.Intrinsics,'OutputView','same', 'ScaleFactor', 0.2);
figure
imshow(J2)

title('Output View with low Scale Factor')

참고 문헌

[1] Scaramuzza, D., A. Martinelli, and R. Siegwart. "A Toolbox for Easy Calibrating Omnidirectional Cameras." Proceedings to IEEE International Conference on Intelligent Robots and Systems, (IROS). Beijing, China, October 7–15, 2006.

참고 항목

함수

객체

관련 항목