본문으로 건너뛰기

M12.02 · 핀홀·왜곡·내부 파라미터와 투영

단위별 목표·권장 선수와 자료 준비 상태를 확인하고, 공개된 본문과 활동을 읽고 준비 상태를 확인할 수 있습니다.

전체 커리큘럼

학습 안내

본문을 읽고 장비 없는 기본 실습·세 확인 문제와 해설로 이해를 확인하세요.

예상 학습 시간: 미정. 이 페이지 방문이나 자료 열람으로 완료·숙달을 자동 부여하지 않습니다.

현재 경로·이전·다음 단위 확인 ↓

학습 목표

  • 카메라 optical 프레임의 점과 내부 파라미터로 픽셀 투영을 계산하고 단위/유효 조건을 설명한다.
  • 단순 왜곡과 명시된 resize/crop 좌표 변환을 계산하여 영상과 보정 파라미터의 계약을 검사한다.
  • 알려진 깊이의 역투영을 계산하고 깊이Z/거리range 및 한 픽셀의 깊이 모호성을 구분한다.

아래 설명·실습·문제로 각 학습 목표를 확인하세요.

권장 선수

M02의 벡터/좌표, M12.01의 영상 축과 M08.05의 optical frame이 선수다. 기본은 주어진 보정값의 종이 투영이다. 실제 보정 추정/OpenCV·센서 실행이나 GPU가 필요하지 않다. 이미 알고 있다면 직접 열어볼 수 있습니다.

설명 필수

세 목표에 대응하는 검수된 설명·예제를 읽습니다.

투영 전에 좌표계를 정한다

핀홀 모형은 3차원 점에서 카메라 중심을 지나는 광선이 영상 평면의 어느 위치로 가는지 나타낸다. 렌즈 왜곡을 먼저 제외하고, optical 프레임의 +x는 영상 오른쪽/+y는 아래/+z는 전방으로 정한다. 열벡터 p_C=(X,Y,Z)를 이 프레임에서 m 단위로 표현한다. 세계나 로봇 base 좌표를 그대로 넣지 말고 먼저 카메라 optical 좌표로 변환해야 한다. 외부 보정/프레임 계약은 M14.01에서 더 다룬다.

한 픽셀의 깊이 모호성. 왜곡 없는 pinhole 모델의 X/Z 단면이다. 앞쪽 가상 영상면에서 같은 광선 위 P와 2P는 같은 픽셀에 투영된다. 이 그림은 깊이 Z와 광선 거리의 차이, 한 영상만으로 깊이가 정해지지 않는 이유를 보여 준다.그림 원본 크기로 보기

그림 M12.02-1. 왜곡 없는 pinhole 모델의 X/Z 단면이다. 앞쪽 가상 영상면에서 같은 광선 위 P와 2P는 같은 픽셀에 투영된다. 이 그림은 깊이 Z와 광선 거리의 차이, 한 영상만으로 깊이가 정해지지 않는 이유를 보여 준다. 직접 제작.

영상의 가로/세로 픽셀 좌표는 u/v, focal 수치 f_x/f_y와 주점 c_x/c_y는 pixel 단위다. 주점은 광축이 영상 평면과 만나는 기준 위치로 이해하며 항상 영상 정중앙이라고 가정하지 않는다. 여기서는 유효한 f_x/f_y>0, skew가 0인 표준 모형과 Z>0의 전방 점을 쓴다. 내부 행렬 K와 투영은 다음과 같다.

K=(fx0cx0fycy001),u=fxXZ+cx,v=fyYZ+cy.K=\begin{pmatrix}f_x&0&c_x\\0&f_y&c_y\\0&0&1\end{pmatrix},\qquad u=f_x\frac{X}{Z}+c_x,\quad v=f_y\frac{Y}{Z}+c_y.

X/Z와 Y/Z는 무차원이라 pixel 단위 focal 수치를 곱해 픽셀을 얻는다. 물리 렌즈 초점거리의 mm 숫자와 f_x의 pixel 숫자는 다르다. 예를 들어 초점거리 4 mm, 센서 가로 6.4 mm, 영상 너비 640 pixel이라는 이상 조건이면 f_x=640×4/6.4=400 pixel이다. 실제 값은 보정 모형/영상 경로에 맞춰 확인하며 외형 사양만으로 완전한 보정을 대신하지 않는다.

가상 K에서 f_x=f_y=400, c_x=320/c_y=240, 영상 640×480이라고 하자. p_C=(0.1,0.05,1) m면 X/Z=0.1/Y/Z=0.05이므로(u,v)=(360,260) pixel이다. 같은 X/Y에서 Z=0.5 m로 가까워지면(400,280)이다. 반대로 점 전체를 2배 한(0.2,0.1,2) m는 원래와 같은(360,260)이다. 투영이 깊이에 대해 가진 모호성이 이 계산에서 드러난다.

Z=0은 나눗셈이 정의되지 않고 Z<0은 전방 영상의 보이는 점으로 승인하지 않는다. 수식이 유한해도 이미지 범위 밖이면 현재 영상에 들어온 점이 아니다. 가림/렌즈 시야·클리핑도 별도다. OpenCV 공식 calib3d의 카메라 좌표/내부 행렬 정의를 기준으로 쓴다.

왜곡은 정규화 좌표의 다른 변형이다

실제 렌즈는 핀홀에서 벗어날 수 있다. 왜곡 계수는 정한 모델과 함께 읽는다. radial과 tangential, fisheye 모형 등은 같은 계수 배열로 무조건 바꿔 끼울 수 없다. 여기서는 계산을 위해 radial 한 항만 쓰고 나머지 항을 0으로 둔 단순 모형을 명시한다. x=X/Z/y=Y/Z는 정규화 좌표, r²=x²+y², k₁은 무차원 radial 계수다. 왜곡 좌표는 x_d=x(1+k₁r²), y_d=y(1+k₁r²)이고 이를 f/c로 픽셀에 옮긴다.

별도 예로(X,Y,Z)=(0.2,0,1) m, k₁=0.1이면 r²=0.04, 배율은 1.004, x_d=0.2008이다. 위 K의 u는 400.32로 무왜곡 400보다 0.32 pixel 바깥으로 간다. k₁을 물리 m 단위 이동으로 읽거나 픽셀 u 자체에 이 배율을 바로 곱하면 다르다. 이 한 항 계산이 실제 렌즈의 모든 왜곡을 보정했다고 뜻하지는 않는다.

원본 distorted 영상과 undistorted/rectified 영상의 파라미터를 구분한다. 왜곡 제거 과정이 새 내부 행렬/잘린 영역을 만들 수 있으므로 원본 K/D를 출력 영상에 그대로 재사용하지 않는다. D는 정한 모델의 왜곡 계수 집합이다. Jazzy CameraInfo의 K/D/P와 영상 크기/프레임 계약도 확인한다.

resize와 crop은 픽셀 좌표도 바꾼다

이번 교육용 연속 좌표 변환을 u'=s u/v'=s v라고 명시하자. s=0.5로 640×480을 320×240에 대응시키면 focal과 주점도 각각 절반인 200/200/160/120이다. 원래 점(360,260)은(180,130)으로 간다. 실제 resizer의 pixel-center 규약에는 반 픽셀 이동 등이 있을 수 있으므로 이 간단한 대응을 어떤 API에도 무조건 적용하지 않는다. 영상 좌표의 실제 변환식을 기준으로 보정값을 갱신한다.

다른 변형으로 왼쪽 100/위 50 pixel에서 시작하는 crop을 하고 resize는 하지 않는다고 하자. u'=u−100/v'=v−50이므로 점은(260,210), 주점은(220,190)이 되고 focal은 400 그대로다. crop과 resize를 함께 하면 순서와 전체 좌표 변환을 적용한다. 원본/변환 영상의 해상도만 같은지 보는 것이 아니라 어떤 픽셀이 어디로 옮겨졌는지 확인한다.

영상만 절반으로 줄이고 예전 K를 쓰면 잘못된 3차원 광선을 얻는다. 예를 들어 새 u=180을 예전 f_x=400/c_x=320에 넣으면 정규화 x=−0.35이지만 바른 새 K에서는(180−160)/200=0.1이다. 모델이 돌아가도 기하가 틀리는 조용한 오류다. 이미지 변환·보정 개정/해상도·단위/프레임·취득 시각을 함께 기록한다.

한 픽셀은 광선이고 깊이가 있어야 점이 된다

왜곡이 없거나 이미 같은 모형으로 제거된 픽셀과 깊이 Z를 안다면 역투영할 수 있다. Z는 optical z축 방향 깊이다. 아래 X/Y/Z는 m이고 f/c/u/v는 같은 픽셀 좌표 체계다.

X=u−cxfxZ,Y=v−cyfyZ.X=\frac{u-c_x}{f_x}Z,\qquad Y=\frac{v-c_y}{f_y}Z.

(360,260), Z=1이면 X=0.1/Y=0.05로 원래 점을 복원한다. Z를 모르면 λ를 m 단위의 양의 깊이라 두었을 때 λ(0.1,0.05,1)인 모든 점이 같은 픽셀로 간다. 단일 핀홀 투영만으로 λ를 고를 수 없다. 학습 기반 깊이 추정은 다른 자료/가정을 쓰는 추정이며 이 모호성을 기하적으로 없앤 직접 측정과 같지 않다.

range는 카메라 중심에서 점까지의 유클리드 거리로 √(X²+Y²+Z²)다. 위 점에서는 약 1.006231 m로 Z=1 m와 다르다. 센서가 range를 주는데 Z로 그대로 쓰면 광선 방향에 따라 좌표 오차가 생긴다. 반대로 range ρ를 알면 정규화 광선(x,y,1)을 그 길이√(x²+y²+1)로 나눈 단위 방향에ρ를 곱한다. 깊이 0/비유한/무효 코드·프레임/시각 불일치도 입력 정책에 따라 거부/표시한다.

기존 4.1 핀홀에서 물리 센서/좌표를 이어 볼 수 있다. 선택 투영 개념 모형은 별도 핀홀/제한된 시간 이동을 조작하는 보충이며 왜곡·rolling shutter·완전한 6자유도 운동이나 실제 보정 실행은 아니다. 아래 기본 계산은 위젯 없이 수행한다.

관련 기존 자료 · 보충해서 읽기

  • 기존 상세 본문 · 관련 기존 자료 · 보충 참고

    4.1 핀홀 카메라와 좌표 프레임

    설명 범위 충족 · 전체 단위 검수와 별개

    기존 자료의 관련 범위이며 신규 목표 전체의 품질 검수는 아직 진행하지 않았습니다.

  • 기존 상세 본문 · 관련 기존 자료 · 보충 참고

    4.8 구현 예제

    설명 범위 충족 · 전체 단위 검수와 별개

    기존 자료의 관련 범위이며 신규 목표 전체의 품질 검수는 아직 진행하지 않았습니다.

  • 기존 요약 레슨 · 관련 기존 자료 · 보충 참고

    카메라 내부·외부 파라미터

    목표 일부 관련

    핵심 요약 레슨입니다. 자세한 유도·수식·코드는 연결된 상세 본문을 함께 읽으세요.

학습 범위와 한계

기본 설명·예제가 준비되었습니다. 기존 보충 자료의 범위와 구별하세요.

실습 필수

장비 없는 실습을 수행하고 관찰·계산 근거를 해설과 비교합니다.

입력은 위 K/640×480, p=(0.1,0.05,1) m, 왜곡 별도 점(0.2,0,1)과 k₁=0.1, 명시된 절반 resize와 crop이다.

  1. 기본/가까운 Z=0.5/전체 2배 점을 투영하고 단위·Z/영상 범위 조건을 설명한다.
  2. 별도 왜곡점의 u와 절반 resize/crop의 점·주점을 계산한다. 오래된 K를 재사용했을 때의 광선 오류를 진단한다.
  3. 기본 픽셀과 Z=1의 역투영·range를 구한다. Z가 없거나 range만 있으면 무엇이 다른지와 필요한 기록을 적는다.

관찰은 투영·영상/모형 변환·역투영/한계로 나눈다. 막히면 optical 좌표→정규화→왜곡→픽셀 순서를 적는다. 실제 센서나 OpenCV를 실행할 필요는 없다.

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

관련 기존 자료 · 보충해서 읽기

  • 기존 실습 원고 · 관련 기존 자료 · 보충 참고

    [SIM] 실습 4-1: 카메라 투영과 프레임 정합

    목표 일부 관련

    실습 원고 참조. 로컬/ROS/Isaac/GPU/실물 실행과 장비 없는 기본 경로의 목표 검수는 미실시. 연결된 원고의 환경·절차를 확인하세요. 원고 열람은 실습 수행을 뜻하지 않습니다.

  • 코드·원본 파일 · 관련 기존 자료 · 보충 참고

    04_sensor_data_pipeline/code/camera_geometry.py

    목표 충족 범위 없음

    파일 열람은 코드 실행·실습 완료를 뜻하지 않습니다.

학습 범위와 한계

기본 실습은 장비 없이 수행합니다. 실제 장비·GPU 실증을 완료했다는 뜻은 아닙니다.

평가·해설 필수

목표별 세 서술문항에 답하고 해설·판정 기준으로 자기검토합니다.

확인 문제 Q1

위 K에서 p=(0,0,2) m와 p=(0,0,1) m의 픽셀은 무엇인가? 같은 픽셀이므로 같은 3차원 점인가? Z=0/음수는 어떻게 판정하는가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q2

교육용 u'=0.5u/v'=0.5v 규약으로 영상을 줄였다. 기본점/새 focal·주점은 무엇인가? 별도 crop만 왼쪽 100/위 50에서 했다면 주점은 무엇인가? 실제 API의 어떤 규약도 확인해야 하는가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

확인 문제 Q3

기본 픽셀(360,260)에 깊이 Z=2 m를 넣은 역투영과 range를 구하라. 픽셀만 있고 깊이/거리 자료가 없는데 상자 중심을 3차원 집기점이라고 할 수 있는가?

0 / 8,000자 · 확인하면 이 브라우저에 저장

답안을 작성하고 확인하기를 한 번 선택하면 해설·판정 기준을 열어볼 수 있습니다.

관련 기존 자료 · 보충해서 읽기

  • 기존 서술 문항 · 관련 기존 자료 · 보충 참고

    \(K\)의 \(f_x\)가 두 배가 될 때 같은 3D 점의 픽셀 좌표가 어떻게 변하는가?

    목표 일부 관련

    개별 해설/루브릭의 목표별 충분성은 후속 단위 검수. AI 평가·코드 실행 통과를 의미하지 않음.

    기존 교재 해설·평가 기준을 참고할 수 있습니다. 답안 평가 후 화면의 비교 항목도 확인하세요.

  • 기존 서술 문항 · 관련 기존 자료 · 보충 참고

    optical-axis depth와 Euclidean range의 차이를 그림과 식으로 설명하라.

    목표 일부 관련

    개별 해설/루브릭의 목표별 충분성은 후속 단위 검수. AI 평가·코드 실행 통과를 의미하지 않음.

    기존 교재 해설·평가 기준을 참고할 수 있습니다. 답안 평가 후 화면의 비교 항목도 확인하세요.

  • 기존 보고서 · 관련 기존 자료 · 보충 참고

    실습 보고서 · 기존 원고와 평가 안내

    목표 일부 관련

    개별 해설/루브릭의 목표별 충분성은 후속 단위 검수. AI 평가·코드 실행 통과를 의미하지 않음.

    개별 모범답안은 미작성입니다. 기존 관련 개념에 근거한 AI 피드백이며 추론한 해설을 구분해야 합니다.

  • 기존 요약 점검 · 관련 기존 자료 · 보충 참고

    내부 파라미터 K가 답하는 질문을 쓰세요.

    목표 일부 관련

    단답은 키워드 포함 여부이며 의미 이해를 보장하지 않음

    기존 교재 해설·평가 기준을 참고할 수 있습니다. 답안 평가 후 화면의 비교 항목도 확인하세요.

학습 범위와 한계

서술답안과 해설이 준비되었습니다. 자기검토와 학습 완료는 숙달 인증과 별개입니다.

선택 보충 · 핀홀 투영과 시각 차이

optical 좌표의 x 오른쪽·y 아래·z 앞을 사용합니다. 점은 Z>0이며 상대 x속도가 일정하고 두 시각의 깊이는 같습니다. 같은 clock에서 Δt>0은 나중, Δt<0은 이전 시각입니다. 왜곡 없는 핀홀의 연속 이미지 좌표를 계산합니다.

640×480 가상 이미지 · 왼쪽 위 (0,0), 오른쪽 u+, 아래 v+. 파란 원: 기준 시각, 주황 마름모: t+Δt. 점이 겹치면 마름모 안에 원이 보입니다. 프레임 밖 점·선은 그림에서 잘리며 수치는 제한하지 않습니다.

기준 투영 (u,v) = (360.0000, 260.0000) px · 프레임 안

t+Δt 투영 (u,v) = (364.0000, 260.0000) px · 프레임 안

부호 있는 Δu = 4.0000 px, ΔX = 0.0100 m. v의 변화는 0 px입니다.

축 깊이 Z = 1.0000 m. 기준 유클리드 거리 = 1.0062 m, 비교 거리 = 1.0073 m. 광선 거리와 z축 깊이는 같은 양이 아닙니다.

식·단위·프레임 경계와 검증 한계
u = fx·X/Z + cx, v = fy·Y/Z + cy
X' = X + vx·Δt, Y' = Y, Z' = Z
Δu = fx·vx·Δt/Z (px)
ΔX = vx·Δt = (Z/fx)·Δu (m)
range = sqrt(X² + Y² + Z²) (m)

X,Y,Z는 m, v_x는 m/s, Δt는 s, f_x,f_y,c_x,c_y는 px 단위입니다. f_x/f_y와 Z는 양수입니다. 픽셀당 m 비율 Z/f_x는 현재 깊이의 수평 방향에만 적용됩니다. 깊이를 모르면 픽셀 차이만으로 m를 확정할 수 없습니다.

프레임 안 규칙은 0≤u<640, 0≤v<480입니다. u=640 또는 v=480은 밖입니다. 밖에서도 수학적 투영은 유효하지만 실제 영상 픽셀을 선택할 수 있다는 뜻은 아닙니다. 반올림한 표시가 경계와 같아 보여도 판정은 반올림 전 값을 사용합니다.

두 clock의 오프셋 추정, 깊이 변화·6DoF 운동, 렌즈 왜곡·rolling shutter·가림·검출 오차는 포함하지 않습니다. 실제 CV·카메라·센서 실행이나 보정 결과가 아니며 관측의 타당성을 증명하지 않습니다.

이 선택 보충은 본문·실습·세 문항과 별도입니다. 조작은 답안·진도·학습 완료를 자동 저장하거나 변경하지 않습니다.

참고 자료

학습 확인

실습과 세 문항의 답안을 해설과 비교한 뒤, 이 단위의 학습 완료를 직접 기록할 수 있습니다. 자기검토·학습 완료는 자동 채점이나 숙달 인증과 별개입니다.

실습1개·확인 문제3개의 답안을 저장하고 각각 자기검토를 기록하세요.

학습 이동

학습 단계 순서 · 공통 과정 이후 전문화 선택

전체 목차로 돌아가기 →

신규 활동의 답안은 이 브라우저의 통합 학습 기록에 저장합니다. 기존 화면의 답안·진도는 원래 키를 유지합니다. AI 강사는 현재 단위의 준비 상태·부족한 범위와 연결된 실제 자료를 참고합니다.