How do I do the equivalent of Gimp's Colors, Auto, White Balance in Python-Fu?
我能找到的唯一功能是:GIMP颜色平衡,它采用了适用的参数:保留亮度(OSITY)、青色红、洋红绿和黄蓝。
我不知道这些参数要传递什么值来复制标题中的菜单选项。
根据gimp-doc,我们需要丢弃红色、绿色和蓝色柱状图每端的像素颜色,这些柱状图仅被图像中0.05%的像素使用,并尽可能地扩展剩余范围(python代码):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | img = cv2.imread('test.jpg') x = [] # get histogram for each channel for i in cv2.split(img): hist, bins = np.histogram(i, 256, (0, 256)) # discard colors at each end of the histogram which are used by only 0.05% tmp = np.where(hist > hist.sum() * 0.0005)[0] i_min = tmp.min() i_max = tmp.max() # stretch hist tmp = (i.astype(np.int32) - i_min) / (i_max - i_min) * 255 tmp = np.clip(tmp, 0, 255) x.append(tmp.astype(np.uint8)) # combine image back and show it s = np.dstack(x) plt.imshow(s[::,::,::-1]) |
结果与gimp的"颜色"-->auto->white balance"之后的结果完全相同。
upd:我们需要
1 2 3 4 | # Numpy np.array([-10, 260]).astype(np.uint8) >>> array([246, 4], dtype=uint8) # but we need just [0, 255] |
K,酷。了解如何编写一个脚本。如果你喜欢的话就用它。我没问题。
https://github.com/doyousketch2/eawb
根据我在快速查看源代码后的理解(或多或少用测试图像确认),这些都是不相关的,并且在引擎盖下,
- 获取每个通道的直方图
- 获取确定底部和顶部的值0.6%
- 使用这两个值作为黑点和白点,使用与"级别"非常相似的内部调用来扩展该通道的值范围。
用合成图像证明:
之前:
后:
这一切在Python中并不难做到。