Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 精确(快速)的角度匹配_Image_Algorithm_3d_Angle - Fatal编程技术网

Image 精确(快速)的角度匹配

Image 精确(快速)的角度匹配,image,algorithm,3d,angle,Image,Algorithm,3d,Angle,作为一个爱好项目,我正在尝试对齐照片并创建3D图片。我基本上有两个摄像头,我用它来拍照。我会自动尝试以这样的方式对齐图像,以获得3D SBS图像 它们是高分辨率图像,这意味着需要处理大量像素。因为我对电脑不是很有耐心,所以我希望事情进展得更快 最初我使用的是基于图像拼接和特征提取的代码。在实践中,我发现这些算法太不准确,太慢。主要原因是这里的深度不同,因此无法对功能进行1对1匹配。大多数代码已经可以正常工作了,包括垂直对齐 对于这个问题,您可以假设不同的ISO曝光级别/颜色校正和图像的垂直对齐都

作为一个爱好项目,我正在尝试对齐照片并创建3D图片。我基本上有两个摄像头,我用它来拍照。我会自动尝试以这样的方式对齐图像,以获得3D SBS图像

它们是高分辨率图像,这意味着需要处理大量像素。因为我对电脑不是很有耐心,所以我希望事情进展得更快

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

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

现在仍然缺少一个好的算法来校正图片的角度。我注意到左右图片的角度通常会有少量的变化(比如+/-1.2度的差异),这足以让人感到轻微的头痛。作为一个人,你可以通过观察颜色上的明显差异并将它们排列起来,很容易发现这一点

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

我曾尝试过边缘检测器、Hough变换和各种自制算法,但到目前为止,我发现它们都太慢,而且对我的目的来说太不准确。我还尝试了在稍微改变角度的同时迭代垂直对齐,到目前为止没有任何运气

请注意:这里的准确性可能比速度更重要


我在这里添加了一个示例图像。它实际上是左眼和右眼的混合。如果你仔细看,你可以看到羔羊在顶部有两个椭圆,你可以看到椅子在顶部不是排成一行的。这似乎是可以忽略的,但在使用光束器时,在全屏分辨率下,您将很容易看到差异。这也显示了所需的精度水平;相当多

“x”方向的移动将产生3D效果。基本上,如果移位为0,它在屏幕上,如果移位为0,它在屏幕前面。这也使得匹配更加困难,因为你不是在寻找“针迹”

基本上,两个摄像头的“外观”在同一个方向上(与第二张图片垂直:)


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

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

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

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
-坐标,这是我们想要的(理想情况下)

有足够的(>=3)特性,我们可以根据此要求确定
d
e
f
。事实上,如果你有3个以上的特性,你很可能无法找到它们的共同的
d
e
f
,但你可以应用最小二乘法找到
d
e
f
,使
y2'
尽可能接近
y1
。您还可以解释在查找
d
e
f
d*d+e*e=1
的要求,尽管据我记忆所及,即使不考虑这一点,我也得到了可接受的结果

在您确定了
d
e
f
之后,您就有了
a=e
b=-d
。这只剩下
c
未知,即水平移位。如果你知道水平位移应该是什么,你可以从那里找到
c
。我使用背景(例如,风景上的云)获得
c

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

还请注意,您可以以类似的方式在公式中引入二次校正,以解释相机通常具有的附加失真



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

这些角度差异不是创建三维模型的关键吗?那么你为什么要“纠正”这些角度呢?@DrKoch,不,3D的关键是x坐标的差异。也就是说,如果某个片段在一张图片上是水平的,那么它在另一张图片上应该是水平的,只有当其末端在3D中的深度不同时,它的长度才可能不同。这些垂直方向上的“错误”在整个图片中都不同吗?或者它们只是由“倾斜”的照相机引起的?我已经添加了一些关于我的任务的细节
y1[i]=y2'[i]=d*x2[i]+e*y2[i]+f