问题标签 [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 回答
295 浏览

opencv - 具有可变图像“子区域”的 OpenCv cvRemap

我有一个使用具有“aoi”功能的相机的应用程序。与 openCv 的 ROI 功能类似,相机允许指定要获取的总传感器图像的矩形子集(称为“子区域”)。

在相机中使用 aoi 功能比在 openCv 中进行 ROI 和复制操作更可取。获得图像传感器数据的子区域所需的带宽减少了,这意味着可以实现更高的帧速率。减少的像素数也减少了 CPU 负担。

该应用程序可以选择使用相机校准矩阵进行不失真。我只想做一次相机校准(或者至少不是每次我重新定义相机aoi时)。

当相机的aoi设置为完整图像时, undistort 工作正常。但是,当我在相机中使用减少的 aoi 时,我无法让它工作。黑线出现在未失真图像的底部。

我想我可以像这样复制 mapx 和 mapy 数据:

aoi_box 是发送到相机以定义其 ROI 的内容。不失真是用 cvRemap 完成的:

我认为这应该提取正确的偏移量以重新映射相机子区域中的每个像素。但是,生成的未失真图像在图像底部有黑线。当子区域靠近顶部(小 y)时,我只有几条黑线。当 y 变大时,我会得到更多的黑线。在某个 y 值处,整个未失真图像是黑色的。

可能类似的事情会发生在图像的右侧,但我总是使用图像的全宽,只缩小子区域的高度和 y 位置。

关于为什么这不能正常工作的任何提示?

谢谢

编辑:

我已经更仔细地查看了未失真的图像,并注意到未失真的图像具有 -y 偏移量,该偏移量似乎与子区域的 y 相匹配。该偏移会导致黑线,因为子区域图像中会丢失许多线。

例如,如果子区域是从 y = 50 开始的 100 行,我只看到图像底部的 1/2(50 行)向上移动。

所以,我想我知道如何通过对 mapy_aoi 应用偏移来“解决”这个问题,但我不明白为什么需要这样做。

0 投票
0 回答
707 浏览

c# - 如何通过 C# 获取显示色温?


有谁知道如何通过 C# 获取或设置显示色温?
我在 Microsoft Dev Center 上找到了 Monitor Configuration Functions,但它看起来像 C++。
并且没有这些函数的示例代码。
谁能告诉我在 C# 中调用这些函数的想法?

谢谢
雷克斯

0 投票
1 回答
1894 浏览

matrix - 如何从单应性“正确”重建内在矩阵

我非常努力地阅读以下论文。

Z.张。通过从未知方向查看平面进行灵活的相机校准。计算机视觉国际会议 (ICCV'99),希腊科孚岛,第 666-673 页,1999 年 9 月。

本文提出了一种方法,首先估计一个棋盘在图像坐标和世界坐标之间的单应矩阵。然后根据里面的方程可以得到内参和外参。

但是,我刚刚发现了一些非常奇怪的东西,那就是“要点”的位置,u0 & v0。从理论上讲,它们应该位于图像内。

在这个图中,如果我用单位为像素的图像(黑色)坐标和单位为毫米的世界(蓝色)坐标定义了棋盘。主要点几乎位于这张图像的中心,这是合理的!但是,如果我在另一个图像坐标中定义棋盘,红色坐标,主点将位于图像之外,我不知道如何解释这样的结果。理论上,用不同坐标定义棋盘是相同的。

在我的 matlab 代码中,用于描述该棋盘在两个坐标之间的关系的单应性是绝对正确的。

问题是为什么我无法在不同的图像坐标下获得相同的结果。例如,如果我使用黑色图像坐标,主点应该在图像的中心。如果我使用红色图像坐标,主点也应该在图像的中心。

我知道在不同坐标上描述棋盘会导致不同的单应矩阵,但这应该解释在不同/对应坐标(黑色或红色)中定义的相同“主点”。

如果有人精通这个领域,请帮助我。我什至可以上传我的 matlab 代码让您理解我的意思,并帮助将来可能像我一样困惑的人!

亚历克斯

PS,为了估计内在矩阵,根据论文至少需要两张图像!

图1

0 投票
1 回答
568 浏览

matrix - 相机标定:投影矩阵

我已经在 3D 扫描仪上工作了一段时间,但我仍然有一些关于投影矩阵的问题,我想在继续之前先弄清楚。

我理解这个矩阵描述了相机坐标系和世界坐标系之间的关系。但是我不明白为什么所有的校准软件包都给你这个矩阵?软件是否只是在空间中选择一个随机的世界坐标系,然后计算矩阵?

我在想自己选择世界坐标系会更容易(如果可能的话)。我的计划是创建一个扫描仪,其中物体静止在静态表面上,相机+激光围绕物体做圆周运动。如果有可能以这种方式创建您的投影矩阵,那么世界坐标系就可以很好地放置在静态平台的中间。

如果我不是很清楚,请告诉我,我会添加一张图片。

希望有人可以为我澄清一点,这样我就可以取得一些进展:)。

亲切的问候车辙

0 投票
2 回答
108 浏览

coordinates - 将坐标从图像转换为屏幕

我正在做一个项目,我检测手指移动以在屏幕上移动光标,因此我必须将从图像获得的坐标转换为屏幕上的坐标并将光标移动到那里。
示例:在 (128,127) 上检测到手指我想在屏幕上找到该点的等价物。图像为 (640 x 480),屏幕为 (1366 x 768)。

任何人都可以帮我解决这个问题。尝试了不同的方法,但没有什么能满足我在堆栈溢出中找到的一些方法。

提前致谢。

0 投票
1 回答
8204 浏览

opencv - stereoCalibrate 用于不同的相机(RGB 和红外线)

我在校准两个相机时遇到问题:第一个是 rgb,第二个是红外线。它们有不同的分辨率(我调整大小并裁剪了更大的图像)、焦距等......

例子:

RGB 1920x1080RGB 1920x1080

红外线 512x424红外线 512x424

如何相互校准?我应该在 stereoCalibrate 中使用哪些参数。默认样本 stereo_calib.cpp 产生非常大的错误。像这样的东西:https ://www.dropbox.com/s/x57rrzp1ejm3cac/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82 %202014-04-05%2012.54.17.png

以 RMS 误差 = 4.1026 完成

平均重投影误差 = 10.2601

更新

我使用calibration.cpp 示例为每个相机独立生成了校准参数。对于 RGB 相机,我首先调整图像大小并将图像裁剪为与红外相机 (512x424) 匹配的分辨率,然后进行校准。对于 RGB 相机,我得到 camera.yml,对于 IR 相机,我得到 camera_ir.yml。然后我尝试使用修改的 stereo_calib.cpp 示例进行立体校准。在调用stereoCalibrate之前,我从文件中读取相机的camera_matrix和distortion_coefficients参数,并将这些矩阵放入stereoCalibrate。

0 投票
2 回答
4676 浏览

opencv - 针孔相机模型坐标系

最近一直在研究针孔相机模型,但是被OpenCV提供的模型和《计算机视觉中的Multiple View geometry》教科书弄糊涂了。

我知道下面的照片是一个简化的模型,它切换了图像平面和相机框架的位置。为了更好地说明和理解,并考虑到主点 (u0,v0),两帧之间的关系为x=f(X/Z)+u0y=f(Y/Z)+v0

在此处输入图像描述

但是,我真的很困惑,因为通常图像坐标是以下第四象限坐标的形式!

我可以直接将以下定义中的 (x,y) 替换为上述“等效”针孔模型,这不是很有说服力吗?

在此处输入图像描述

此外,如果一个物体在相机坐标(当然是Z>f)的区域(+X,+Y)象限内,在等效模型中,它应该出现在图像坐标的右半平面上。但是,在普通相机拍摄的图像中,这样的物体应该位于左半边。因此,对我来说这个模型是不合理的。

最后,我尝试在原始模型的基础上推导如下。

在此处输入图像描述

结果是x1=-f(X/Z)y1=-f(Y/Z)

然后,我试图找到(x2,y2)坐标和相机坐标之间的关系。结果是x2=-f(X/Z)+u0y2=-f(Y/Z)+v0

在 (x3,y3) 坐标和相机坐标之间,结果是x3=-f(X/Z)+u0y3=f(Y/Z)+v0

无论我尝试过哪个坐标系,都不是一些 CV 教科书提供的x=f(X/Z)+u0and的形式。y=f(Y/Z)+v0

另外,在(x2,y2)-坐标或(x3,y3)-坐标上的投影结果也不合理,原因相同:物体在相机坐标的(+X,+Y,+Z)区域应该“出现”在相机拍摄的图像的左半平面上。

谁能指出我误解了什么?

0 投票
1 回答
2750 浏览

kinect - Kinect 如何计算深度?

我在这里有点困惑。

Kinect 如何计算深度:我的理解是

  • 红外投影仪投射出一种图案,该图案被反射回来并由红外摄像机读取。
  • 现在红外摄像机知道特定深度的模式。利用传入和已知模式之间的差异来计算使用三角测量(使用相似三角形的比例)的已知深度。

问题1:是否考虑红外投影仪和红外摄像机之间的距离?我猜不是,因为它们太接近而无法考虑。

问题 2:现在我们直接从模式中获取深度。我们什么时候disparity map用来计算深度?

0 投票
1 回答
2868 浏览

c++ - OpenCV 校正,图像 C++ 上有太多黑色区域

我正在使用 OpenCV 来校准和校正立体声系统。我有一个眼睛会聚的立体相机,实际上我正在按以下顺序运行这些功能:

然后我循环这个以获得我想要获取的图像的数量

在这个块之后,我称之为两个:

进而:

最后:

这基本上就是我正在做的,但结果非常糟糕,因为图像有一个非常大的黑色区域。这是一个例子:

离开 OpenCV

这是我必须获得的校正图像,直接从相机拍摄:

离开相机

如您所见,图像似乎在右侧平移并剪切,右侧相同,但在左侧平移,结果几乎相同。

那么如何才能获得类似于上一个更好的结果呢?哪里有问题?作为附加数据,我注意到 rms 不太好,大约为 0.4,重投影误差约为 0.2,我知道它们一定要低一些,但我已经尝试了很多次不同的图案、照明和依此类推,在校准中,但我总是采取相同的结果甚至是最差的结果。

0 投票
2 回答
4461 浏览

opencv - 实时相机自校准 OpenCV

我正在开发一个增强现实应用程序——一个虚拟试穿,使用 OpenCV + OpenGL + QtCreator——我现在正忙于校准相机。我在 OpenCV 中使用棋盘模式找到了很多关于校准过程的资源,但是我需要实现某种自校准,所以这没有帮助。我知道它可以完成,但并没有真正找到任何有用的东西。我发现了这项研究http://www.eidelen.ch/thesis/MscThesisV1.0.pdf,其中描述了自校准过程(第 4 章),但我不确定这是否可行。我想要实现的目标可以在http://www.ray-ban.com/usa/virtual-mirror看到。我只想知道他们是如何校准的。