如何在 Julia 中将 {UINT16, 2} 数组保存为图像
How to save {UINT16, 2} array to image in Julia
我在 Julia 中有一个大小为 5328×3040 的数组{UInt16,2}。我想将它保存为png图像。
我尝试了以下方法:
save("gray.png", colorview(Gray, img))
但出现以下错误:
ERROR: TypeError: in Gray, in T, expected T<:Union{Bool, AbstractFloat, FixedPoint}, got Type{UInt16}
Stacktrace:
[1] ccolor_number at C:\Users\ankushar\.julia\packages\ImageCore\KbJyT\src\convert_reinterpret.jl:60 [inlined]
[2] ccolor_number at C:\Users\ankushar\.julia\packages\ImageCore\KbJyT\src\convert_reinterpret.jl:57 [inlined]
[3] colorview(::Type{Gray}, ::Array{UInt16,2}) at C:\Users\ankushar\.julia\packages\ImageCore\KbJyT\src\colorchannels.jl:104
[4] top-level scope at REPL[16]:1
caused by [exception 3]
IOError: symlink: operation not permitted (EPERM)
我正在使用 Julia 1.4.2
你能推荐一种在 Julia 中将这些数组存储为图像的好方法吗?
TIA!
您可以在保存前标准化像素值。
using Images
img = rand(UInt16, 10, 20)
img[1:3]
# => 3-element Array{UInt16,1}:
0x7fc2
0x057e
0xae79
gimg = colorview(Gray, img ./ typemax(UInt16))
gimg[1:3] |> channelview
# => 3-element reinterpret(Float64, ::Array{Gray{Float64},1}):
0.4990615701533532
0.02145418478675517
0.6815442130159457
save("gray.png", gimg)
一个更快更准确的解决方案是将您的数组重新解释为 N0f16
的数组,它是 FixedPointNumbers
的一种类型,基本上只是 Uint16
在 [=14] 之间缩放=] 和 1
。这既可以避免舍入错误,也可以避免制作副本的需要。
using FixedPointNumbers
img = rand(UInt16, 10, 20)
colorview(Gray, reinterpret(N0f16, img)))
我在 Julia 中有一个大小为 5328×3040 的数组{UInt16,2}。我想将它保存为png图像。
我尝试了以下方法:
save("gray.png", colorview(Gray, img))
但出现以下错误:
ERROR: TypeError: in Gray, in T, expected T<:Union{Bool, AbstractFloat, FixedPoint}, got Type{UInt16}
Stacktrace:
[1] ccolor_number at C:\Users\ankushar\.julia\packages\ImageCore\KbJyT\src\convert_reinterpret.jl:60 [inlined]
[2] ccolor_number at C:\Users\ankushar\.julia\packages\ImageCore\KbJyT\src\convert_reinterpret.jl:57 [inlined]
[3] colorview(::Type{Gray}, ::Array{UInt16,2}) at C:\Users\ankushar\.julia\packages\ImageCore\KbJyT\src\colorchannels.jl:104
[4] top-level scope at REPL[16]:1
caused by [exception 3]
IOError: symlink: operation not permitted (EPERM)
我正在使用 Julia 1.4.2
你能推荐一种在 Julia 中将这些数组存储为图像的好方法吗?
TIA!
您可以在保存前标准化像素值。
using Images
img = rand(UInt16, 10, 20)
img[1:3]
# => 3-element Array{UInt16,1}:
0x7fc2
0x057e
0xae79
gimg = colorview(Gray, img ./ typemax(UInt16))
gimg[1:3] |> channelview
# => 3-element reinterpret(Float64, ::Array{Gray{Float64},1}):
0.4990615701533532
0.02145418478675517
0.6815442130159457
save("gray.png", gimg)
一个更快更准确的解决方案是将您的数组重新解释为 N0f16
的数组,它是 FixedPointNumbers
的一种类型,基本上只是 Uint16
在 [=14] 之间缩放=] 和 1
。这既可以避免舍入错误,也可以避免制作副本的需要。
using FixedPointNumbers
img = rand(UInt16, 10, 20)
colorview(Gray, reinterpret(N0f16, img)))