对于一个爱好项目,我试图对齐照片并创建3D图片。我在装备上基本上有2个摄像头,我用来制作照片。我会尝试自动对齐图像,以便获得3D SBS图像。
它们是高分辨率图像,这意味着需要处理很多像素。因为我对计算机并不十分耐心,所以我希望事情能够快速发展。
最初,我使用过基于图像拼接和特征提取的代码。在实践中,我发现这些算法太不准确而且太慢。主要原因是你在这里有不同的深度,所以你不能做一对一的功能匹配。大多数代码已经正常工作,包括垂直对齐。
对于这个问题,您可以假设不同的ISO曝光等级/颜色校正和图像的垂直对齐都得到了处理。
仍然缺少一种用于校正图片角度的好算法。我注意到左右图片的角度通常会变化很小的度数(相差+/- 1.2度),这足以让人头疼。作为一个人,你可以通过观察颜色的明显差异并将它们排成一行来轻松发现它。
具有讽刺意味的是,如果它是正确与否,你会立即发现它,但不知怎的,我无法向机器学习这一点。 : - )
我已尝试过边缘检测器,Hough变换和各种家庭酿造算法,但到目前为止,我发现所有这些算法都太慢而且太不准确。我还试图在略微改变角度时迭代地垂直对齐,到目前为止没有任何运气。
请注意:准确性可能比速度更重要。
我在这里添加了一个示例图片。它实际上是左眼和右眼,α混合。如果你仔细观察,你可以看到顶部的羊羔有两个椭圆,你可以看到椅子在顶部是如何排列的。它可能看起来可以忽略不计,但在使用投影仪的全屏分辨率下,您将很容易看到差异。这也显示了所需的准确度;它非常多。
' x'方向将给出3D效果。基本上,如果班次为0,则它在屏幕上,如果它在屏幕后面< 0< 0< 0< 0> 0 in it's in in屏幕前方。这也使得匹配变得更难,因为你不是在寻找一个'。
基本上这两款相机的外观很简单。在同一方向(垂直于此处的第二张图片:http://www.triplespark.net/render/stereo/create.html)。
差异源于相机角度略有不同。这意味着整个画面中的旋转是均匀的。
答案 0 :(得分:1)
我曾经使用过以下业余方法。
假设第二个图像具有旋转+垂直偏移不匹配。这意味着我们需要对第二个图像应用一些变换,可以用矩阵形式表示为
x' = a*x + b*y + c
y' = d*x + e*y + f
也就是说,第二张图像上具有坐标(x,y)
的每个像素都应移动到位置(x',y')
以补偿此旋转和垂直移位。
我们严格要求a=e
,b=-d
和d*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)功能,我们可以根据此要求确定d
,e
和f
。实际上,如果您有超过3个功能,那么很可能无法为它们找到常见的d
,e
和f
,但您可以应用最小二乘法找到使d
尽可能接近e
的{{1}},f
和y2'
。您还可以在查找y1
,d*d+e*e=1
和d
时考虑e
的要求,但据我记得,即使不考虑这一点,我也能获得可接受的结果。
确定f
,d
和e
后,您的要求为f
和a=e
。这只留下b=-d
未知,这是水平移位。如果你知道水平移位应该是什么,你可以从那里找到c
。我使用背景(例如景观上的云)来获取c
。
当您知道所有参数后,您可以对图像进行一次传递并进行更正。您可能还想应用一些抗锯齿,但这是一个不同的问题。
另请注意,您可以以类似的方式对公式引入二次校正,以解释相机通常具有的其他失真。
然而,这只是我在前一段时间遇到同样问题时提出的一个简单算法。我没有做太多的研究,所以我很高兴知道是否有更好的或完善的方法,甚至是现成的软件。