【问题标题】:Convert Gimp "Color Enhance" algorithm to python将 Gimp“颜色增强”算法转换为 python
【发布时间】:2021-02-06 19:27:02
【问题描述】:

我正在尝试编写与 Gimp 中的“颜色增强”相同的效果。这是文档:https://docs.gimp.org/2.8/en/plug-in-color-enhance.html

基本上它是这样说的:它通过将颜色转换为 HSV 空间、测量整个图像的饱和度值范围、然后将该范围拉伸到尽可能大、最后将颜色转换回 RGB 来实现这一点.它类似于拉伸对比度,只是它在 HSV 颜色空间中工作,因此它保留了色调。

我试图以这种方式实现算法:

def enhanced(hsv):
    h, s, v = cv2.split(hsv)
    s_equ = cv2.equalizeHist(s)

    hsv_image = cv2.merge([h, s_equ, v])
    out = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
    cv2.imwrite("out.jpg", out)


img2 = cv2.imread("IMG_0233.jpg")

hsv2 = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)

enhanced(hsv2)

但我没有和 Gimp 一样的结果:

输入图片:

Gimp 颜色增强的结果:

我的脚本结果:

我有什么遗漏的吗?非常感谢。

【问题讨论】:

  • 尝试归一化而不是均衡化。
  • 您好,感谢您的帮助。我试图像这样只标准化饱和通道:sat_mod = cv2.normalize(s, None, 0, 255, cv2.NORM_MINMAX) 然后将此通道与 Hue 和 Val 合并。但是当我比较原始饱和通道和sat_mod时,值是一样的!所以对我的新形象没有影响。
  • 确实饱和度通道中的最小值和最大值已经是 0 和 255,所以对我的新图像没有影响。所以 Gimp 没有这样做,因为图像有明显的变化。
  • 尝试将输入图像、输出图像和 GIMP 输出图像的饱和度直方图以相同的比例并排绘制。

标签: opencv colors gimp hsv


【解决方案1】:

可能一个(可能是 Gimp)正在处理“线性光”(如果您使用的是 GEGL,可能是“颜色增强”的非旧版本),而另一个正在使用 gamma 压缩值。在 Gimp 中,您可以使用 Pointer 对话框获取像素的 HSV 值,并与 CV 生成的值进行比较。

Gimp 2.10 颜色增强的来源在这里:

https://gitlab.gnome.org/GNOME/gegl/-/blob/master/operations/common/color-enhance.c

cmets 状态:

 * This operation is inspired from the color enhance gimp plugin.
 * It alters the chroma component to cover maximum possible range,
 * keeping hue and lightness untouched.

【讨论】:

  • 谢谢!事实上,操作是在 CIELAB 中完成的。刚试过这个:lab_picture = cv2.cvtColor(img2, cv2.COLOR_BGR2LAB) 然后在 3 个 [lab] 通道中拆分后:a_norm = cv2.normalize(a, None, 0, 255, cv2.NORM_MINMAX),然后 out = cv2.merge((l, a_norm, b)。最后转换回BGR img_out = cv2.cvtColor(out, cv2.COLOR_LAB2BGR) 并使用imwrite。我得到了原始图像但有很多绿色。所以还有一些东西我错过了。
猜你喜欢
  • 2017-01-03
  • 1970-01-01
  • 2019-11-14
  • 2019-02-08
  • 2017-10-02
  • 2013-10-13
  • 1970-01-01
  • 2012-11-06
  • 2014-02-01
相关资源
最近更新 更多