Я работаю в Python2.7 с помощью 3D-массивов numpy и пытаюсь извлечь только пиксели, которые попадают на двумерный наклонный диск.Маскирование массива трехмерных чисел с наклонным диском
Вот мой код, чтобы построить границу диска (= круг) Я заинтересован в
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#creating a 3d numpy array (empty in this example, but will represent a binary 3D image in my application)
space=np.zeros((40,40,20))
r = 8 #radius of the circle
theta = np.pi/4 # "tilt" of the circle
phirange = np.linspace(0, 2 * np.pi) #to make a full circle
#center of the circle
center=[20,20,10]
#computing the values of the circle in spherical coordinates and converting them
#back to cartesian
for phi in phirange:
x = r * np.cos(theta) * np.cos(phi) + center[0]
y= r*np.sin(phi) + center[1]
z= r*np.sin(theta)* np.cos(phi) + center[2]
space[int(round(x)),int(round(y)),int(round(z))]=1
x,y,z = space.nonzero()
#plotting
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, zdir='z', c= 'red')
plt.show()
Сюжет дает следующую цифру:
, который является хорошее начало, но теперь я хочу, чтобы получить только значения пикселей space
, которые расположены на диске, определенном кругом: те, которые находятся в розовой зоне на следующем изображении (в моей заявке space
будет быть 3D бинарное изображение, здесь numpy.zeros() просто, чтобы иметь возможность построить и показать вам диск, я хочу):
Как я procede? Я предполагаю, что есть какая-то многократная маскировка, я понимаю, как вы это сделаете в 2D (например, this question), но у меня возникли проблемы с применением этого в 3D.
Что вы подразумеваете под "fall on"? Если пиксель является точкой, нет никакой гарантии, что он пересечет плоскость вообще, не говоря уже о круге. Вы вместо этого хотите заглянуть внутрь цилиндра высотой 1? – Eric
Да, я знаю, что работа с аппроксимацией подходит для этого приложения, поэтому round() в коде, который я показываю: точки на рисунке приблизительно совпадают по кругу. Думаю, вы могли бы сказать, что это эквивалентно поиску точек в цилиндре с 1 пикселем, да. – Soltius