3D体素的RGBA参数无效

时间:2019-07-20 02:45:11

标签: python matlab matplotlib

我正在尝试让程序读取xyz坐标值和相关RGBA值的.txt文件,然后在3D空间中输出体素。

每当我运行该程序而不尝试为每个体素分配RGBA值时,该程序就会运行良好,并在从.txt文件读取的xyz坐标处输出体素。

ax.voxels(voxel, facecolors=Color, edgecolor='k') #say Color = [1,0,0,1]

但是每当我运行下面的函数并将Color传递给上面的时候:

def assign_rgba(voxel_data, rgba_data, dims, dtype="float"):

    '''voxel is a boolean array of dimension dims
    True where voxels are assigned and False where voxels are unassigned
    '''
    dims = np.atleast_2d(dims).T
    xyz = voxel_data.astype(np.int)
    voxel = np.zeros(dims.flatten(),dtype=np.bool)
    voxel[tuple(xyz)] = True

    '''
    Color is an array that includes RGBA information for each voxel
    '''
    Color = np.zeros(voxel.shape + (4,))
    rgba = rgba_data.astype(np.float)
    Color[...,0][tuple(xyz)] = rgba[0]
    Color[...,1][tuple(xyz)] = rgba[1]
    Color[...,2][tuple(xyz)] = rgba[2]
    Color[...,3][tuple(xyz)] = rgba[3]

return Color

其中,voxel_data是.txt文件中的体素坐标的numpy数组,类似于

[[x1 x2 ...]
 [y1 y2 ...]
 [z1 z2 ...]] # coordinate of 1st voxel is (x1, y1, z1)...

rgba_data是.txt文件中体素的RGBA值的numpy数组,类似于

[[r1 r2 ...]
 [g1 g2 ...]
 [b1 b2 ...]
 [a1 a2 ...]] # RGBA value of 1st voxel is (r1, g1, b1, a1)

和暗淡是某种尺寸,例如[50,50,50]

我收到一个错误:

File "/usr/lib64/python2.7/site-packages/matplotlib/colors.py", line 219, in _to_rgba_no_colorcycle
    raise ValueError("Invalid RGBA argument: {!r}".format(orig_c))
ValueError: Invalid RGBA argument: 0.0

到目前为止,我已经在此演示文件(https://matplotlib.org/3.1.0/gallery/mplot3d/voxels_rgb.html)中检查了颜色类型的dtype和形状

print(rc.dtype)
>>>float64

print(rc.shape)
>>>(16,16,16)

print(colors.dtype)
>>>float64

print(colors.shape)
>>>(16,16,16,3)

以及我在程序中设置dims = [50,50,50]的文件中颜色类型的dtype和形状

print(Color[...,0].dtype)
>>>float64

print(Color[...,0].shape)
>>>(50,50,50)

print(Color.dtype)
>>>float64

print(Color.shape)
>>>(50,50,50,4)

似乎数组的一般形状和数据类型匹配-我有(50,50,50,4)而不是(50,50,50,3),因为我尝试实现RGBA不仅RGB-,但是我的程序崩溃了,而演示程序却没有崩溃。

我也尝试过

  1. 将元组[一些r,g,b,a值]分配为50x50x50彩色数组的元素,这给了我一个错误,我不能将4x1元组分配给50x50x50数组
  2. 将RGBA值强制转换为str /设置dtype = object,这给了我同样的ValueError
  3. 只是传递没有alpha值的RBG值,这给了我同样的ValueError

我不确定从这里做什么。

有人可以给我建议如何解决此错误/以指定的xyz,rbga值可视化多个体素吗?

0 个答案:

没有答案