将图像从RGB转换为HSL,然后再用julia转换回来

时间:2015-06-07 19:49:44

标签: image colors type-conversion julia color-space

我一直试图打开一些RGB图像,将数据视为HSL像素的2D数组,操纵HSL空间中的像素,转换回RGB并将操纵的图像写入文件。但是我不太明白(真棒)julia包ColorImages中的转换是如何工作的。

例如,我希望下面的代码(部分按照this问题中的示例编写)来编写与此图像文件非常相似的内容(如test_1.png和test_2.png):

Test image (shag)

但是,下面的代码实际上产生了这个更暗的图像:

Test image after conversion from RGB to HSL and back to RGB

我应该如何重新排列数组或图像以获得我期望的输出?

using Color, Images

# Download file, read it in, convert colourspace to HSL and recast as array
fname=download("https://farm9.staticflickr.com/8725/17074451907_2381037c7d_m_d.jpg")
rgb=imread(fname)
hsl=convert(Image{HSL},float32(rgb))
hslArr=reinterpret(data(hsl))

# I would like to manipulate HSL data here...

# Two ways to convert manipulated array back to HSL image
hsl_1=Image(hslArr; colorspace="HSL", colordim=1, spatialorder=["x","y"])
hsl_2=reinterpret(HSL{Float32},hslArr)

# Two ways to convert HSL image to RGB image 
rgb_1=convert(Image{RGB},hsl_1)
rgb_2=convert(Array{RGB{Float32}},hsl_2)

# Finally, write images to file
imwrite(rgb_1,"test_1.png")
imwrite(rgb_2,"test_2.png")

更新

感谢@ rickhg12hs在Color.jl模块中发现错误,我在以下步骤之后得到了上面代码的预期输出:

  1. 在{github
  2. 上分叉source repository for Color.jl
  3. 更正转换功能(如下所示),将更改推送到我的Color.jl分支
  4. 删除julia
  5. 附带的默认Color.jl模块
  6. 使用Julia的git机制安装我的分叉包。
  7. 重新启动julia
  8. 我无法弄清楚如何与以前的版本并行安装模块的分叉版本,但是执行以下操作(然后重新启动julia)应该暂时修复错误:

    Pkg.rm("Color")
    Pkg.clone("https://github.com/CnrLwlss/Color.jl.git","Color")
    Pkg.checkout("Color","master")
    

    拉动请求通过后,需要切换回原始Color模块。

1 个答案:

答案 0 :(得分:2)

Color.jl更新并实施/传递更多测试之前,您可以在Color/src/conversions.jl中进行单个字符更改,以最有可能解决此特定问题。第156行将-更改为+

   150  # Everything to HSL
   151  # -----------------
   152  
   153  function convert{T}(::Type{HSL{T}}, c::AbstractRGB)
   154      c_min = min(c.r, c.g, c.b)
   155      c_max = max(c.r, c.g, c.b)
   156      l = (c_max + c_min) / 2     # <-- Changed '-' to '+'

在我的机器上,你的HSL转换鸟现在看起来很棒!