准确(和快速)角度匹配

时间:2015-07-09 08:22:47

标签: image algorithm 3d angle

对于一个爱好项目,我试图对齐照片并创建3D图片。我在装备上基本上有2个摄像头,我用来制作照片。我会尝试自动对齐图像,以便获得3D SBS图像。

它们是高分辨率图像,这意味着需要处理很多像素。因为我对计算机并不十分耐心,所以我希望事情能够快速发展。

最初,我使用过基于图像拼接和特征提取的代码。在实践中,我发现这些算法太不准确而且太慢。主要原因是你在这里有不同的深度,所以你不能做一对一的功能匹配。大多数代码已经正常工作,包括垂直对齐。

对于这个问题,您可以假设不同的ISO曝光等级/颜色校正和图像的垂直对齐都得到了处理。

仍然缺少一种用于校正图片角度的好算法。我注意到左右图片的角度通常会变化很小的度数(相差+/- 1.2度),这足以让人头疼。作为一个人,你可以通过观察颜色的明显差异并将它们排成一行来轻松发现它。

具有讽刺意味的是,如果它是正确与否,你会立即发现它,但不知怎的,我无法向机器学习这一点。 : - )

我已尝试过边缘检测器,Hough变换和各种家庭酿造算法,但到目前为止,我发现所有这些算法都太慢而且太不准确。我还试图在略微改变角度时迭代地垂直对齐,到目前为止没有任何运气。

请注意:准确性可能比速度更重要。

我在这里添加了一个示例图片。它实际上是左眼和右眼,α混合。如果你仔细观察,你可以看到顶部的羊羔有两个椭圆,你可以看到椅子在顶部是如何排列的。它可能看起来可以忽略不计,但在使用投影仪的全屏分辨率下,您将很容易看到差异。这也显示了所需的准确度;它非常多。

Example image - blended

' x'方向将给出3D效果。基本上,如果班次为0,则它​​在屏幕上,如果它在屏幕后面< 0< 0< 0< 0> 0 in it's in in屏幕前方。这也使得匹配变得更难,因为你不是在寻找一个'。

基本上这两款相机的外观很简单。在同一方向(垂直于此处的第二张图片:http://www.triplespark.net/render/stereo/create.html)。

差异源于相机角度略有不同。这意味着整个画面中的旋转是均匀的。

1 个答案:

答案 0 :(得分:1)

我曾经使用过以下业余方法。

假设第二个图像具有旋转+垂直偏移不匹配。这意味着我们需要对第二个图像应用一些变换,可以用矩阵形式表示为

x' = a*x + b*y + c
y' = d*x + e*y + f

也就是说,第二张图像上具有坐标(x,y)的每个像素都应移动到位置(x',y')以补偿此旋转和垂直移位。

我们严格要求a=eb=-dd*d+e*e=1以确保它确实是旋转+移位,没有缩放或倾斜等。此符号也允许水平移位,但这在角度+垂直偏移校正后很容易修复。

现在在两个图像上选择几个常用功能(我手工选择,只需5-10就足够了,你可以尝试应用一些自动特征检测机制)。假设i - 第一个图像上的坐标为(x1[i], y1[i]),第二个图像上的坐标为(x2[i], y2[i])。我们希望在转换后,功能尽可能相等y - 坐标,这是我们想要的(理想情况下)

y1[i]=y2'[i]=d*x2[i]+e*y2[i]+f

拥有足够的(> = 3)功能,我们可以根据此要求确定def。实际上,如果您有超过3个功能,那么很可能无法为它们找到常见的def,但您可以应用最小二乘法找到使d尽可能接近e的{​​{1}},fy2'。您还可以在查找y1d*d+e*e=1d时考虑e的要求,但据我记得,即使不考虑这一点,我也能获得可接受的结果。

确定fde后,您的要求为fa=e。这只留下b=-d未知,这是水平移​​位。如果你知道水平移位应该是什么,你可以从那里找到c。我使用背景(例如景观上的云)来获取c

当您知道所有参数后,您可以对图像进行一次传递并进行更正。您可能还想应用一些抗锯齿,但这是一个不同的问题。

另请注意,您可以以类似的方式对公式引入二次校正,以解释相机通常具有的其他失真。

然而,这只是我在前一段时间遇到同样问题时提出的一个简单算法。我没有做太多的研究,所以我很高兴知道是否有更好的或完善的方法,甚至是现成的软件。