주요 콘텐츠

undistortFisheyeImage

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

설명

J = undistortFisheyeImage(I,intrinsics)는 영상 I의 렌즈 왜곡을 제거한 후 결과를 영상 J로 반환합니다.

예제

[J,camIntrinsics] = undistortFisheyeImage(I,intrinsics)는 가상 핀홀 카메라에 대응하는 cameraIntrinsics 객체도 반환합니다.

[___] = undistortFisheyeImage(___,interp)는 위에 열거된 구문을 사용하여 보간 방법 interp를 지정합니다.

[___] = undistortFisheyeImage(___,Name=Value)는 위에 열거된 구문의 인수 조합 외에 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다. 예를 들어, "ScaleFactor"=2는 카메라 뷰의 확대 배율을 2배 높입니다.

예제

예제

모두 축소

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

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

images = imageDatastore('calibrationImages');

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

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

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

squareSize = 20; % millimeters
worldPoints = patternWorldPoints('checkerboard',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)')

Figure contains an axes object. The hidden axes object with title Original Image (left) vs. Corrected Image (right) contains an object of type image.

J2 = undistortFisheyeImage(I,params.Intrinsics,'OutputView','same', 'ScaleFactor', 0.2);
figure
imshow(J2)
title('Output View with low Scale Factor')

Figure contains an axes object. The hidden axes object with title Output View with low Scale Factor contains an object of type image.

입력 인수

모두 축소

입력 영상으로, M×N×3 트루컬러 영상 또는 M×N 2차원 회색조 영상으로 지정됩니다. 입력 영상은 실수형 비희소(nonsparse) 형식이어야 합니다.

데이터형: single | double | int16 | uint8 | uint16 | logical

어안 카메라 내부 파라미터로, fisheyeIntrinsics 객체로 지정됩니다.

입력 영상에 사용할 보간 방법으로, 'bilinear', 'nearest' 또는 'cubic'으로 지정됩니다.

이름-값 인수

모두 축소

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: "ScaleFactor"=2는 카메라 뷰의 확대 배율을 2배 높입니다.

출력 영상의 크기로, "same", "full" 또는 "valid"로 지정됩니다.

"full" 출력 영상 크기는 구 형태의 영상을 생성하는 광각 렌즈(반사 굴절 렌즈 포함)로 생성된 어안 영상에는 적합하지 않습니다.

가상 카메라 시점의 초점 거리에 대한 스케일링 인자(단위: 픽셀)로, 스칼라 또는 [sx sy] 벡터로 지정됩니다. x축과 y축을 개별적으로 스케일링하려면 벡터를 지정하십시오. 카메라 뷰의 시점을 확대하려면 스케일을 늘리십시오.

출력 픽셀 채우기 값으로, 'FillValues'와 함께 스칼라 또는 요소를 3개 가진 벡터가 쉼표로 구분되어 지정됩니다. 입력 영상의 역변환된 대응 위치가 완전히 입력 영상 경계 바깥쪽에 있는 경우 출력 픽셀에 채우기 값을 사용합니다. 2차원 회색조 입력 영상을 사용하는 경우 FillValues는 스칼라여야 합니다. 트루컬러 영상을 사용하는 경우 FillValues는 스칼라이거나 RGB 값의 요소를 3개 가진 벡터일 수 있습니다.

출력 인수

모두 축소

왜곡이 보정된 영상으로, M×N×3 트루컬러 영상 또는 M×N 2차원 회색조 영상으로 반환됩니다.

데이터형: single | double | int16 | uint8 | uint16 | logical

왜곡이 보정된 가상 카메라 내부 파라미터로, cameraIntrinsics 객체로 반환됩니다. camIntrinsics 객체는 가상 핀홀 카메라를 나타냅니다. 이 객체는 핀홀 모델 보정 워크플로 함수와 함께 사용할 수 있습니다. 이러한 내부 파라미터는 왜곡이 보정된 영상을 생성하는 시점(perspective)을 갖는 카메라에 대한 것입니다.

  • Computer Vision Toolbox™ 보정 알고리즘은 Scaramuzza[1]가 제안한 어안 카메라 모델을 사용합니다.

참고 문헌

[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.

확장 기능

모두 확장

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2017b에 개발됨

모두 확장