Search code examples
juliatiffgeotiff

Converting a Gray-Scale Array to a FloatingPoint-Array


I am trying to read a .tif-file in julia as a Floating Point Array. With the FileIO & ImageMagick-Package I am able to do this, but the Array that I get is of the Type Array{ColorTypes.Gray{FixedPointNumbers.Normed{UInt8,8}},2}.

I can convert this FixedPoint-Array to Float32-Array by multiplying it with 255 (because UInt8), but I am looking for a function to do this for any type of FixedPointNumber (i.e. reinterpret() or convert()).

using FileIO
# Load the tif
obj = load("test.tif");
typeof(obj)
# Convert to Float32-Array
objNew = real.(obj) .* 255
typeof(objNew)

The output is

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}

I have been looking in the docs quite a while and have not found the function with which to convert a given FixedPoint-Array to a FloatingPont-Array without multiplying it with the maximum value of the Integer type.

Thanks for any help.

edit: I made a small gist to see if the solution by Michael works, and it does. Thanks!

Note:I don't know why, but the real.(obj) .* 255-code does not work (see the gist).


Solution

  • Why not just Float32.()?

    using ColorTypes
    a = Gray.(convert.(Normed{UInt8,8}, rand(5,6)));
    typeof(a)
    #Array{ColorTypes.Gray{FixedPointNumbers.Normed{UInt8,8}},2}
    Float32.(a)