问题标签 [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.

0 投票
1 回答
2756 浏览

opencv - OpenCV OpenNI 校准 kinect

我用 home 通过 kinect 捕捉:

现在我不知道是否必须校准 kinect 才能使深度像素值正确。也就是说,如果我从图像 RBG 中获取一个像素(u,v),那么从图像深度中获取像素(u,v)得到正确的深度值?

任何帮助深表感谢。谢谢!

0 投票
0 回答
278 浏览

iphone - iPhone 4 前置摄像头视野(FaceTime FOV)

这个问题和其他几个在线资源列出了主相机的FOV。我对 FaceTime 摄像头也有同样的疑惑。更大吗?较少的?

0 投票
1 回答
289 浏览

opencv - 校准 Opencv

我正在尝试使用 Opencv 从六个棋盘图像中找到相机外在因素。我的输出是:

和:

现在,我如何计算屏幕上点 (u,v) 的真实世界坐标?

0 投票
1 回答
2012 浏览

c++ - 无法绘制棋盘角,因为 cvCvColor 方法中的断言失败

我正在从两个摄像头收集好帧,用于立体摄像头校准。

但我在运行时遇到了一个奇怪的错误:-

另外,我检查了源图像和目标图像的 Dimension 和 nchannel 值是否相等。

提前致谢!!

0 投票
0 回答
225 浏览

opencv - 立体网络摄像头的机械校准和微调

有很多关于立体(计算机)视觉的读物。从这些阅读中得到的最值得注意的信息是,你几乎被 OpenCV 困住了……这绝对不是一件坏事。

大多数文章都是关于通过 OpenCV 功能进行校准以补偿劣质/便宜的镜头。

现在我更关心相机在其背板上定位的机械校准。您只能通过校准来补偿这么多,这就是为什么我希望我的相机定位接近完美。

我将 2 个罗技 9000 拧在相距约 10 厘米的铝背板上。我的目标是在 2-40 米范围内做一些深度感知。

我将如何检查相机的相对位置是否正确?我正在考虑将相机指向很远的距离(> 500m)并确保相机的中心(像素)正在查看相同的(部分)场景。这够了吗?我是否还应该注意角落显示的内容,还是稍后通过镜头校准完成?

另外,在一个有点相关的注释上:最终我需要绘制一个视差图。OpenCV 上有无数使用“快速”和“慢速”算法的指南。我将实时使用“快速”,它需要使用大量参数进行微调。这是相机类型/镜头的一次性调整,还是我应该为每个(新)场景都这样做?在后者的情况下,它会使我的立体相机在实践中变得不那么有用。

0 投票
1 回答
1001 浏览

c++ - 未解析的外部符号 cvFindChessboardCorners()

我已经包含了cvFindChessboardCorners()声明的头文件和其他一些头文件,但它仍然不起作用。如何定义符号?不知道这里发生了什么?

如果需要更多信息,请告诉我。谢谢。

0 投票
1 回答
3926 浏览

kinect - Microsoft Kinect SDK 返回的深度图像是否已经不失真?

假设 Microsoft SDK 可以访问 Kinect 的内在参数,但有人知道它返回的深度图像是否实际上没有失真?我找不到任何相关的东西。

让我知道我是否超出了主题,尽管我认为这是一个隐式编程问题:)

编辑:我发现一些其他有用的链接支持@Coeffect的回答

0 投票
1 回答
14236 浏览

opencv - 较小的重投影误差是否总是意味着更好的校准?

在相机校准期间,通常的建议是使用许多图像 (>10),其姿势、深度等都有变化。但是我注意到,通常我使用的图像越少,重投影误差就越小。例如,对于 27 张图像,cv::calibrateCamera 返回 0.23,而只有 3 张我得到 0.11。这可能是由于在校准期间我们正在解决超定系统的最小二乘问题。

问题:

  1. 我们是否真的使用重投影误差作为校准好坏的绝对量度?例如,如果我用 3 张图像校准得到 0.11,然后用其他 27 张图像校准得到 0.23,我们真的可以说“第一次校准更好”吗?

  2. OpenCV 使用相同的图像进行校准和计算误差。这不是某种形式的过拟合吗?如果我实际上使用了 2 个不同的集合——一个用于计算校准参数,一个用于计算误差——不是更正确吗?在这种情况下,我将使用相同的(测试)集来计算来自不同(训练)集的所有校准结果的误差。那不是更公平吗?

0 投票
2 回答
3125 浏览

opencv - Open CV - SfM 的几种方法

我有一个任务:

我们有一个系统工作,其中相机围绕人头绕半圈。我们知道相机矩阵和每一帧的旋转/平移。(失真等等......但我想首先在没有这些参数的情况下工作)

我的任务是我只有相机矩阵,它在这个动作中是恒定的,还有图像(超过 100 个)。现在我必须逐帧获取平移和旋转,并将其与现实世界中的旋转和平移进行比较(来自我拥有但仅用于比较的系统,我也证明了!)

到目前为止我所做的第一步:

  1. 使用 OpenCV Cookbook 中的 robustMatcher -works finde - 40-70 匹配每帧 - 可见看起来非常好!
  2. 我用 getFundamental() 得到了 basicMatrix。我使用了来自 robustMatcher 和 RANSAC 的稳健点。
  3. 当我得到 F 时,我可以像这样用我的 CameraMatrix K 得到 Essentialmatrix E:

cv::Mat E = K.t() * F * K; //Found at the Bible HZ Chapter 9.12

现在我们需要用 SVD 从 E 中提取 R 和 t。顺便说一句,camera1 的位置为零,因为我们必须从某个地方开始。

这就是我的真实状态!

我的计划是:

  1. 对所有点进行三角测量以获得 3D 点
  2. 将框架 i 与框架 i++ 连接起来
  3. 以某种方式可视化我的 3D 点!

现在我的问题是:

  1. 这个强大的匹配器过时了吗?还有其他方法吗?
  2. 使用我在第二步中描述的这一点是错误的吗?必须用失真或其他方式转换它们吗?
  3. 我在这里提取的 R 和 t 是什么?是从camera1的角度看camera1和camera2之间的旋转和平移吗?
  4. 当我在圣经或论文或其他地方阅读时,我发现 R 和 t 有 4 种可能性!'P' = [UWV^T |+u3] oder [UWV^T |−u3] oder [UW^TV^T |+u3] oder [UW^TV^T |−u3]' P' 是投影矩阵第二张图片。这意味着 t 可能是 - 或 + 并且 R 可能完全不同?!我发现我应该将一个点计算为 3D 并找出该点是否在两个摄像机的前面,然后我找到了正确的矩阵!我在互联网上找到了其中一些代码,他只是说没有进一步计算: cv::Mat R1 = svd.u * cv::Mat(W) * svd.vtt = svd.u.col(2); //=u3 为什么这是正确的?如果不是 - 我将如何在 OpenCV 中进行这种三角测量?我将这个翻译与给我的翻译进行了比较。(首先我必须将平移和旋转与 camera1 相关,但我现在得到了这个!)但它不一样。我的程序的值只是让我们称它为从正数跳到负数。但它应该更恒定,因为相机在一个恒定的圆圈中移动。我确信某些轴可能会被切换。我知道翻译只是从 -1 到 1,但我认为我可以从我的结果中提取一个因素到我的比较值,然后它应该是相似的。

有人以前做过这样的事情吗?

很多人通过使用棋盘进行相机校准,但我不能使用这种方法来获取外部参数。

我知道视觉 sfm 可以以某种方式做到这一点。(在 youtube 上有一段视频,有人绕着一棵树走,并从这些图片中使用视觉 sfm 重建这棵树)这与我必须做的几乎相同。

最后一个问题:

有人知道可视化我的 3D 点的简单方法吗?我更喜欢MeshLab。有这方面的经验吗?

0 投票
1 回答
2888 浏览

opencv - 立体校准后,将摄像机 1 图像中的 2d 点投影到摄像机 2 图像

我正在使用 opencv 对两个相机(我们将它们命名为 L 和 R)进行立体校准。我使用 20 对棋盘图像并计算 R 相对于 L 的变换。我想要做的是使用一对新图像,计算图像 L 中的 2d 棋盘角,根据我的校准变换这些点并绘制图像 R 上的相应变换点,希望它们与该图像中棋盘的角相匹配。

我尝试了将 2d 点从 [x,y] 转换为 [x,y,1] 的朴素方式,乘以 3x3 旋转矩阵,加上旋转向量然后除以 z,但结果是错误的,所以我猜猜这不是那么简单(?)

编辑(澄清一些事情):

我想这样做的原因基本上是因为我想在一对新图像上验证立体校准。所以,我实际上并不想在两个图像之间获得新的 2d 转换,我想检查我找到的 3d 转换是否正确。

这是我的设置:

设置

我有与两个摄像机(E)相关的旋转和平移,但我没有相对于每个摄像机(E_R,E_L)的对象的旋转和平移。

理想情况下我想做的是:

  1. 从相机 L 中选择图像中的二维角(以像素为单位,例如 [100,200] 等)。
  2. 根据我找到的矩阵 E对二维点进行某种转换。
  3. 从相机 R 获取图像中相应的 2d 点,绘制它们,希望它们与实际角点匹配!

不过,我想得越多,我就越相信这是错误的/无法做到。

我现在可能正在尝试的事情:

  1. 使用相机的内在参数(比如说 I_R 和 I_L),求解 2 个最小二乘系统以找到 E_R 和 E_L
  2. 从相机 L 中选择图像中的 2d 角。
  3. 将这些角投影到相应的 3d 点 (3d_points_L)。
  4. 做:3d_points_R = (E_L).inverse * E * E_R * 3d_points_L
  5. 从 3d_points_R 获取 2d_points_R 并绘制它们。

当我有新东西时我会更新