翻译正文如下:
#Surround360 校准
为了在VR中产生更准确和舒适的结果,Surround 360渲染软件使用多个校准配置文件来校正光学和机械问题。 本文档描述生成校准配置文件的过程。
警告:不要在阅读本文档前,尝试渲染使用Surround 360设备拍摄的视频。未经校准的结果可能会在VR中严重扭曲,从而破坏3D立体感。
有三种专门的校准过程:颜色校准,光学渐晕校准和几何校准。我们的软件在校准的每个部分都需要不同的数据和不同的步骤来处理。为获得最佳效果,请按照以下顺序执行每个校准过程。
##颜色矫正
将RAW图像转换为RGB时,我们在/ surround360_render / res / config / isp中使用文件cmosis_sunex.json和cmosis_fujinon.json。这些文件包含分别为每个侧面和顶部/底部相机配置软件ISP的字段。每个字段的详细说明可以在同一目录下的README.txt文件中找到。
即使来自相同摄像机型号的所有传感器都应该以相同的方式运行,实际上存在可能导致两个传感器的两个图像在同一光源(光源)下看起来不同的细微差别。
该校准过程允许我们为一组摄像机创建ISP配置json文件,然后可以通过在cam_to_isp_config.json中引用它们来使用。
要针对已知的光源进行校准,我们需要在现场知道其实数RGB值的场景。我们使用一个MacBeth ColorChecker,它包含24个方形的色块。我们还使用SpyderCUBE设备,它可以让我们找到黑色电平调整图像上的最暗点。
以下步骤描述了来自同一台设备的一组相机的颜色校准过程。
*在已知光源下,将MacBeth图表和SpyderCUBE放在相机的前面,并使用我们的相机控制软件拍照。 示例图像可以在/surround360_render/res/example_data/color_calibration_input.png中找到。 对每个相机重复上述步骤。
*将图像保存在名为“charts”的目录中。 对于这个例子,我们假设它们在〜/ Desktop / color_calibration / charts / <serial_number> .tiff之下。 转到/round360_render并运行以下命令:
<pre>
python scripts/color_calibrate_all.py \
--data_dir ~/Desktop/color_calibration \
--black_level_hole
</pre>
*这将生成一个名为“isp”的目录,其中包含所有ISP json配置文件。它还为所有摄像机生成debug(调试)过程的每个步骤的多个debug图像的输出目录。/surround360_render/res/example_data/color_calibration_output.png是上述输入图像上最后一步(伽马校正)的输出示例。
*查看文件脚本/ color_calibrate_all.py了解更多选项。 使用属性min_area_chart_perc和max_area_chart_perc为颜色图表的预期大小设置范围; 当在不同距离拍摄照片时,这是十分有效的。使用属性black_level_adjust将每个摄像机的黑色电平设置为所有摄像机的中位数; 当我们预期所有相机中的黑色电平都相同时,这是非常有效的(请注意,对于所有的传感器来说,这不是真的)。
要使用这些新的ISP配置文件运行pipeline(管道),我们只需要将生成的ISP配置文件复制到输出目录,例如 〜/ Desktop / render / config / isp / <serial_number> .json,然后照常运行run_all.py。 请注意,ISP配置文件以每个相应的摄像机序列号命名。
##光晕渐晕校准
所有镜头都产生一种称为光晕渐晕的渐晕,当我们离开图像中心并朝向边缘时,会导致亮度下降。由于我们预计重叠的区域具有相同的颜色和亮度,所以在重叠的相机场景中,这种效果是特别不希望的。
这个校准过程让我们建模渐晕剥离,并相应地更新相机ISP json配置文件。这可以通过在沿着出射光瞳旋转相机(或尽可能靠近)的同时拍摄灰色图表,以便我们在整个图像区域获取图表的样本。
以下步骤描述了一组相机的校准过程。
*在均匀和恒定的光源下,将灰阶图放在相机的前面,并使用我们的相机控制软件拍摄尽可能多的照片(推荐超过20张),以便覆盖整个图像区域,其中包含所有图表的样本位置。 示例图像可以在/surround360_render/res/example_data/vignetting_calibration_sample.tiff中找到。对每个相机重复。
*将名称为“charts”的目录中的每个摄像机的RAW图像集保存。 在这个例子中,我们为17台摄像机拍摄了100张相机,并将它们放在〜/ Desktop / vignetting_calibration / <serial_number> / charts / [000000-000099] .tiff之下。 注意文件结构,每个摄像机都有自己的目录。 我们还假设在这些相机上运行了颜色校准,我们已经在每个摄像机的ISP json配置文件中都有一个目录〜/ Desktop / vignetting_calibration / isp。转到/round360_render并运行以下命令:
<pre>
python scripts/vignetting_calibrate.py \
--data_dir ~/Desktop/vignetting_calibration \
--num_cams 17 \
--save_debug_images
</pre>
*这将生成一个名为isp_new的目录,其中包含所有更新的ISP配置文件。此外,每个摄像机目录都有两个新目录。 1)acquisition(采集):包含所有检测图表的掩码图像,data.json的数据文件,其中包含每个补丁的位置和颜色强度值以及其他调试数据。 2)calibration(校准):包含每个通道的渐晕模型图,更新的ISP json配置文件以及其他调试数据。 /surround360_render/res/example_data/vignetting_calibration_fit.png是对本示例中使用的相机的红色通道的渐晕进行建模的曲面拟合的示例。它显示图像的中心和最小晕影点,以及左上角的( Bezier control)贝塞尔控制点。
*查看文件脚本/ vignetting_calibrate.py了解更多选项。如果使用非默认图像大小,请使用属性image_width和image_height使用load_data属性加载位置和颜色强度数据,跳过采集步骤,直接进入校准步骤。
要使用这些新的ISP配置文件运行管道,只需将其替换为脚本创建的。
#几何校准
无论采集设备的结构如何,我们的软件需要知道摄像机的几何特性(内在和外在),以便准确地执行立体声重建。
以下步骤描述了摄像机的几何校准过程。
*在具有大量复杂构成的场景中使用Surround360捕获软件捕获单个框架(一种矫正图),即包含具有不同大小边缘和尖角的对象。 一个很好的例子是办公室的内部。
*打开框架并运行ISP步骤获取RGB图像。 将它们放在单独的目录中。对于这个例子,我们假设它们在〜/ Desktop / geometric_calibration / rgb / cam [0-16] /000000.png
*转到surround360_render并运行以下命令:
<pre>
python scripts/geometric_calibration.py \
--data_dir ~/Desktop/geometric_calibration \
--rig_json $PWD/res/config/camera_rig.json \
--output_json ~/Desktop/geometric_calibration/camera_rig.json \
--save_debug_images
<pre>
*这将生成一个新的JSON文件camera_rig.json,通过将其复制到输出目录(例如,~/Desktop/render/config/camera_rig.json。 它还可以在〜/ Desktop / geometric_calibration下生成调试图像,显示校准过程的准确性。