2013-11-17 11 views
0

Мне нужно повернуть изображение вокруг оси y с помощью Matlab.Matlab - вращение вокруг оси общего назначения

Я вставляю свое изображение в трехмерный массив, а затем применяю матрицу преобразования, используя команды affine3d и imwarp.

Это пример:

c = cos(theta); s=sin(theta); 
ux =0; uy=1; uz=0; 
tx =0; ty=0; tz=0; 
tt = [(1-c)*ux^2+c (1-c)*ux*uy-s*uz (1-c)*ux*uz+s*uy tx;... 
(1-c)*ux*uy+s*uz (1-c)*uy^2+c (1-c)*uy*uz-s*ux ty;... 
(1-c)*ux*uz-s*uy (1-c)*uy*uz+s*ux (1-c)*uz^2+c tz; 0 0 0 1]; 
tform = affine3d(tt); 
R = imref3d(size(image)); 
imrot = imwarp(image,R,tform); 

Таким образом, я получаю вращение вокруг оси происхождения, но я хочу, вращение вокруг центра изображения, так что я изменить значение ф.

ty=128 

Но affine3d хочет только [0 0 0 1] как последний столбец.

Есть ли способ повернуть с помощью этих команд или мне нужно найти другой способ?

+0

с быстрым взглядом на документ я думаю, что вам нужно использовать последнюю строку * для кодирования сдвига, а не последний столбец. –

ответ

0

Я ответил на очень похожий вопрос здесь: Homographic image transformation distortion issue

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

EDIT

Вы можете использовать матричную форму Аффинной здесь (с [0 0 0 1] в качестве последней строки), вам просто нужно добавить «1» к каждому индексу столбца (т.е. вместо < 3х3>R*[x y z]', вы хотите сделать с < 4x4>R*[x y z 1]. (Примечание транспонировать, чтобы сделать эту строку столбца.)

Смежные вопросы