我有一个任务是在3D坐标系中定位一个对象.由于我必须得到几乎精确的X和Y坐标,我决定使用已知的Z坐标跟踪一个颜色标记,该坐标将放置在移动对象的顶部,如此图片中的橙色球:

首先,我已完成相机校准以获取内部参数,之后我使用cv :: solvePnP获取旋转和平移向量,如下面的代码所示:
std::vector<cv::Point2f> imagePoints;
std::vector<cv::Point3f> objectPoints;
//img points are green dots in the picture
imagePoints.push_back(cv::Point2f(271.,109.));
imagePoints.push_back(cv::Point2f(65.,208.));
imagePoints.push_back(cv::Point2f(334.,459.));
imagePoints.push_back(cv::Point2f(600.,225.));
//object points are measured in millimeters because calibration is done in mm also
objectPoints.push_back(cv::Point3f(0., 0., 0.));
objectPoints.push_back(cv::Point3f(-511.,2181.,0.));
objectPoints.push_back(cv::Point3f(-3574.,2354.,0.));
objectPoints.push_back(cv::Point3f(-3400.,0.,0.));
cv::Mat rvec(1,3,cv::DataType<double>::type);
cv::Mat tvec(1,3,cv::DataType<double>::type);
cv::Mat rotationMatrix(3,3,cv::DataType<double>::type);
cv::solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvec, tvec);
cv::Rodrigues(rvec,rotationMatrix);
Run Code Online (Sandbox Code Playgroud)
拥有所有矩阵之后,这个可以帮助我转换图像的方程指向wolrd坐标:

其中M是cameraMatrix,R - rotationMatrix,t - tvec和s是未知的.Zconst表示橙色球的高度,在本例中为285毫米.所以,首先我需要解决前面的方程,得到"s",然后通过选择图像点找出X和Y坐标:

解决这个问题我可以找到变量"s",使用矩阵的最后一行,因为Zconst是已知的,所以这里有以下代码:
cv::Mat uvPoint = (cv::Mat_<double>(3,1) << 363, 222, 1); // u = 363, v = 222, got this point using mouse callback …Run Code Online (Sandbox Code Playgroud) 我有一个校准过的相机(内在矩阵和失真系数),我想知道相机位置知道一些3d点及其在图像中的对应点(2d点).
我知道,cv::solvePnP能帮助我,看完这个和这个我明白solvePnP的,我的产出rvec和tvec是对象在相机的旋转和平移坐标系.
所以我需要找出世界坐标系中的摄像机旋转/平移.
从上面的链接看来,代码在python中是直截了当的:
found,rvec,tvec = cv2.solvePnP(object_3d_points, object_2d_points, camera_matrix, dist_coefs)
rotM = cv2.Rodrigues(rvec)[0]
cameraPosition = -np.matrix(rotM).T * np.matrix(tvec)
Run Code Online (Sandbox Code Playgroud)
我不知道python/numpy东西(我正在使用C++),但这对我来说没有多大意义:
glTranslatef和glRotate调用?我正在从tsai algo做相机校准.我有内在和外在矩阵,但我怎样才能从该信息中重建三维坐标?
1) 我可以使用高斯消元法找到X,Y,Z,W,然后将点作为齐次系统的X/W,Y/W,Z/W.
2)我可以使用
OpenCV文档方法:

因为我知道u,v,R,t,我可以计算X,Y,Z.
然而,这两种方法最终都会产生不正确的结果.
我做错了什么?
c++ opencv homogenous-transformation camera-calibration pose-estimation
是否可以将 OpenCV 的 solvePNP 与 equirectangular图像一起使用?我有一个 equirectangular 图像,我在这个图像中有四个点(红点)和它们的像素坐标,然后我有 4 个对应的世界点,例如[(0, 0, 0), (2, 0, 0), (2, 10, 0), (0, 10, 0)]我如何估计相机姿势?
我尝试使用 OpenCV,solvePnp但是期望 Brown 相机模型的内在函数,所以没有用。这可以用于球形相机吗?
我试图通过使用我的网络摄像头从具有已知全球位置的四个基准点的图像中获得全局姿势估计.
我检查了很多stackexchange问题和一些文章,我似乎无法得到一个正确的解决方案.我得到的位置编号是可重复的,但绝不与摄像机移动成线性比例.仅供参考我使用的是C++ OpenCV 2.1.
在这个链接上描绘了我的坐标系和下面使用的测试数据.
% Input to solvePnP():
imagePoints = [ 481, 831; % [x, y] format
520, 504;
1114, 828;
1106, 507]
objectPoints = [0.11, 1.15, 0; % [x, y, z] format
0.11, 1.37, 0;
0.40, 1.15, 0;
0.40, 1.37, 0]
% camera intrinsics for Logitech C910
cameraMat = [1913.71011, 0.00000, 1311.03556;
0.00000, 1909.60756, 953.81594;
0.00000, 0.00000, 1.00000]
distCoeffs = [0, 0, 0, 0, 0]
% output of solvePnP():
tVec = [-0.3515;
0.8928;
0.1997]
rVec = [2.5279; …Run Code Online (Sandbox Code Playgroud) opencv computational-geometry camera-calibration pose-estimation extrinsic-parameters
我有一个已知尺寸和位置在墙上的矩形目标,以及机器人上的移动摄像头.当机器人在房间里行驶时,我需要找到目标并计算摄像机的位置及其姿势.另外,使用伺服系统可以改变摄像机的高度和方位角.我能够使用OpenCV定位目标,但我仍然模糊计算摄像机的位置(实际上,我的额头上有一个平坦的位置,因为上周我的头撞在墙上).这是我在做的事情:
我已经阅读了OpenCV书籍,但我想我只是遗漏了一些如何使用投影点,旋转和平移向量来计算相机的世界坐标及其姿势(我不是数学专家): - (
2013-04-02根据"morynicz"的建议,我写了这个简单的独立程序.
#include <Windows.h>
#include "opencv\cv.h"
using namespace cv;
int main (int argc, char** argv)
{
const char *calibration_filename = argc >= 2 ? argv [1] : "M1011_camera.xml";
FileStorage camera_data (calibration_filename, FileStorage::READ);
Mat camera_intrinsics, distortion;
vector<Point3d> world_coords;
vector<Point2d> pixel_coords;
Mat rotation_vector, translation_vector, rotation_matrix, inverted_rotation_matrix, cw_translate;
Mat cw_transform = cv::Mat::eye (4, 4, CV_64FC1);
// Read camera data
camera_data ["camera_matrix"] >> camera_intrinsics;
camera_data ["distortion_coefficients"] >> distortion;
camera_data.release ();
// Target rectangle coordinates in feet …Run Code Online (Sandbox Code Playgroud) 您好我的目标是开发用于飞机(模拟器)驾驶舱的头部跟踪功能,以便提供AR以支持民用飞行员在恶劣的视觉条件下着陆和飞行.
我的方法是检测我知道3D坐标的特征点(在暗模拟器LED中),然后计算估计的(头戴式摄像机)姿势[R | t](旋转与翻译同步).
我所遇到的问题是估计的姿势似乎总是错误的,我的3D点(我也用来估计姿势)的投影不与2D图像点重叠(或不可见).

我的问题是:
如何使用给定的2D到3D点对应关系估计相机姿态.
为什么我的尝试不起作用,哪里可能是错误的来源?
为了使理论解决方案在现实环境中工作,测量(3D和2D点和相机矩阵)的准确度必须如何准确?
这种方法在理论上是否适用于共面点(x,y轴改变)?
我使用的硬件是Epson BT-200.
在飞机上我定义了一个固定的纵坐标,我希望我的程序可以实现相对平移和旋转.程序检测(唯一)LED的图像坐标,并将它们与相应的3D坐标相匹配.使用相机矩阵我使用open-cv示例android代码(https://github.com/Itseez/opencv/tree/master/samples/android/camera-calibration)我尝试使用solvePnP估计姿势.
我的相机矩阵和失真略有变化.以下是我从程序中收到的一些值.我确保打印出的圆形图案的圆距与源代码中记录的相同(以米为单位).
以下是一些示例以及如何创建它的OpenCV Mat.
// protected final double[] DISTORTION_MATRIX_VALUES = new double[]{
// /*This matrix should have 5 values*/
// 0.04569467373955304,
// 0.1402980385369059,
// 0,
// 0,
// -0.2982135315849994
// };
// protected final double[] DISTORTION_MATRIX_VALUES = new double[]{
// /*This matrix should have 5 values*/
// 0.08245931646421553,
// -0.9893762277047577,
// 0,
// 0,
// 3.23553287438898
// };
// protected …Run Code Online (Sandbox Code Playgroud) java opencv computer-vision camera-calibration pose-estimation
我见过几个类似的问题,并对我可能尝试的内容有一些想法,但我不记得看到过任何有关传播的内容。
所以:我正在开发一个测量系统,最终基于计算机视觉。
我进行 N 个捕获,并使用一个库来处理它们,该库以平移和旋转的 4x4 仿射变换矩阵的形式输出姿势估计。
这些姿势估计中有一些噪音。每个旋转轴的欧拉角的标准偏差小于 2.5 度,因此所有方向都非常接近(对于所有欧拉角都接近 0 或 180 的情况)。小于 0.25 度的标准误差对我来说很重要。但我已经遇到了欧拉角特有的问题。
我想对所有这些非常接近的姿势估计进行平均以获得单个最终姿势估计。我还想找到一些传播的衡量标准,以便我可以估计准确性。
我知道“平均”对于轮换实际上并没有很好的定义。
(郑重声明,我的代码是使用 Numpy 的 Python 编写的。)
我也可能想对这个平均值进行加权,因为已知某些捕获(和某些轴)比其他捕获更准确。
我的印象是,我可以只取平移向量的平均值和标准差,对于旋转,我可以转换为四元数,取平均值,并以良好的精度重新归一化,因为这些四元数非常接近。
我还听说过所有四元数中的最小二乘法,但我对如何实现这一点的大部分研究都以惨败告终。
这可行吗?在这种情况下是否有一个合理明确的传播衡量标准?
geometry quaternions affinetransform rotational-matrices pose-estimation
好的,所以我想找到足球比赛的单应性.我现在拥有的是
现在的问题是,由于玩家和来自骄傲的一些噪音,我无法找到适当的单词匹配.同时移除它们也是一个问题,因为这也会隐藏我需要计算单应性的足球场线.
对此有任何建议非常感谢.以下是我正在使用的一些示例代码和图像.
样本图片
http://i65.tinypic.com/21cs9rl.png
我得到的输出
http://i66.tinypic.com/zj6ljo.png
输出右侧的图像是来自视频的帧,左侧的图像是我在filterGreen函数之后上传的相同样本图像,如从代码中可以看到的.
最后我想要的是图像正确映射到中心圆所以我可以在中心绘制一个立方体,有点类似于"这个例子".在此先感谢帮助我.
我正在完成此处找到的 Python 和 OpenCV 头部姿势估计教程:
https://www.learnopencv.com/head-pose-estimation-using-opencv-and-dlib/
我能够准确地将 3D 点投影到 2D 图像上。但是,我无法理解我使用计算的欧拉角(偏航、俯仰、滚转)的实际含义cv2.decomposeProjectionMatrix
我需要知道这些值是否对应于 (yaw, pitch, roll) 或 (roll, pitch, yaw) 等。此外,我需要了解所使用的轴方向,以便我知道旋转度数在哪里从测量。
输出图像:https : //www.learnopencv.com/wp-content/uploads/2016/09/head-pose-example-1024x576.jpg
输出角度:[[-179.30011146], [ 53.77756583], [-176.6277211 ]]
这是我的代码
# --- Imports ---
import cv2
import numpy as np
# --- Main ---
if __name__ == "__main__":
# Read Image
im = cv2.imread("headPose.jpg");
size = im.shape
#2D image points. If you change the image, you need to change vector
image_points = np.array([
(359, 391), # …Run Code Online (Sandbox Code Playgroud) pose-estimation ×10
opencv ×9
python ×3
c++ ×2
euler-angles ×1
geometry ×1
homography ×1
java ×1
opengl ×1
quaternions ×1