【问题标题】:How to write an array of floats as Image in julia by using Images.jl如何使用 Images.jl 在 julia 中将浮点数组写入为 Image
【发布时间】:2017-01-06 01:39:34
【问题描述】:

我需要读取图像,对其进行一些操作,然后再次将其另存为图像。为此,我在 julia 中找到了出色的 Images.jl 包。我能够读取图像,将其转换为浮点数组,然后对其进行操作(裁剪图像并更改图像上的一些值)。但是,我找不到将其存储为 jpg 的方法。再次归档。这是我用来操作数据的过程。对于下面的代码,假设我在同一目录中有一个 dog.jpg 文件。

Using Images,Colors
averageImage = zeros(1,1,3)
averageImage[1,1,:] = [123.68 116.779 103.779]
function data(img, averageImage)
           a0 = load(img)
           new_size = ntuple(i->div(size(a0,i)*224,minimum(size(a0))),2)
           a1 = Images.imresize(a0, new_size)
           i1 = div(size(a1,1)-224,2)
           j1 = div(size(a1,2)-224,2)
           b1 = a1[i1+1:i1+224,j1+1:j1+224]
           c1 = separate(b1)
           d1 = convert(Array{Float32}, c1)
           e1 = reshape(d1[:,:,1:3], (224,224,3,1))
           f1 = (255 * e1 .- averageImage)
           g1 = permutedims(f1, [2,1,3,4])
           g1 = g1[:,:,:]
           # here type of g1 is : Array{Float64,3}
       end

A = data("dog.jpg",averageImage)

在这里,我能够得到 A。现在,我需要将该 A 数组保存为图像。 为此,我尝试以下方法:

save("modified_dog.jpg",A) 

我收到以下错误:

错误:ArgumentError: FixedPointNumbers.UFixed{UInt8,8} 是 8 位 表示从 0.0 到 1.0 的 256 个值的类型;不能代表-79.68

不幸的是,我不知道如何进行转换。

有没有人帮我保存提到的 A 数组?提前致谢。

【问题讨论】:

  • 如错误所示,图像采用 [0,1] 中的浮点值,而不是 [0,255] 范围内的值。如果您将代码调整为该效果,它应该可以工作。

标签: julia


【解决方案1】:

我没有看过你的大部分功能,但最后你可以试试:

result = convert(Image, map(ScaleMinMax(Float64, 0.0, 256.0), g1))
save("/tmp/test.png", result)

这可能会转换它。

documentation 有一个名为 MapInfo(不是 GIS 系统)的神秘部分,它为这个主题提供了一个闪烁的光芒......

【讨论】:

    【解决方案2】:

    NRRD 格式是浮点图像的合理选择,但请注意,它在外部 2d 图形程序中没有得到广泛支持(它更广泛地用于 3d 图像)。如果你只使用像"test.nrrd" 这样的文件名,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多