我在 Julia 中有一个二维颜色数组
using Images
white = RGB{Float32}(1, 1, 1)
green = RGB{Float32}(0.1, 1, 0.1)
blue = RGB{Float32}(0, 0.1, 1)
A = [white white;
green blue;
blue blue]
Run Code Online (Sandbox Code Playgroud)
我想把每种RGB颜色变成Array{Float32, 3}更高维度的颜色。这是我尝试过的:
B = map(A) do a
[a.r, a.g, a.b]
end
size(B) == (3, 2, 3) # (rows, cols, channels)
# => false
Run Code Online (Sandbox Code Playgroud)
相反,B是一维数组的二维矩阵。
Julia 有类似地图的方法来扩展矩阵的维度吗?
你应该使用 ImageCorechannelview来代替:
julia> Av = channelview(A)\n3\xc3\x973\xc3\x972 reinterpret(reshape, Float32, ::Array{RGB{Float32},2}) with eltype Float32:\n[:, :, 1] =\n 1.0 0.1 0.0\n 1.0 1.0 0.1\n 1.0 0.1 1.0\n\n[:, :, 2] =\n 1.0 0.0 0.0\n 1.0 0.1 0.1\n 1.0 1.0 1.0\nRun Code Online (Sandbox Code Playgroud)\n颜色通道是第一个维度(最快的维度)。您可以通过设置一些值并查看对原始值的影响来检查这一点,因为Av是 的视图A:
julia> Av[1,2,1] = -5\n-5\n\njulia> Av[1,2,2] = -10\n-10\n\njulia> A\n3\xc3\x972 Array{RGB{Float32},2} with eltype RGB{Float32}:\n RGB{Float32}(1.0,1.0,1.0) RGB{Float32}(1.0,1.0,1.0)\n RGB{Float32}(-5.0,1.0,0.1) RGB{Float32}(-10.0,0.1,1.0)\n RGB{Float32}(0.0,0.1,1.0) RGB{Float32}(0.0,0.1,1.0)\nRun Code Online (Sandbox Code Playgroud)\n在这两种情况下,我们都调整了红色通道,因为用作1第一个索引。