问题标签 [camera-calibration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencv - 没有棋盘图像的 3D 校准?
我需要很长时间才能让函数在 OpenCV 中运行,所以我想知道我的总体计划是否有意义,然后再深入研究如何实现它。(2.3.1,Windows 7,C++)我会很感激任何建议。
问题:
我在飞碟靶场工作,想了解粘土目标飞行的 3D 信息,直到它们被击中。
数据:
两个摄像头(最终会有更多)相距几码,所以我无法制作足够大的棋盘让他们都看到。
斜山目标区域每侧 50 到 100 码之间有几棵树,至少水平覆盖每个摄像机的视野。我已经测量了到每个特定点的距离(例如第一左肢与躯干的交界处)。
计划
将树位置作为 Point3f 对象放入 objectPoints 向量中
找到它们出现在每个相机图像上的点,并将这些 Point2f 对象放入每个相机的 imagePoints 向量中
立体声校准
问题
- 我的计划是否还算可行?
如果是
使用距相机脚的棋盘自行校准每个相机然后将内在矩阵和 distCoeffs 矩阵传递给 stereoCalibrate 会更好吗?
如果我在没有棋盘的情况下进行立体校准,我应该将什么作为大小传递给函数?
谢谢你的任何建议。
c# - 通过 Emgucv 调用 opencv
我正在尝试在 c# 中使用 Emgucv 将投影矩阵分解为旋转矩阵、平移矩阵和相机矩阵。我可以使用 RQ-Factorization 轻松做到这一点,但通过检查 Emgucv API 参考我找不到它。
由于 Emgucv 是一个 opencv 包装器,因此我搜索了 opencv 函数,发现了以下 c++ 函数:
问题是:有什么方法可以在 Emgucv 中使用这些功能?
c# - EmguCV FindFundamentalMat - 输入参数
我正在为 OpenCV 使用 EmguCV 包装器,并且我正在尝试通过基本矩阵进行未校准的校正。
我已经从两个相机中找到了带有 FindChessboardCorners 函数的图像点,然后我想找到基本矩阵,但是我在将参数传递给函数 eCvInvoke.cvFindFundamentalMat() CvInvoke.cvFindFundamentalMat( ) 时遇到问题
困扰我的是二维点数组,只是无法获得正确的格式将其传递给 OpenCv 函数 cvFindFundamentalMat。
据我了解,EmguCV/OpenCV openCv 需要通过 IntPtr 传递的 CvMat 类型的一维数组......但即使我这样做,OpenCV 也会抛出错误消息“OpenCV:通道数或列数或行数必须为 = 1"
我究竟做错了什么?
python - OpenCV(python)基本和基本矩阵不同意
我尝试使用 OpenCV(python 接口)校准立体相机。我首先使用 calibrateCamera2 分别校准了两个摄像头,然后将参数输入到 stereoCalibrate
我使用极线约束检查结果(如 OpenCV 书中所述),得到的平均误差约为 0.0039。
原则上,我应该能够将基本矩阵和基本矩阵与我的相机矩阵联系起来。所以我要做的是:
然而,得到的矩阵 F2 一点也不像 F。有什么明显的我做错了吗?非常感谢您的帮助。
编辑: dot 和 inv 来自 numpy。
image-processing - 通过基本矩阵校正未校准的相机
我正在尝试使用 Emgu/OpenCV 校准 Kinect 摄像头和外部摄像头。我被困住了,我真的很感激任何帮助。
我选择通过基本矩阵,即极线几何来做到这一点。但结果并不如我所料。结果图像是黑色的,或者根本没有意义。Mapx和mapy点通常都等于infinite或-infinite,或者都等于0.00,很少有正则值。
这就是我尝试纠正的方式:
1.)查找图像点 从一组图像中获取两个图像点数组(每个相机一个)。我已经使用 chessboard 和 FindChessboardCorners 函数完成了这项工作。
2.) 找到基本矩阵
我是从整组图像中传递所有收集的点,还是仅从试图纠正的两个图像中传递?
3.)查找单应矩阵
4.)获取 mapx 和 mapy
我有一个问题......因为我没有使用校准图像,我的相机矩阵和失真系数是多少?如何从基本矩阵或单应矩阵中得到它?
5.)重新映射
这并没有返回好的结果。如果有人能告诉我我做错了什么,我将不胜感激。
我有 25 对图像,棋盘图案大小为 9x6。
c++ - 相机传感器尺寸
我正在尝试使用作为装备配置连接的两台摄像机(我正在抓取 640X360 图像的 Microsoft HD3000 CMOS 摄像机)进行一些立体重建。在立体匹配算法的某个时刻,我需要指定诸如“单个传感器元件尺寸”之类的内容,以便能够获得与视图场景一致的距离测量值。如何找出传感器尺寸?我应该提到,在相机数据表中,此信息不存在,焦距也不存在,这对于准确测量是必不可少的。
opencv - 相机校准和重新映射是否会产生针孔相机模型?
我正在使用 opencv 来测量一些物体。在进行相机校准并重新映射原始图像后,我可以将生成的图像视为由针孔相机模型产生的吗?(所以我可以使用 x = Xf/Z 的简单方程)
c++ - 网络摄像头校准
我有 2 个后勤网络摄像头,我想做立体三角测量,我必须测量 2 个网络摄像头的焦距。
我的问题是,如果我使用 openCv 来校准相机并生成内在和外在矩阵,我可以使用内在矩阵中生成的焦距值作为焦距的确切值。
简而言之,我想知道我是否可以使用 2 个网络摄像头进行立体三角测量,而不是使用整个立体摄像头...
computer-vision - 在经过校准的立体视觉设备中,如何获得实现 3D 三角测量算法所需的“相机矩阵”?
我正在尝试实现 Hartley & Zisserman 的“多视图几何”(第 12.2 节)中的(相对简单的)线性齐次 (DLT) 3D 三角测量方法,目的是在未来实现其完整的“最优算法”。现在,基于这个问题,我正试图让它在 Matlab 中工作,然后将其移植到 C++ 和 OpenCV 中,并在此过程中测试一致性。
问题是我不确定如何使用我拥有的数据。我已经校准了我的立体装置,并获得了两个固有相机矩阵、两个失真系数向量、两个相机相关的旋转矩阵和平移向量,以及基本矩阵和基本矩阵。我还有两个点的 2D 坐标,它们应该是两个图像坐标系中单个 3D 点的对应关系(分别由第一个和第二个相机拍摄)。
该算法将两个点坐标和两个 4x3“相机矩阵”P 和 P' 作为输入。这些显然不是从校准中获得的内在相机矩阵 (M, M'),因为它们是 3x3,而且因为单独使用它们的投影将 3D 点放在两个不同的坐标系中,即 - 外在 (旋转/平移)数据丢失。
H&Z 书包含有关使用 SVD 分解从基本矩阵或基本矩阵中恢复所需矩阵的信息(第 9 章),但也有其自身的其他问题(例如尺度模糊)。我觉得我不需要那个,因为我明确定义了旋转和平移。
那么问题是:使用第一个内在矩阵是否正确,将额外的零列作为第一个“相机矩阵”(P = [M | 0]),然后将第二个内在矩阵乘以一个外在矩阵由旋转矩阵和平移向量组成作为额外的列,以获得第二个所需的“相机矩阵”(P'=M'*[R|t])?还是应该以不同的方式完成?
谢谢!
transform - 这是将两个 2D 点转换为一个 3D 的正确方法吗?
在我的 Windows 7 PC 上的 MSVSC++ 中,有一个移动物体的 imagePoints 我用两个 MS LifeCam 识别了两次。我想确定这两个 3D 点之间的距离。显示了我正在使用的步骤。我几乎没有包含任何细节,因为现在我只想了解我是否使用了正确的 OCV 2.3.1 功能。
)1。calibrateCamera 为每个摄像头
输出:每个摄像机的 cameraMatrix 和 distCoeffs
)2。simpleBlobDetect 一次为每个摄像头两次
)3。立体校准
)4。立体校正
)5。不失真点
)6。透视变换
从 30k 英尺开始,这些是正确的步骤吗?
谢谢。查尔斯