gle*_*ien 1 java android opencv disparity-mapping 3d-reconstruction
我在没有NDK的情况下在Android上使用OpenCV遇到了一些问题.
目前我正在做一个我的大学的项目,我的厨师告诉我,当从2D图像重建3D对象时,我应该避免相机校准.
到目前为止,我有2个2D图像,并具有所有特征点,匹配,good_matches,基本矩阵和同质矩阵.另外,我使用StereoBM计算了视差图.下一步应该是从所有这些值中获取3D点云.
我检查了互联网并找到了
Calib3d.reprojectImageTo3D(disparity, _3dImage, Q, false);
Run Code Online (Sandbox Code Playgroud)
使用这种方法,我应该能够重新创建3D点云......目前的问题是,我没有Matrix Q.我想我会从方法中得到这个
stereoRectify(...);
Run Code Online (Sandbox Code Playgroud)
但是因为我应该避免cameraCalibration用于这种特定情况,所以我不能使用这种方法.替代方案
stereoRectifyUncalibrated(...);
Run Code Online (Sandbox Code Playgroud)
不提供Q ...
有人可以帮助我,告诉我如何以更简单的方式获得Q或点云吗?谢谢
为了回答您的问题,Q
所需的矩阵reprojectImageTo3D
表示从像素位置和相关视差(即形式[u; v; disp; 1]
)到相应3D点的映射[X; Y; Z; 1]
.不幸的是,如果不了解相机的内在函数(矩阵K
)和外在函数(两个相机姿势之间的旋转和平移),就无法得出这种关系.
相机校准是估算这些的常用方法.你的厨师说这不是一个选择,但有几种不同的技术(例如使用棋盘,或通过自动校准)具有各种要求和可能性.因此,确切地研究为什么校准不在桌面上可能会找到适合您的应用的方法.
如果您真的无法估计内在函数,可能的解决方案可能是捆绑调整,使用的不仅仅是2个图像.但是,如果没有内在函数,3D重建可能不会非常有用.这引出了我的第二点.
有三种类型的3D重建,主要类型是:投影,度量和欧几里得.(有关详细信息,请参阅Hartley&Zisserman撰写的"计算机视觉中的多视图几何"第2版第264页第2版)
该欧几里德重建是大多数人的"三维重建"的意思,虽然不是他们需要一定就是:它只能通过3D旋转和3D转换涉及到真正的模型场景的模型(即三维的改变坐标系).因此,场景中的正交角度在这样的模型中是正交的,并且场景中1米的距离对应于模型中的1米.为了获得这样的欧几里得三维重建,您需要知道至少一些摄像机的内在函数以及场景中两个给定点之间的真实距离.
所述度量或相似性重建是大部分时间不够好,是指通过一个相似涉及真实模型由3D旋转和3D平移变换,换句话说,场景的3D模型(即,3D的变化坐标系)以及整体缩放.为了获得这样的度量重建,您需要知道至少一些相机的内在函数.
该射影重建是,如果你不知道现场或相机的内部函数的知识,你会得到什么.这样的3D模型相对于观察到的场景不是按比例的,并且在场景中正交的角度在模型中可能不是正交的.
因此,如果您想要精确重建,了解(某些)摄像机的内在参数是至关重要的.
归档时间: |
|
查看次数: |
981 次 |
最近记录: |