Фон:
Вариант использования: Я хочу построить трехмерную сетку человеческого тела из нескольких изображений.Точнее говоря, сейчас я пытаюсь повернуть трехмерный массив numpy, чтобы я мог применить следующую «маску» человеческого тела, чтобы я мог получить воксельное представление кожи, из которого можно сделать меш наиболее конкретнопроблема в том, что scipy.ndimage.rotate()
не делает то, что мне нужно для 3-х измерений (хотя отлично работает для 2-х измерений).Это также не подходит для произвольных углов поворота (т.е. 72,9 градуса вместо 90,0 градуса).Он либо оставляет «выключенные» вокселы там, где должны быть «включенные» воксели, либо (если я использую непрерывные числа вместо логических значений), он оставляет МНОГО «включенных» вокселей, где должны быть выключены вокселы.Есть ли лучшая функция rotate()
, которая решает эту проблему шума?
Информация о версии:
Особенности версии: python 2.7.15: Anaconda, Inc. numpy 1.11.3 py27h3dfced4_4 numpy-base 1.14.5 py27hdbf6ddf_4 scipy 1.1.0 py27hc49cb51_0 выходные данные uname -a
: Linux elon-eats-my-shorts 4.15.0-42-generic # 45 ~ 16.04.1-Ubuntu SMP Mon Nov 19 13:02: 27 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
Код:
#====================================================
def rot8(model, angle):
xy=(1,0); return uint_mids( scipy.ndimage.rotate(model, angle, axes=xy, reshape=False, mode='constant'))
#====================================================
def uint_mids(arr):
# NOTE: do we want this to run on floats? TODO: try multiple ways (first on uint8, then float, etc.)
UINT8_MAX=np.iinfo('uint8').max; MID=int(round(UINT8_MAX/2.))
arr[np.greater(arr, 0)]=MID; return arr
#====================================================
Результаты:
Я ожидаю этихВ результате plt.show () выглядит как двухмерное изображение человеческого тела с минимальным шумом.Вместо этого я либо получаю A) отверстия внутри человеческого тела, либо B) "тело" снаружи, где оно должно быть:
A)
B)
Для минимального примера неточности scipy.ndimage.rotate()
, пожалуйста, поиграйте с кодом в по этой ссылке .re: John
До вращения:
После вращения:
Метод rotate()
создал новые воксели!Я ищу rotate_in_3D()
метод, который не делает этого