小编j18*_*897的帖子

如何将使用EPnP计算的相机姿态变换应用于VTK相机?

对于我的增强现实项目,我使用VTK相机观看3D模型,并使用真实相机观看模型的真实对象.

我使用EPnP来估计真实相机的外在矩阵(这个相机已经预先校准,因此我知道内部参数),通过从真实相机图像和内部参数提供来自VTK及其相应2D点的3D点.用于EPnP算法的真实相机.

之后,我获得了一个旋转和平移矩阵,其元素为 - > R1,R2,R3,.....,R9和t1,t2和t3.

所以我的真实相机的外在矩阵看起来像这样(让我们称之为extrinsicReal)

R1 R2 R3 T1
R4 R5 R6 T2
R7 R8 R9 T3
 0  0  0  1
Run Code Online (Sandbox Code Playgroud)

在此之后,我使用以下代码估计我的VTK相机的外在矩阵:

vtkSmartPointer<vtkMatrix4x4> extrinsicVTK = vtkSmartPointer<vtkMatrix4x4>::New();
extrinsicVTK->DeepCopy(renderer->GetActiveCamera()->GetViewTransformMatrix());
Run Code Online (Sandbox Code Playgroud)

要将VTK摄像机3D模型与真实摄像机融合,VTK摄像机应设置在与真实摄像机位置相同的位置,并且VTK摄像机的焦距应与真实摄像机的焦距相同.另一个重要步骤是将真实相机的相同外在矩阵应用于VTK相机.我该怎么做?

我做的是我采用extrinsicReal的反转并将其与extrinsicVTK相乘得到一个新的4*4矩阵(让我们称之为newMatrix).我将此矩阵应用于VTK相机的转换.

vtkSmartPointer<vtkMatrix4x4> newMatrix = vtkSmartPointer<vtkMatrix4x4>::New();
vtkMatrix4x4::Multiply4x4(extrinsicRealInvert,extrinsicVTK,newMatrix);

vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
transform->SetMatrix(NewM); 
transform->Update();

renderer->GetActiveCamera()->ApplyTransform(transform);
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是正确的方法.但是我检查了真实的摄像机位置(我在EPnP之后得到的)和VTK摄像机位置(在应用上面的变换之后)并且它们都完全相同.此外,真实相机的方向和VTK相机的投影方向也是相同的.

问题是即使在上述参数匹配VTK和真实相机之后,3D VTK模型似乎也不能与真实相机视频完美对齐.有人可以指导我一步一步调试问题吗?

opencv computer-vision augmented-reality vtk

9
推荐指数
1
解决办法
2511
查看次数

如何将焦距(以像素为单位)转换为毫米(mm)?

我正在使用OpenCV校准方法来确定我的内窥镜的焦距.

http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html

而且我的焦距是以像素为单位.但我希望这是毫米,我不知道传感器的尺寸.如何以毫米(mm)计算焦距?

opencv camera-calibration

7
推荐指数
1
解决办法
1万
查看次数

当用户名包含斜杠时,PuTTY PSCP错误"不支持本地到本地副本"

我正在尝试使用PSCP将文件从本地Windows计算机移动到远程Linux服务器.我连接到VPN,以便我可以使用我的用户名和密码访问我的远程Linux机器.

我的PSCP转移命令是:

pscp C:\Users\username\Desktop\list.txt PEM\username@10.120.43.78:/home/local/PEM/username
Run Code Online (Sandbox Code Playgroud)

这导致错误

不支持本地到本地副本


我试过这个命令只是为了试一试

pscp C:\Users\username\Desktop\list.txt username@10.120.43.78:/home/local/PEM/username
Run Code Online (Sandbox Code Playgroud)

上面的命令导致问我密码.但是,当我输入密码时,访问被拒绝.这是因为我的远程Linux机器用户名是PEM/username和不是username.但是,如果我使用PEM/username"本地不支持本地副本"的错误消息来了.是否与\用户名中的斜杠有关PEM\username

ssh putty pscp

7
推荐指数
1
解决办法
2万
查看次数

在 Red Hat 中安装 R 3.3.1。需要 LZMA 版本 &gt;=5.0.3

我正在从源安装 R 3.3.1。在./configure --enable-R-shlib执行过程中,弹出错误:

checking for lzma_version_number in -llzma... yes
checking lzma.h usability... yes
checking lzma.h presence... yes
checking for lzma.h... yes
checking if lzma version >= 5.0.3... no
configure: error: "liblzma library and headers are required"
Run Code Online (Sandbox Code Playgroud)

我看到没有可用的 LZMA 版本 5.0.3,目前可通过XZ Utils.

图卡尼 XZ 实用程序

我安装了,XZ 5.2.2但错误仍然出现。

redhat r lzma xz

7
推荐指数
1
解决办法
5109
查看次数

是否有基于浏览器的 Python IDE,例如 RStudio 服务器?

我熟悉RStudio服务器,它是远程linux环境下R统计开发的绝佳工具。

只是想知道是否有用于 Python 开发的类似服务器端 IDE(基于 Web 浏览器)?

python rstudio-server

7
推荐指数
1
解决办法
3543
查看次数

计算两个pandas数据帧的行之间的欧几里德距离

我有两个熊猫dataframes d1d2看起来像这些:

d1 好像:

  output   value1   value2   value2
    1           100     103      87
    1           201     97.5     88.9
    1           144     54       85
Run Code Online (Sandbox Code Playgroud)

d2 好像:

 output   value1   value2   value2
    0           100     103      87
    0           201     97.5     88.9
    0           144     54       85
    0           100     103      87
    0           201     97.5     88.9
    0           144     54       85
Run Code Online (Sandbox Code Playgroud)

对于d1中的所有行,列输出的值为1,对于d2中的所有行,列的输出为0.这是一个分组变量.我需要找到d1和d2的每一行之间的欧氏距离(不在d1或d2内).如果d1m行并且d2n行,则距离矩阵将具有m行和n列

python scipy euclidean-distance pandas

6
推荐指数
1
解决办法
6404
查看次数

VTK的ProjectionTransformMatrix和OpenGL的GL_PROJECTION有什么区别?

我在理解 VTK 所涉及的转换方面遇到了深刻的问题。OpenGL 有相当好的文档,我的印象是 VTK 与 OpenGL 非常相似(在很多方面都是如此)。但当谈到转型时,情况似乎完全不同。

这是一个关于所涉及的变换的很好的 OpenGL 文档: http://www.songho.ca/opengl/gl_transform.html

OpenGL中的透视投影矩阵为:

在此输入图像描述

我想看看在 VTK 中应用这个公式是否会给出 VTK 的投影矩阵(通过与 VTK 投影矩阵交叉检查)。

相关相机和渲染器参数:

camera->SetPosition(0,0,20);
camera->SetFocalPoint(0,0,0);
double crSet[2] = {10, 1000};
renderer->GetActiveCamera()->SetClippingRange(crSet);
double windowSize[2];
renderWindow->SetSize(1280,720);
renderWindowInteractor->GetSize(windowSize);
proj = renderer->GetActiveCamera()->GetProjectionTransformMatrix(windowSize[0]/windowSize[1], crSet[0], crSet[1]);
Run Code Online (Sandbox Code Playgroud)

我为此配置得到的投影变换矩阵是:

在此输入图像描述

投影矩阵的 (3,3) 和 (3,4) 值(假设行和列的索引为 1 到 4)应为 - (f+n)/(fn) 和 -2*f*n /(fn) 分别。在我的 VTK 相机设置中,nearz 为 10,farz 为 1000,因此我应该在矩阵的 (3,3) 和 (3,4) 位置分别得到 -1.020 和 -20.20。但它是-1010和-10000。

我已经更改了剪切范围值以查看更改,并且 (3,3) 位置始终接近 z+farz,这对我来说没有任何意义。另外,如果有人能解释为什么 (1,1) 和 (2,2) 位置上的值是 3.7320,那就太好了。当我更改渲染器窗口的窗口大小时,该值不会改变。让我很困惑。

我在 VTKCamera 类参考中看到 GetProjectionTransformMatrix() 返回从相机坐标映射到视口坐标的变换矩阵。 …

c++ opengl computer-vision augmented-reality vtk

5
推荐指数
1
解决办法
3423
查看次数

如何计算旋转矩阵之间的差异?

我有两个旋转矩阵。一个是我通过解决 PnP 问题得到的真实网络摄像头的旋转矩阵。我有一个世界坐标系,我知道世界空间中世界坐标中每个点的位置。

据我所知,旋转矩阵将世界坐标中的点转换为相机帧坐标(此处不考虑平移)。这意味着,R1 为您提供了世界坐标系相对于相机坐标系的方向。

我的第二个旋转矩阵是一个也在世界坐标中的传感器。即,此旋转矩阵为您提供世界坐标系相对于传感器坐标系的方向。

我想找到真实网络摄像头坐标系相对于传感器坐标系的方向。

让我们命名第一个旋转矩阵 Rw1 和第二个旋转矩阵 Rw2,下标 w1 表示相对于真实网络摄像头的世界,w2 表示相对于传感器的世界(1 和 2 可以被认为分别表示真实的网络摄像头和传感器)。

所以我的目标是找到R12。(而不是 R21)

R12 = R1w * Rw2 = (Rw1)' * Rw2
Run Code Online (Sandbox Code Playgroud)

我假设这个 R12 始终保持不变(在视频的后续帧中),因为传感器和网络摄像头的位置不会相互干扰,并且它们总是一起移动。我的假设有效吗?

如果它有效,那么我的最终目标是计算后续帧中真实网络摄像头的旋转矩阵。我可以计算后续帧中传感器的旋转矩阵,即后续帧的 Rw2。我必须找出 Rw1 并且我不能使用任何 PnP 算法。我想根据当前可用的信息计算它。

现在让我们考虑第二帧。

我知道 R12(我假设它是常数,我在第一帧中计算了它)和 Rw2(第二帧的传感器旋转矩阵)。我必须为第二帧找到 Rw1。

Rw1 = Rw2 * R21 = Rw2 * (R12)'
Run Code Online (Sandbox Code Playgroud)

我的方法正确吗?

PS:(R)'表示R的转置。

transformation computer-vision rotational-matrices

3
推荐指数
1
解决办法
8937
查看次数

如何在python中找到每个id的日期之间的差异?

我有一个 pandas 数据框,其格式如下:

student_id     subject_id   subject_date  
100             2000        2010-01-01
100             2001        2010-03-05
100             2002        2012-05-25
101             2000        2009-01-10
101             2001        2016-08-16
102             2000        2008-05-05
102             2003        2008-05-20
102             2004        2009-01-03
102             2005        2010-02-13
Run Code Online (Sandbox Code Playgroud)

数据帧已按student_id和排序subject_datesubject_date目标是获得每个 之间的差异student_id。对于每个student_id,保证至少有 2 个不同的subject_id。生成的数据框将如下所示:

student_id     subject_id   subject_date  diff_in_dates  
100             2000        2010-01-01    NA
100             2001        2010-03-05    30
100             2002        2012-05-25    60
101             2000        2009-01-10    NA
101             2001        2016-08-16    3000
102             2000        2008-05-05    NA
102             2003        2008-05-20 …
Run Code Online (Sandbox Code Playgroud)

python pandas

0
推荐指数
1
解决办法
543
查看次数