2013-05-12 4 views
1

У меня есть нормальная карта размера m x n x 3, где каждый пиксель имеет нормальный вектор {Nx, Ny, Nz}. Я хочу повернуть каждый нормальный вектор независимо матрицей вращения. Пусть R является матрицей вращения размера m x n x x 3, где каждый пиксель имеет матрицу вращения размером 3 x 3.3-мерное умножение матрицы в matlab

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

Пожалуйста, помогите!

ответ

1

Я хотел бы попробовать

res = sum(bsxfun(@times, map, R), 4); 

С map Н. mn матрицы с размерности матрицы с размерностью 3 нормальных векторов и Rmn матрицы с размерностью 3 матрица с размерностью матрица с размерностью 3 вращением в вектор.

Coming думать об этом, возможно, придется использовать permute

res = sum(bsxfun(@times, map, permute(R, [1 2 4 3])), 4); % transposing the vectors 

Или, как выразился Harshit:

res = sum(permute(bsxfun(@times, map, R), [1 2 4 3]), 4); % transposing the vectors 
+0

Привет Шай, спасибо за ответ! Вращение, о котором я говорю, - это умножение матрицы, поэтому для каждого пикселя я хотел бы найти Rij * Nij, где Rij - матрица вращения 3x3 пикселя (i, j), а Nij - вектор нормали 3x1 пикселя (i , j), результатом будет 3x1 повернутый нормальный вектор. Является ли ваше решение таким же? Если да, то, пожалуйста, объясните, как это делается. С уважением, –

+0

@HarshitAgrawal Вы знакомы с 'bsxfun'? – Shai

+0

да, он применяет элемент мудрый двоичный оператор. –

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

  • Нет связанных вопросов^_^