Запутывание знака матрицы проекции (отредактированное название) - PullRequest
3 голосов
/ 10 мая 2011

Вниз Я отредактировал свой вопрос. Я проецирую Wxyz на изображение (u, v) и получаю неправильный результат. Я не могу понять, где ошибка. Пожалуйста, помогите кому-нибудь разобраться.

Дано:

Wxyzz =
       386.06       197.02      -1821.8            1
       407.32         -108      -1859.1            1
       4.9764       290.92      -1531.2            1
       103.39      -233.07      -1643.2            1
        189.7       320.19      -1667.9            1
       76.279        147.9      -1597.2            1
       47.798      -319.51      -1605.8            1
       164.74       -223.1      -1688.6            1
       482.06      -251.66      -1921.2            1
       226.42      -213.27      -1733.6            1
Wxyz=Wxyz' %';
%# intrinsic

fu = 2640; fv =2640; uo= 1514; vo = 994;

A= [ fu 0  uo 0
      0  fv  vo 0
      0  0  1    0
      0 0   0   1];

Exterior=[-6.6861,12.6118,-8.0660,[-0.4467,-0.3168,0.2380]*pi/180];%# deg 2 rad
%#data
X0=Exterior(1);
Y0=Exterior(2);
Z0=Exterior(3);
ax=Exterior(4);
by=Exterior(5);
cz=Exterior(6);
%#Rotation in X

 Rx = [1  0        0
        0  cos(ax)  -sin(ax)
        0  sin(ax)  cos(ax)];


%#Rotation in Y    
Ry = [cos(by)  0  sin(by)
        0        1  0
        -sin(by) 0  cos(by)];


%#Rotation in Z        
Rz = [cos(cz) -sin(cz) 0
        sin(cz) cos(cz)  0
        0       0        1];
R=Rx*Ry*Rz;

T=[X0;Y0;Z0];
Extrinsic= R';
Extrinsic(:,4) = -(R')* (T);
Extrinsic(4,:)   =  [0 0 0 1]


PImage =  A* Extrinsic* Wxyz;  

%#Obtain the X's
PImage(1 ,:) = PImage(1 ,:) ./ PImage(3 ,:);
%#Obtain the Y's
PImage(2 ,:) = PImage(2 ,:) ./ PImage(3 ,:);

Я получаю

PImage =

       955.93       707.43      -1814.4            1
       939.75       1147.6      -1854.2            1
       1506.3       490.36        -1521            1
       1352.7       1370.2      -1637.6            1
       1213.9       485.04      -1658.4            1
       1389.7       749.08      -1588.5            1
       1440.9       1521.6      -1600.6            1
       1261.2       1344.2      -1683.2            1
       857.22         1340      -1917.8            1
       1173.9       1319.9      -1728.5            1

Я должен был получить (реальные 2 очка D)

img =

       2072.8       706.69
       2088.9       1146.9
       1522.6        489.6
       1676.1       1369.5
       1814.9        484.3
       1639.2       748.35
       1587.9       1520.9
       1767.6       1343.5
       2171.4       1339.3
       1854.9       1319.2

Если я использую A = [-fu 0 uo 0 0 fv vo 0 0 0 1 0 0 0 0 1]; Я получаю ответ. Я не могу понять, где ошибка в ротации или переводе; Почему Pimage (:, 1) не совпадает с img (:, 1). Любая помощь будет благодарна.

1 Ответ

1 голос
/ 10 мая 2011

Вы сделали вращение, и вы сделали преобразование.Что вам нужно сделать, это проекция!Сейчас я не знаю, что именно вы пытаетесь достичь, но я нигде не вижу матрицы проекции.Так что это первое, что вам нужно исправить.

Помните, что выполнение проекции - это операция R4 -> R4.Если вы пытаетесь получить вектор R2, вы пытаетесь сделать что-то еще (больше).

см. Больше в wikipedia .

, если вы действительно хотитечтобы узнать подробности, вы можете смотреть и учиться YouTube

...