카메라 보정과 관련된 문제를 해결하고 있습니다. 아래 이미지에서 X 축이 왼쪽, Y 축이 오른쪽, Z 축이 위를 향한 세계 좌표계를 고려합니다. 3 개의 평면에 걸쳐 균일하게 분포 된 15 점 (x, y, z)을 선택합니다. 격자 선 사이의 거리는 1 인치입니다. 우리는 또한 15 픽셀 (u, v)에 대한 MATLAB 좌표를 얻습니다. 목적은 균일 한 선형 최소 제곱을 사용하여 3x4 카메라 행렬 (M)을 얻은 다음 M을 사용하여 이미지 (u ', v')에 월드 포인트 (x, y, z)를 투영하는 것입니다. 그러나 (u ', v')를 얻는 좌표는 실제 좌표 (u, v)와 비교할 때 매우 작게 보인다. RMS 오류가 너무 커서 투영 된 점이 실제 점 근처의 이미지에 매핑되지 않습니다. 그것을 MATLAB 좌표로 변환하기 위해 스케일링이 필요합니까? 나는 또한 MATLAB에 비교적 익숙하지 않기 때문에 잘 작성되지 않은 코드를 포함하고 있습니다. 카메라 보정 : 3D에서 2D 로의 점 매핑
P=[];% 2nx12 matrix - 30x12 matrix
for i=1:15 %compute P
world_row = world_coords(i,:); % 3d homogeneous coordinates (x,y,z,1)
zeroelem = repelem(0,4);
image_coord = image_coords(i,:);
img_u = image_coord(1);
prod = -img_u*world_row;
row1 = [world_row,zeroelem,prod];
zeroelem = repelem(0,3);
img_v = image_coord(2);
prod = -img_v*world_row;
row2 = [0,world_row,zeroelem,prod];
P=[P;row1;row2];
end
var1 = P'*P;
[V,D] = eig(var1');//compute eigen vector corresponding to least eigen value
m = V(:,1); //unit vector of norm 1
M = reshape(m,3,4); //camera matrix of 3x4 size
%get projected points
proj = M*world_coords';
U = proj (1,:);
V = proj (2,:);
W = proj (3,:);
for i=1:15
U(i) = U(i)/W(i);
V(i) = V(i)/W(i);
end
final = [U;V];//(u',v')
나는 또한 내가 선택한 15 점으로 이미지를 포함하고있다. P1 (u, v) = (286,260) 및 P1 (x, y, z) = (4,0,3)을 취한다. 이것으로 얻은 (u ', v') 값은 작습니다. 아무도 내가 잘못하고있는 것을 지적 할 수 있습니까?