如何使用TiffImages.jl访问高光谱图像的波段向量值?
解决TiffImages.jl加载多波段哨兵2A图像的波段访问问题
你遇到的问题是因为TiffImages.jl对多波段TIFF(如13波段的哨兵2A图像)采用了TiffImages.WidePixel类型存储每个像素的所有波段值,而非将波段作为数组的第一维度。结合你观察到的像素字段(:color, :extra),可以通过以下方式正确访问波段:
方法一:转换为标准三维数组(推荐)
将整个图像转换为形状为(13, 256, 256)的数组,之后就能像你期望的那样用img_array[波段索引, :, :]访问:
# 定义函数提取单个像素的所有波段值(合并color和extra字段) get_pixel_bands(pixel) = vcat(collect(pixel.color), collect(pixel.extra)) # 转换为三维数组,维度顺序为(波段数, 高度, 宽度) img_array = hcat(get_pixel_bands.(img)...) |> x -> reshape(x, :, size(img)...)
转换完成后:
- 访问第一波段:
img_array[1, :, :] - 访问第二波段:
img_array[2, :, :]
方法二:直接访问单个像素的指定波段
如果不需要批量操作,可直接通过像素的color和extra字段定位波段:
- 先通过
length(img[1,1].color)和length(img[1,1].extra)确认两个字段分别包含的波段数 - 比如第一波段若在
color中,可写为img[i,j].color[1];第N+1波段若在extra中,可写为img[i,j].extra[1]
内容的提问来源于stack exchange,提问作者imantha
相关产品推荐
相关产品推荐

