- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
库:OpenCV目标:Android (OpenCV4Android)
我尝试计算世界平面(例如监视器屏幕)的单应性以获得相机姿势,对其进行变换并将点重新投影回以用于跟踪任务。我正在使用 OpenCVs findHomography()/getPerspectiveTransform() 来获得单应性。使用 perspectiveTransform() 对点进行重新投影(如此处解释:http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html)效果很好。 “screenPoints”是显示器边缘的世界坐标(使用宽高比和 0 的 z 值),“imagePoints”是图像中屏幕边缘的 x/y 坐标。
Mat homography = org.opencv.imgproc.Imgproc.getPerspectiveTransform(screenPoints, imagePoints);
我有相机校准矩阵(我使用了 matlab 校准工具箱)并且我发现了一个提示(在评论@ https://dsp.stackexchange.com/questions/2736/step-by-step-camera-pose-estimation-for-visual-tracking-and-planar-markers 中)考虑单应性中的相机参数。
H' = K^-1 * H
(H' - 考虑相机校准的单应矩阵,H - 单应矩阵,K^-1 - 逆相机校准矩阵)。
Mat intrinsicInverse = new Mat(3, 3, CvType.CV_32FC1);
Core.invert(intrinsic, intrinsicInverse);
intrinsicInverse.convertTo(intrinsicInverse, CvType.CV_32FC1);
homography.convertTo(homography, CvType.CV_32FC1);
// compute H respect the intrinsics
Core.gemm(intrinsicInverse, homography, 1, new Mat(), 0, homography);
我的下一步是根据此处描述的单应性计算相机位姿 Computing camera pose with homography matrix based on 4 coplanar points .
因为我试图在 Android 上执行此操作,所以我不得不将 C++ 代码移植到 Java:
private Mat cameraPoseFromHomography(Mat h) {
Log.d("DEBUG", "cameraPoseFromHomography: homography " + matToString(h));
Mat pose = Mat.eye(3, 4, CvType.CV_32FC1); // 3x4 matrix, the camera pose
float norm1 = (float) Core.norm(h.col(0));
float norm2 = (float) Core.norm(h.col(1));
float tnorm = (norm1 + norm2) / 2.0f; // Normalization value
Mat normalizedTemp = new Mat();
Core.normalize(h.col(0), normalizedTemp);
normalizedTemp.convertTo(normalizedTemp, CvType.CV_32FC1);
normalizedTemp.copyTo(pose.col(0));
Core.normalize(h.col(1), normalizedTemp);
normalizedTemp.convertTo(normalizedTemp, CvType.CV_32FC1);
normalizedTemp.copyTo(pose.col(1));
Mat p3 = pose.col(0).cross(pose.col(1));
p3.copyTo(pose.col(2));
Mat temp = h.col(2);
double[] buffer = new double[3];
h.col(2).get(0, 0, buffer);
pose.put(0, 3, buffer[0] / tnorm);
pose.put(1, 3, buffer[1] / tnorm);
pose.put(2, 3, buffer[2] / tnorm);
return pose;
}
我无法检查代码是否在做正确的事情,但它正在运行。在这一点上,考虑到相机校准,我假设有完整的相机姿势。
如此处所述http://opencv.willowgarage.com/documentation/python/calib3d_camera_calibration_and_3d_reconstruction.html#rodrigues2 , 3D 点的重投影就是
p = K * CP * P
(p - 2D 位置,K - 校准矩阵,CP - 相机位姿,P - 3D 点)
Core.gemm(intrinsic, cameraPosition, 1, new Mat(), 0, vec4t);
Core.gemm(vec4t, point, 1, new Mat(), 0, result);
结果远离屏幕边缘的源图像位置。但我可以通过其相对差异来识别所有三个边缘 - 所以它可能只是一些错误的因素。
这是我第一次做这样的计算机视觉任务,我可能做错了一些基本错误。我有 Zisserman 的“多 View 几何”一书,我阅读了所有相关部分 - 但老实说 - 我没有读懂其中的大部分内容。
更新:
在我的相机矩阵中发现了一个错误 - 上面的实现工作正常!
最佳答案
让它以另一种方式工作。而不是使用 findHomography()/getPerspectiveTransform() 我发现了另一个名为 solvePnP() 的函数,它返回基于世界和图像点以及固有相机矩阵的相机姿势。
将该函数与 projectPoints() 方法结合使用 - 我能够将 3d 点重新投影回图像。
如果屏幕边缘位于图像的正确位置。
更新:
我在我的实现中发现了一个错误——我的相机内在矩阵是错误的。上面单应性实现的相机姿势对我有用!
关于安卓和 OpenCV : Homography to Camera Pose considering Camera Intrinsics and Backprojection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027277/
我正在使用react-pose使窗口内和窗口外的通知动画化。 “进入”过渡非常流畅,但是退出时 - 动画非常激进。 有人遇到过这个问题吗?我可以在任何地方上传视频屏幕截图来说明问题(除了 YouTub
我已经尝试了几天在我的游戏中创建 3D 骨骼动画。我正在将 Java 与 LWJGL 结合使用。 在尝试制作动画之前,我试图在程序中实现绑定(bind)姿势。我从 Blender 导出的 collad
我指的是 33 个 body 点和它们之间的连接线。我想更改它们的颜色,尤其是连接线的白色默认颜色。 这是我的代码,我已经为 mediapipe 创建了一个类模块,我可以在我的其他程序中导入和使用它
我指的是 33 个 body 点和它们之间的连接线。我想更改它们的颜色,尤其是连接线的白色默认颜色。 这是我的代码,我已经为 mediapipe 创建了一个类模块,我可以在我的其他程序中导入和使用它
来自文档 https://developers.google.com/ar/reference/java/arcore/reference/com/google/ar/core/Pose我看到 Pos
我正在尝试创建一个包含不同姿势的物体图像的数据集,其中每个图像都用相机姿势(或物体姿势)进行注释。 例如,如果我有一个世界坐标系,我将感兴趣的对象放在原点并将相机放在已知位置 (x,y,z) 并使其面
我关注了the documentation和 this blog post但我正在努力让任何事情发挥作用。 在本地,我收到以下错误:嘿,听着!找不到有效的 DOM 引用。如果您通过 posed(Com
我正在尝试为一个 ios 项目实现摆姿势。 场景: Defining class of controller at run time 我意识到poseAsClass或class_poseAs不适用于i
我正在尝试为一个 ios 项目实现摆姿势。 场景: Defining class of controller at run time 我意识到poseAsClass或class_poseAs不适用于i
我需要获取手机面向的方向和地平线之间的 Angular theta(见图)。 为此,我使用了 web-vr polyfill 库,它允许我访问 VRPose.orientation,即作为四元数的相机
我有一个服务器功能,可以从图像中检测和估计 aruco 标记的姿势。 使用函数 estimatePoseSingleMarkers 我找到了旋转和平移向量。我需要在带有 ARCore 的 Androi
所以我有一个小型 React 应用程序。尝试使用 React Pose 来制作页面转换动画。我遵循了与 one of the official demos with react-router-dom
我目前正在尝试从NERF模型重建网格,我注意到大多数NERF实现都提供了一个Python脚本,用于通过COLMAP从图像中提取相机姿势。我的理解是,这些脚本使用稀疏重建,或者至少使用COLMAP的特征
我在一个使用tflite Posenet在Flutter Framework的移动设备上运行的项目中。我们希望在测试中获得更高的精度得分,但是我们意识到Dart API文档https://pub.de
在 NDK 中使用此函数时: void ArPose_getMatrix( const ArSession *session, const ArPose *pose, floa
我正在尝试使用 OpenCV 来估计相机相对于另一个的一个姿势,使用 SIFT 特征跟踪、FLANN 匹配以及基本矩阵和基本矩阵的后续计算。分解基本矩阵后,我检查退化配置并获得“正确的”R 和 t。
我在使用 OpenCV 从 iPad 相机获取正确的相机姿势时遇到问题。 我正在使用定制的 2D 标记(基于 AruCo library)- 我想使用 OpenGL 在该标记上渲染 3D 立方体。 为
我想在像 Pinterest 这样的网站中实现图像/div 所使用或遵循的样式。或 Pose不管他们的个人决议是什么。我试过像这样将 div 并排放置 CSS: #mainCont
我有一个带有使用 React Pose 的动画的 React 应用程序 ( https://popmotion.io/pose/ )。 这工作正常,但是当我为组件编写集成测试(使用react-test
在谷歌上 Samples我可以获得有关从 ArAnchor 生成的 Pose 中获取 Matrix 的样本。或来自 ArPlane .但是当我试图从 ArCamera不起作用,我的结果是一个单位矩阵。
我是一名优秀的程序员,十分优秀!