简介
许多传统的白平衡算法是基于统计的,即它们依赖于某些假设在正确白平衡的图像中应该成立,比如著名的灰度世界假设。然而,通过利用大量带有真实光照信息的图像数据集,在基于学习的框架中通常可以获得更好的结果。本教程演示了如何训练基于学习的白平衡算法并评估结果的质量。
如何训练模型
- 下载用于训练的数据集。在本教程中,我们将使用 Gehler-Shi 数据集。将所有 568 张训练图像提取到一个文件夹中。包含真实光照值的文件 (real_illum_568..mat) 需要单独下载。
- 我们将使用一个 Python 脚本 进行训练。使用以下参数调用它
python learn_color_balance.py -i <包含训练图像的文件夹路径> -g <real_illum_568..mat 的路径> -r 0,378 --num_trees 30 --max_tree_depth 6 --num_augmented 0
这应该开始在前 378 张图像(整个数据集的 2/3)上训练模型。我们将模型的大小设置为每个特征 30 个回归树对,并将树的深度限制为不超过 6。默认情况下,生成的模型将保存到 color_balance_model.yml
- 通过在构造 LearningBasedWB 的实例时传递其路径来使用训练好的模型
Ptr<xphoto::LearningBasedWB> wb = xphoto::createLearningBasedWB(modelFilename);
如何评估模型
- 我们将使用一个 基准测试脚本,将我们训练的模型与经典灰度世界算法在剩余的 1/3 数据集上进行比较。使用以下参数调用该脚本
python color_balance_benchmark.py -a grayworld,learning_based:color_balance_model.yml -m <包含模型的文件夹完整路径> -i <包含训练图像的文件夹路径> -g <real_illum_568..mat 的路径> -r 379,567 -d "img"
- 客观评估结果存储在 white_balance_eval_result.html 中,生成的白平衡图像存储在 img 文件夹中,用于算法的质量比较。不同的算法在估计的光照和真实光照之间的角度误差方面进行比较。