首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何猜测物体相对于校准相机的6-D位置

如何猜测物体相对于校准相机的6-D位置
EN

Stack Overflow用户
提问于 2018-01-29 00:42:41
回答 1查看 72关注 0票数 0

我使用MATLAB的相机校准器应用程序使用棋盘校准了一台单声道相机。从这个我得到所有的相机参数保存在calibrationSession中。

我用同样的相机拍摄了一个物体(sceneImage)的照片。我也有一个普通的图片,只显示对象没有任何旋转(objImage)。我知道物体的实际宽度和高度。

我用SURF特征检测器提取了它们的特征,并对它们进行了匹配。

现在我想要猜测/计算物体的6-D位置,我知道物体的特征,在我用校准相机拍摄的照片中。

到目前为止,这是我的MATLAB代码:

代码语言:javascript
复制
% IMPORTS
model = imread('model.png');
scene = imread('scene.png');
load('calibrationSession');

% IMG PREP
cameraParams = calibrationSession.CameraParameters;
objImage = rgb2gray(model);
[sceneImage, newOrigin] = undistortImage(rgb2gray(scene),cameraParams);

I1 = sceneImage;
I2 = objImage;

% DETECTION
points1 = detectSURFFeatures(I1);
[features1, valid_points1] = extractFeatures(I1, points1);

points2 = detectSURFFeatures(I2);
[features2, valid_points2] = extractFeatures(I2, points2);

[indexPairs,matchmetric] = matchFeatures(features1,features2);

matchedPoints1 = valid_points1(indexPairs(:,1),:);
matchedPoints2 = valid_points2(indexPairs(:,2),:);

% LOCATION
objwidth = 126;
objheight = size(I2,2)*objwidth/size(I2,1);
EN

回答 1

Stack Overflow用户

发布于 2018-01-29 03:23:38

你的问题没有准确地描述相机/物体运动的类型,所以我只是假设相机的移动足以让我们有一个基线(以估计深度)。然后,我们首先假设对象是静态的。在这种情况下,我建议你首先尝试更经典的方法:首先计算你拍摄的两个瞬间之间的相对运动,即两个相机之间的相对运动。如果您的特征匹配正确,则可以通过计算基本矩阵轻松完成(请参阅this matlab guide。我个人更喜欢this paper的方法,但它需要时间来实现)。一旦你有了基本矩阵,你就可以很容易地以旋转和平移(即[R|T])矩阵的形式提取相对运动。现在,您可以对特征点进行三角测量,并获得稀疏的3d地图。然而,您的T只有在规模上是已知的,因此,您对对象的大小和位置的估计也是如此。

这就是你想要开始利用你的知识的对象的宽度和高度。如果物体很简单(例如,一个立方体),并且运动不是太剧烈(例如,没有倒立等),那么你可以从中推断出尺度。例如,在立方体的情况下,假设您的第一张图像只是一张脸的视图,即图像看起来像这样

代码语言:javascript
复制
A ----- B
|       |
|       |
C-------D

现在,您已经对特征点进行了三角剖分,您有了四个点{P_A,P_B,P_C,P_D},它们对应于立方体上的点的放大3d位置。

既然你知道宽度/高度,你一定有

代码语言:javascript
复制
scale_factor*(P_A-P_C)==height
scale_factor*(P_B-P_A)=width

因此,这为您提供了一种估计对象位置/方向变化的方法。但它可能不是一个健壮的解决方案,只能在非常简单的情况下工作。

如果对象不是静态的,那么它的特征将是相对于您计算的基本要素的异常值,因此它们不会被三角化。这个问题相当困难,但我怀疑可能会有解决方案,例如基于光流,尽管我不认为两个视图将是足够的。

我希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48488726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档