주요 콘텐츠

cameraIntrinsicsKB

Kannala-Brandt 모델을 기반으로 하는 카메라 내부 파라미터

R2024a 이후

설명

cameraIntrinsicsKB 객체는 어안 렌즈에 대해 Kannala-Brandt[1] 모델을 사용하여 내부 보정 파라미터에 대한 정보를 저장합니다.

생성

cameraIntrinsicsFromOpenCV 함수를 사용하여 cameraIntrinsicsKB 객체를 생성합니다.

속성

모두 확장

읽기 전용 속성입니다.

초점 거리로, 픽셀 단위의 값을 갖는 [fx fy] 형식의 요소를 2개 가진 벡터로 저장됩니다.

fx = Fsx

fy = Fsy

F는 일반적으로 밀리미터 단위인 세계 단위 초점 거리입니다. sxsy는 각각 x 방향과 y 방향의 세계 단위당 픽셀 개수입니다.

초점 거리 F는 화각에 영향을 미치므로 영상에서 초점이 맞춰진 것처럼 보이는 장면의 영역에 영향을 미칩니다. 피사체와의 거리가 고정된 경우 다음과 같습니다.

  • 초점 거리가 짧으면 화각이 넓어져 카메라가 장면의 더 넓은 영역에서 초점이 맞춰진 상태로 캡처할 수 있습니다. 이를 통해 피사체와 장면 배경 모두를 강조할 수 있습니다.

  • 초점 거리가 길면 화각이 좁아져 초점이 맞춰진 장면의 영역이 줄어듭니다. 이를 통해 피사체가 더 강조되고, 배경은 카메라가 덜 캡처하도록 제한됩니다.

객체 생성 시 이 속성을 설정하는 방법에 대한 자세한 내용은 cameraIntrinsicsFromOpenCV 함수의 intrinsicMatrix 인수를 참조하십시오.

읽기 전용 속성입니다.

카메라의 광학적 중심으로, 픽셀 단위의 값을 갖는 [cx cy] 형식의 요소를 2개 가진 벡터로 저장됩니다. 벡터에는 카메라의 광학적 중심 좌표가 포함됩니다.

객체 생성 시 이 속성을 설정하는 방법에 대한 자세한 내용은 cameraIntrinsicsFromOpenCV 함수의 intrinsicMatrix 인수를 참조하십시오.

읽기 전용 속성입니다.

카메라가 생성하는 영상 크기로, [mrows ncols] 형식의 요소를 2개 가진 벡터로 저장됩니다. 객체 생성 시 cameraIntrinsicsFromOpenCV 함수의 imageSize 인수를 사용하여 이 값을 지정합니다.

읽기 전용 속성입니다.

다항식 계수로, [k1 k2 k3 k4] 형식의 요소를 4개 가진 벡터로 저장됩니다. 이러한 값은 다음과 같이 어안 왜곡 함수의 다항식 계수를 지정합니다.

θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)θ=atan(γ)

k1,k2,k3,k4

여기서 k1, k2, k3, k4는 렌즈의 왜곡 계수입니다.

객체 생성 시 이 속성을 설정하는 방법에 대한 자세한 내용은 cameraIntrinsicsFromOpenCV 함수의 distortionCoefficients 인수를 참조하십시오.

읽기 전용 속성입니다.

카메라 내부 행렬로, 3×3 행렬로 저장됩니다. 행렬의 형식은 다음과 같습니다.

[fx0cx0fycy001]

여기서 cxcyPrincipalPoint에 대응되는 값이고 fxfyFocalLength에 대응되는 값입니다.

객체 생성 시 이 속성을 설정하는 방법에 대한 자세한 내용은 cameraIntrinsicsFromOpenCV 함수의 intrinsicMatrix 인수를 참조하십시오.

예제

모두 축소

작업 공간에서 OpenCV 어안 파라미터를 정의합니다.

intrinsicMatrix = [875.88  0.00   1005.62; ...
                   0.00    874.76 741.52; ...
                   0.00,   0.00,  1.00];
distortionCoeffs = [0.08, -0.16, 0.35, -0.26];

카메라에서 반환되는 영상 크기를 정의합니다.

imageSize =[1500 2000];

OpenCV에서 어안 렌즈의 카메라 내부 파라미터를 가져옵니다.

intrinsicsKB = cameraIntrinsicsFromOpenCV(intrinsicMatrix,distortionCoeffs,imageSize)
intrinsicsKB = 
  cameraIntrinsicsKB with properties:

               FocalLength: [875.8800 874.7600]
            PrincipalPoint: [1.0066e+03 742.5200]
                 ImageSize: [1500 2000]
    DistortionCoefficients: [0.0800 -0.1600 0.3500 -0.2600]
                         K: [3×3 double]

왜곡을 보정할 영상을 불러옵니다.

filename = fullfile(toolboxdir("vision"),"visiondata", ...
    "calibration","gopro","gopro01.jpg");
I = imread(filename);

영상의 왜곡을 보정하고 결과를 표시합니다.

J = undistortImage(I,intrinsicsKB);
imshowpair(I,J,"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.

알고리즘

Kannale-Brandt 모델은 렌즈 왜곡을 고려하여 이상적인 핀홀 모델을 확장함으로써 실제 카메라를 표현합니다

왜곡된 점은 (xdistorted, ydistorted)입니다. 여기서,

xdistorted=θdγ×x

ydistorted=θdγ×y

정규화된 영상 좌표에서 왜곡이 보정된 픽셀 위치는 (x,y)입니다. 여기서,

γ2=x2+y2

θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)θ=atan(γ)

k1,k2,k3,k4

여기서 k1, k2, k3k4는 렌즈의 왜곡 계수입니다.

참고 문헌

[1] Kannala, J., and S.S. Brandt. A Generic Camera Model and Calibration Method for Conventional, Wide-Angle, and Fish-Eye Lenses. IEEE Transactions on Pattern Analysis and Machine Intelligence 28, no. 8 (August 2006): 1335–40. https://doi.org/10.1109/TPAMI.2006.153.

확장 기능

모두 확장

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

버전 내역

R2024a에 개발됨

모두 확장