对于我的增强现实项目,我使用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校准方法来确定我的内窥镜的焦距.
http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html
而且我的焦距是以像素为单位.但我希望这是毫米,我不知道传感器的尺寸.如何以毫米(mm)计算焦距?
我正在尝试使用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?
我正在从源安装 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 5.2.2但错误仍然出现。
我熟悉RStudio服务器,它是远程linux环境下R统计开发的绝佳工具。
只是想知道是否有用于 Python 开发的类似服务器端 IDE(基于 Web 浏览器)?
我有两个熊猫dataframes d1和d2看起来像这些:
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内).如果d1有m行并且d2有n行,则距离矩阵将具有m行和n列
我在理解 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() 返回从相机坐标映射到视口坐标的变换矩阵。 …
我有两个旋转矩阵。一个是我通过解决 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的转置。
我有一个 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_date。subject_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)