如何在Julia中用类map方法将RGB二维矩阵扩展为三维浮点数组
解决方法
你可以通过以下两种常用方式实现需求:
方法1:使用Images包内置工具(最便捷)
Images包提供的channelview可以直接提取颜色通道,再通过permutedims调整维度顺序即可匹配你需要的「行、列、通道」格式:
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] # 转换代码 channel_first = channelview(A) # 维度顺序为 [通道, 行, 列],尺寸为 (3, 3, 2) B = permutedims(channel_first, (2, 3, 1)) # 调整为 [行, 列, 通道],尺寸为 (3, 2, 3) # 验证结果 @assert eltype(B) == Float32 @assert size(B) == (3, 2, 3)
方法2:手动堆叠(不依赖内置图像处理函数)
你之前的写法只是生成了「元素为一维数组的二维矩阵」,没有把内部数组的维度合并到全局维度中,额外调用stack函数沿第三维堆叠即可:
# 基于你原有map写法补充堆叠操作 B = stack(map(a -> [a.r, a.g, a.b], A), dims=3) # 同样可以得到尺寸为 (3,2,3)的Array{Float32, 3}数组 @assert size(B) == (3,2,3)
注:stack为Julia 1.7及以上版本的内置函数,低版本可以使用cat配合splat操作实现,写法为cat(map(a -> [a.r,a.g,a.b], A)..., dims=3)
内容的提问来源于stack exchange,提问作者liamdiprose
相关产品推荐
相关产品推荐

