我有一组刚体图像和一些附加标记。我定义了一个坐标系,其中一个标记是原点,并且我想要获得该坐标系与相机原点定义的坐标系之间的旋转和平移。
使用更多的图像并不会改变错误,我仍然不确定这个新错误是否可接受。
我在POSIT中使用了校准输出的值(即焦距和光学中心),但结果与我使用预校准值时得到的结果非常相似。我没有使用畸变参数,因为我不知道如何在POSIT中处理它们(它们会对结果产生影响吗?)。
校准后我得到的相机矩阵:
我计算了新中心坐标与校准图像中心坐标之间的差异,然后将该差异应用于我正在使用POSIT处理的图像的中心坐标。
我在两个不同的图像上使用POSIT,理论上应该得到模型和相机坐标系之间的旋转角度分别为0(第一个)和10(第二个)度。在获取每个图像的旋转矩阵后,我在相机坐标系上定义了一个单位向量,并通过将其乘以POSIT给出的两个旋转矩阵的逆来在模型坐标系上计算它,在模型坐标系中得到两个新向量。当我计算这两个向量在模型坐标系中的夹角时,输出结果并非应为10度。
有人知道我错在哪里吗?
我尝试使用 POSIT(参考this)了一段时间,但从未获得令人满意的结果,直到我意识到我必须首先校准相机。基于this并使用一些用于校准的图像,我获得了相机内部矩阵和畸变参数。我的重投影误差也达到了 1.276,是否太高?如何改善它?(我使用了更多的图像,只实现了轻微的降低)。 我可以在POSIT中使用畸变参数吗?如何使用?
谢谢。
看起来唯一降低重新投影误差(从约1.3降至约0.7)的方法是在XML配置文件中将以下参数设置为“0”:
<Calibrate_FixAspectRatio> 0 </Calibrate_FixAspectRatio>
<Calibrate_AssumeZeroTangentialDistortion> 0 </Calibrate_AssumeZeroTangentialDistortion>
<Calibrate_FixPrincipalPointAtTheCenter> 0 </Calibrate_FixPrincipalPointAtTheCenter>
使用更多的图像并不会改变错误,我仍然不确定这个新错误是否可接受。
我在POSIT中使用了校准输出的值(即焦距和光学中心),但结果与我使用预校准值时得到的结果非常相似。我没有使用畸变参数,因为我不知道如何在POSIT中处理它们(它们会对结果产生影响吗?)。
校准后我得到的相机矩阵:
<Camera_Matrix type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data>
2.0613885351075501e+003 0. 2.2865517805186334e+002 0.
2.2546461307897816e+003 2.5261706201677623e+002 0. 0. 1.
</data>
</Camera_Matrix>
并且我在POSIT中使用它的方式:
#define FOCAL_LENGTH 2158.0175
#define FOCAL_LENGTH_X 2061.389
#define FOCAL_LENGTH_Y 2254.646
#define cX 203.655
#define cY 205.117
我计算了新中心坐标与校准图像中心坐标之间的差异,然后将该差异应用于我正在使用POSIT处理的图像的中心坐标。
我在两个不同的图像上使用POSIT,理论上应该得到模型和相机坐标系之间的旋转角度分别为0(第一个)和10(第二个)度。在获取每个图像的旋转矩阵后,我在相机坐标系上定义了一个单位向量,并通过将其乘以POSIT给出的两个旋转矩阵的逆来在模型坐标系上计算它,在模型坐标系中得到两个新向量。当我计算这两个向量在模型坐标系中的夹角时,输出结果并非应为10度。
有人知道我错在哪里吗?