问题标签 [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 - 相机校准和重新映射是否会产生针孔相机模型?
我正在使用 opencv 来测量一些物体。在进行相机校准并重新映射原始图像后,我可以将生成的图像视为由针孔相机模型产生的吗?(所以我可以使用 x = Xf/Z 的简单方程)
python - 机械手/相机校准问题(面向线性代数)
我正在从事一个涉及显微镜(将摄像头连接到视口;视频馈送流到我们正在开发的应用程序)和机械臂的研究项目。显微镜和机械臂都由 Luigs & Neumann 控制盒控制(非常陈旧 - 计算机通过串行电缆与其连接,响应时间很慢www。)显微镜可以在 3 个维度上移动;X、Y 和 Z,它们的轴彼此成直角。查询该框时,它将返回每个设备每个轴的位置的十进制值。可以向每个设备发送命令以移动到特定位置,精度为亚微米。
然而,机械臂在所有 3 个维度上都是可调节的,因此不能保证其任何轴都以直角对齐。我们需要能够查看来自摄像机的视频流,然后单击屏幕上我们希望机械臂尖端移动到的点。因此,必须校准两个坐标系。
目前,我们通过将显微镜/相机的位置移动到机械臂的尖端,并将其设置为两个坐标系之间的同步点,并在X方向移动机械臂+250um,将显微镜移动到机械臂的尖端在这个新位置,然后使用这些值之间的差异来定义一个 3d 矢量,该矢量对应于机械臂移动的距离和方向,在显微镜坐标系中的每单位。对机械臂的每个轴重复此操作。
一旦获得此数据,为了将机械臂移动到显微镜坐标系中的特定位置,程序可以求解方程组,该程序确定在每个轴上移动机械臂需要多少才能将其移动到屏幕的中心点。到目前为止,这非常可靠。
我们在这里遇到的问题是,由于设备的响应时间较慢,可能需要 5-10 分钟才能完成校准过程,而且由于机械臂的尖端必须偶尔更换,这使得校准过程变得复杂在实验过程中,需要重复校准过程。我们的研究对时间相当敏感,这在该过程中造成了主要瓶颈。
我的线性代数有点杂乱无章,但似乎如果我们测量显微镜坐标系中每个单位的机械臂尖端行进的单位并将其硬编码到程序中(目前),它可能是可能的一次将操纵器的所有 3 个轴移动特定的量,然后从该信息中导出每个轴的向量。我不确定如何去做(或者是否有可能),任何建议都将不胜感激。如果您需要任何其他信息,或者如果您需要澄清任何事情,请告诉我。
opencv - 确定投影仪焦距
我正在尝试运行 cvPOSIT 算法来映射使用 Optoma PK301 和 Kinect 深度相机投影的点。我已经通过使用 Matlab 中的 Projector-Camera Calibration Toolbox (http://code.google.com/p/procamcalib/) 对其进行校准来确定投影仪的内在参数。我能否使用这些内在参数(特别是焦距fc
)来确定投影仪的实际焦距以输入 OpenCV 中的 POSIT 函数?
opencv - OpenCV 的 undistortPoints 是否也可以纠正它们?
我试图通过使用带有两个摄像头的 OpenCV 2.3.1 来确定两个对象之间的距离,但无法计算对象的 objectPoints(OCV 2.3.1、MSVC++、Windows 7)。我认为这是因为图像点在计算视差之前没有被纠正。
一、我首先做什么
步骤 1. 自行校准每台相机
步骤 2. 一起校准相机
步骤 3. 创建整改数据
二、我相信什么
目标:我正在尝试对来自相机 1 的图像和来自相机 2 的图像中一个物体的图像点进行不失真和校正(我执行此过程两次:一次是在粘土鸽子在发射器上时,一次是在粘土鸽子之前的一帧解体)
方法:我相信我不需要使用 initUndistortRectifyMap 然后 Remap 而是可以只使用 undistortPoints。我认为 undistortPoints 不扭曲兴趣点并纠正它们。
三、我要做的第二件事
如果我的信念不正确,您可以忽略这一点。
undistortPoints 的输入和输出数组(launcherC1、launcherC1Undistorted、...clayPigeonC2、clayPigeonC2Undistorted)是 Point2f 对象的向量。
四。信仰与现实的差异
运行所有 undistortPoints 函数后,
- launcherC1Undistorted.y 不等于 launcherC2Undistorted.y
- ClayPigeonC1Undistorted.y 不等于 ClayPigeonC2Undistorted.y。
它们的差异高达 30%。
五、问题
- Q1 除了不扭曲它们之外, undistortPoints 是否还可以校正点?
- Q1.1_是的。修正后 y 的值是否应该相等?
- Q1.1.1_yes 你能从代码中看出我做错了什么,所以他们没有吗?
- Q1_no 如果 undistortPoints 没有纠正这些点,那么我该如何纠正它们?
touchscreen - 触摸屏校准
有没有一种简单的方法来校准触摸屏,而无需使用更高的数学?
我已经编写了自己的 LCD 库和自己的触摸板库,两者都工作得很好,但当然我需要在触摸板获得可用结果之前对其进行校准。我发现的唯一一件事就是这个,这对我来说太数学了。我也不需要非常准确的结果。只是能够获得 +- 10 像素。
我使用带有 SSD1289 控制器和 ADS7843 触摸板控制器的 TFT 3.2" LCD 320x240 模块。
http://www.eetimes.com/design/embedded/4023968/How-To-Calibrate-Touch-Screens
谢谢你的帮助。
opencv - cvInitUndistortMap() 崩溃
我正在做 Bradski 的“Learning OpenCV”的示例 11-1。我的实现在尝试使用 cvInitUndistortMap() 时崩溃。
一个类似的帖子(这里)有关于 cvUndistort2() 和 cvRemap() 使用彩色图像的问题。我不确定这里的问题是否相关。
代码如下:
其中 Intrinsics.xml 和 Distortion.xml 的校准结果如下:
Intrinsics.xml:
失真.xml:
我正在使用 OpenCV 2.4、Windows7、Microsoft Visual C++ 2010 Express 和 MBP 网络摄像头。
matlab - 使用之前和之后的值来分析所需的值::: 辐射校准 - 条纹
假设我有一个 1x15 的数据表
所以对于我的裸奔方程,我需要实现这个:
% 条纹 = {[abs(Q_n - ((Q_n-1 + Q_n+1)/2))] / ((Q_n-1 + Q_n+1)/2)))}*100
方程的解释:
让我们将值 90 分配给 Q_n(这来自单元格 (1,5))使用这个值意味着对于 Q_n-1 我们想要值 59 而对于 Q_n+1 我们想要值 26本质是 (1,4) 之前的单元格和 (1,6) 之后的单元格)
Q_n = 90
Q_n-1 = 59
Q_n+1 = 26
我的问题是:我将如何对整个数据集执行此操作并将它们应用于条纹方程?(不包括第 1 行和第 15 行,因为第 1 行不能有 Q_n-1,第 15 行不能有 Q_n+1)
我在想一些事情可能是这样的:
opencv - 如果您使用非正方形 (=non-NxN) 网格并 findChessboardCorners()
我在 OpenCV 论坛上发布了这个,但到目前为止还没有回复,所以在这里尝试。
2.4.0 参考手册的第 352 页有这个注释:
注意:如果您使用非正方形 (=non-NxN) 网格并 findChessboardCorners() 进行校准,并且 calibrateCamera 返回错误值(零失真系数,图像中心非常远离(w/2-0.5,h/2- 0.5),和/或 fx 和 fy 之间的巨大差异(10:1 或更大的比率)),那么您可能使用 patternSize=cvSize(rows,cols) 而不是使用 patternSize=cvSize(cols,rows) infindChessboardCorners() 。
这让我很困惑。是什么定义了棋盘上的行与列?毕竟,棋盘在收集数据集以供 calibrateCamera 使用的同时旋转和移动。
什么是很远?我有一个非方形棋盘,1292x964,1/3 格式,4 毫米非球面镜片;在全宽时,我得到:cx =639 和 cy=550。理想情况下,应该是 1292/2 = 646 和 964/2= 457;
我为 cy 获得的 550 与预期的 457 是“大差异”吗?
我应该在 patternSize 中交换宽度/高度吗?如果是这样,这是否意味着我应该在校准期间限制棋盘的旋转,以保持棋盘行与列相对于相机成像器的概念?
谢谢,戴夫托马斯
opencv - OpenCV OpenNI 校准 kinect
我用 home 通过 kinect 捕捉:
现在我不知道是否必须校准 kinect 才能使深度像素值正确。也就是说,如果我从图像 RBG 中获取一个像素(u,v),那么从图像深度中获取像素(u,v)得到正确的深度值?
任何帮助深表感谢。谢谢!
c++ - 变量“”周围的堆栈已损坏(在 opencv 中)
当我调试这段代码时,它没有输入 cvundistortpoint 并给我这个错误:变量“输入”周围的堆栈已损坏。我读过这个问题的类似答案,但没有一个是在 OpenCV 中,这有什么区别吗?是因为我的 _src 和 _dest 矩阵大小吗?我已经放了“for”循环来查看 _src 是否被填充。