【发布时间】:2017-12-09 15:24:59
【问题描述】:
我正在尝试将 julia 中的 .tif 文件作为浮点数组读取。使用 FileIO 和 ImageMagick-Package 我可以做到这一点,但我得到的数组是 Array{ColorTypes.Gray{FixedPointNumbers.Normed{UInt8,8}},2} 类型的。
我可以通过将此 FixedPoint-Array 乘以 255(因为 UInt8)将其转换为 Float32-Array,但我正在寻找一个函数来为任何类型的 FixedPointNumber(即 reinterpret() 或 convert())执行此操作。
using FileIO
# Load the tif
obj = load("test.tif");
typeof(obj)
# Convert to Float32-Array
objNew = real.(obj) .* 255
typeof(objNew)
输出是
julia> using FileIO
julia> obj = load("test.tif");
julia> typeof(obj)
Array{ColorTypes.Gray{FixedPointNumbers.Normed{UInt8,8}},2}
julia> objNew = real.(obj) .* 255;
julia> typeof(objNew)
Array{Float32,2}
我在文档中查找了很长一段时间,但没有找到将给定 FixedPoint-Array 转换为 FloatingPont-Array 而不将其与 Integer 类型的最大值相乘的函数。
感谢您的帮助。
编辑: 我创建了a small gist 以查看 Michael 的解决方案是否有效,并且确实有效。谢谢!
注意:我不知道为什么,但是real.(obj) .* 255-code 不起作用(请参阅要点)。
【问题讨论】:
-
如果有帮助,这会从
obj计算255.0:2.0^FixedPointNumbers.nbitsfrac(typeof(real(first(obj))))-1.0 -
如果类型(例如
UInt8)已知,您可以使用reinterpret(UInt8, obj) |> Array{Float32},这通常是这种情况。值得注意的是,这个类型取决于你的图片文件格式,“FileIO”可能会读取到默认类型错误的图片。