白平衡算法
image-processing
3
0

我正在做一些图像处理,我需要一种自动白平衡算法,该算法在CPU计算时间上不太密集。有什么建议吗?

编辑:如果它与效率有关,我将在Java中使用彩色图像作为整数数组来实现它。

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

白平衡算法很难。即使数码相机偶尔也会出错,即使他们知道有关图片的许多额外信息-例如是否使用闪光灯和光线水平。

首先,我将平均红色,绿色和蓝色,并将其用作白平衡点。设置限制-保持在钨,日光和日光的范围内。它不是完美的,但是当它出错时,相对容易解释原因。

收藏
评论

GIMP显然使用了一种非常简单的算法来实现自动白平衡。 http://docs.gimp.org/en/gimp-layer-white-balance.html

白平衡命令通过分别拉伸红色,绿色和蓝色通道来自动调整活动层的颜色。为此,它将丢弃红色,绿色和蓝色直方图各端的像素颜色,这些像素颜色仅由图像中0.05%的像素使用,并尽可能扩展其余范围。结果是,与拉伸对比度相比,在直方图的外部边缘上很少出现的像素颜色(可能是灰尘等)不会负面影响用于拉伸直方图的最小值和最大值。但是,像“拉伸对比度”一样,结果图像中可能会有色相变化。

由于我第一次尝试实现此功能的尝试似乎适用于大多数照片,但还有更多的调整,因为其他照片似乎带有伪像或包含过多的红色,绿色或蓝色:/

收藏
评论

@Charles Ma建议使用Gimp白平衡算法。在pythonnumpy这可能看起来像这样:

# white balance for every channel independently
def wb(channel, perc = 0.05):
    mi, ma = (np.percentile(channel, perc), np.percentile(channel,100.0-perc))
    channel = np.uint8(np.clip((channel-mi)*255.0/(ma-mi), 0, 255))
    return channel

image = cv2.imread("foo.jpg", 1) # load color
imWB  = np.dstack([wb(channel, 0.05) for channel in cv2.split(img)] )

快速,简单,并提供不错的结果

收藏
评论

相对简单的算法是对屏幕上最亮和最暗像素的色相(以HSV或HSL表示)进行平均。紧要关头,仅使用最亮的像素。如果最亮和最暗之间的色调太不同,请选择亮像素。如果黑暗接近黑色,请选择明亮的像素。

为什么还要看暗像素?有时,黑暗并不接近于黑色,并且暗示着周围的光线,雾气或雾霾。

如果您是大量的Photoshop用户,这对您来说很有意义。照片中的高光与对象的基础颜色无关(或弱相关)。除非图像曝光过度以至于所有物体都淹没了CCD,否则它们是光色偏光的最佳代表。

然后调整所有像素的色调。

您需要快速的RGB到HSV和HSV到RGB功能。 (但是也许您可以在RGB中使用LUT或线性插值进行像素校正。)

您不希望按平均像素颜色或最受欢迎的颜色进行分类。那就是疯狂。

要快速找到最亮的颜色(和最暗的颜色),您可以使用RGB,但是您应该有绿色,红色和蓝色的乘数。在RGB监视器上,255绿色比255红色亮,而255红色比255蓝色亮。我以前脑子里有很好的乘数,可惜他们逃离了我的记忆。您可能可以用谷歌搜索它们。

这将在没有高光的图像中失败。例如,表面为哑光的墙。但我不知道您能对此做什么。


此简单算法有很多改进。您可以平均多个明亮像素,对图像进行网格划分,并从每个像元中获取明亮像素和黑暗像素,等等。实现该算法后,您会发现一些明显的调整。

收藏
评论

最近发布的一种算法是“颜色分布”算法,可以在这里找到: http : //www.comp.nus.edu.sg/~brown/pdf/ColorConstancyJOSAv10.pdf在本文中,也有对Matlab源码的引用代码( http://www.comp.nus.edu.sg/~whitebal/illuminant/files/illuminantEstimator.m )。这是一个简单的算法,可以很容易地编程,结果表明它非常快。

如果您需要其他快速且同时准确的白平衡(色彩恒定)算法,则应访问以下站点: http : //www.fer.unizg.hr/ipg/resources/color_constancy/

有几种算法及其各自的源代码可能只是您要寻找的算法。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号