如何在 python 中将三个 3D numpy 数组转换为 RGB 矩阵
How to convert three 3D numpy arrays to RGB matrix in python
我什至不确定这是否可行,但我是 python 的新手。
我有三个 3D 数据集,每个都是一个 64 x 64 x 50 的 numpy 数组。我试图将每个 3D 数据集组合成一个 3D RGB 图像,其中每个单元格由一个 RGB 值表示,每个颜色通道表示单个数据集的值。
例如,我的数据是在岩石中测得的三种不同同位素,因此我希望 R 代表氧 16、G = 硫 32 和 B = 镁 24 的值。
我已经弄清楚如何使用以下广义方程将每个同位素阵列标准化为 0-255 之间的离散值:
new_arr = ((arr - arr.min()) * (1/(arr.max() - arr.min()) * 255).astype('uint8')
更具体地说,对于我的数据,我有以下内容:
O16R = ((O16.get_data() - np.min(O16.get_data())) * (1/(np.max(O16.get_data()) - np.min(O16.get_data())) * 255).astype('uint8'))
S32G = ((S32.get_data() - np.min(S32.get_data())) * (1/(np.max(S32.get_data()) - np.min(S32.get_data())) * 255).astype('uint8'))
Mg24B = ((Mg24.get_data() - np.min(Mg24.get_data())) * (1/(np.max(Mg24.get_data()) - np.min(Mg24.get_data())) * 255).astype('uint8'))
现在,我想创建另一个 64 x 64 x 50 的 3D 数组,数组中的每个索引都由与上面定义的索引值相对应的 RGB 值定义。
举个简单的例子,如果我有 2 x 1 的小数组:
O16R = (151, 3)
S32G = (2 , 57)
Mg24B = (0, 111)
然后我需要一个生成的 RGB 嵌套矩阵,其值为:
RGB = ( [151,2,0] , [3,57,111] )
我认为我需要创建一个 for 循环,但我一直没弄明白。这是我目前所拥有的,但它不解析数据。
RGB = np.zeros(shape=(64,64,50))
for i in RGB:
RGB = ([O16R, S32G, Mg24B])
如有任何帮助,我们将不胜感激。
IIUC,对于您的最小示例,您可以执行以下任一操作:
# setup:
O16R = (151, 3)
S32G = (2 , 57)
Mg24B = (0, 111)
# using zip:
RGB = np.array(list(zip(O16R, S32G, Mg24B)))
# or just transposing the array:
RGB = np.array([O16R, S32G, Mg24B]).T
两个return:
>>> RGB
array([[151, 2, 0],
[ 3, 57, 111]])
我什至不确定这是否可行,但我是 python 的新手。
我有三个 3D 数据集,每个都是一个 64 x 64 x 50 的 numpy 数组。我试图将每个 3D 数据集组合成一个 3D RGB 图像,其中每个单元格由一个 RGB 值表示,每个颜色通道表示单个数据集的值。
例如,我的数据是在岩石中测得的三种不同同位素,因此我希望 R 代表氧 16、G = 硫 32 和 B = 镁 24 的值。
我已经弄清楚如何使用以下广义方程将每个同位素阵列标准化为 0-255 之间的离散值:
new_arr = ((arr - arr.min()) * (1/(arr.max() - arr.min()) * 255).astype('uint8')
更具体地说,对于我的数据,我有以下内容:
O16R = ((O16.get_data() - np.min(O16.get_data())) * (1/(np.max(O16.get_data()) - np.min(O16.get_data())) * 255).astype('uint8'))
S32G = ((S32.get_data() - np.min(S32.get_data())) * (1/(np.max(S32.get_data()) - np.min(S32.get_data())) * 255).astype('uint8'))
Mg24B = ((Mg24.get_data() - np.min(Mg24.get_data())) * (1/(np.max(Mg24.get_data()) - np.min(Mg24.get_data())) * 255).astype('uint8'))
现在,我想创建另一个 64 x 64 x 50 的 3D 数组,数组中的每个索引都由与上面定义的索引值相对应的 RGB 值定义。
举个简单的例子,如果我有 2 x 1 的小数组:
O16R = (151, 3)
S32G = (2 , 57)
Mg24B = (0, 111)
然后我需要一个生成的 RGB 嵌套矩阵,其值为:
RGB = ( [151,2,0] , [3,57,111] )
我认为我需要创建一个 for 循环,但我一直没弄明白。这是我目前所拥有的,但它不解析数据。
RGB = np.zeros(shape=(64,64,50))
for i in RGB:
RGB = ([O16R, S32G, Mg24B])
如有任何帮助,我们将不胜感激。
IIUC,对于您的最小示例,您可以执行以下任一操作:
# setup:
O16R = (151, 3)
S32G = (2 , 57)
Mg24B = (0, 111)
# using zip:
RGB = np.array(list(zip(O16R, S32G, Mg24B)))
# or just transposing the array:
RGB = np.array([O16R, S32G, Mg24B]).T
两个return:
>>> RGB
array([[151, 2, 0],
[ 3, 57, 111]])