小编Qui*_*uis的帖子

Android和OpenCV:考虑相机内在和反投影的同形相机姿势

Libs:OpenCV目标:Android(OpenCV4Android)

我尝试计算世界平面的Homography(例如监视器屏幕)来获取相机姿势,对其进行转换并重新投影点以进行跟踪任务.我正在使用OpenCVs findHomography()/ getPerspectiveTransform()来获得单应性.使用perspectiveTransform()进行重新投影(如此处所述:http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html),效果非常好."screenPoints"是监视器边缘的世界坐标(使用纵横比和z值为0),"imagePoints"是图像中屏幕边缘的x/y坐标.

Mat homography = org.opencv.imgproc.Imgproc.getPerspectiveTransform(screenPoints, imagePoints);
Run Code Online (Sandbox Code Playgroud)

我有相机校准矩阵(我已经使用了matlab校准工具箱),我找到了一个提示(在评论中@ https://dsp.stackexchange.com/questions/2736/step-by-step-camera-pose-estimation - 用于视觉跟踪和平面标记)用于考虑单应性中的相机参数.

H'= K ^ -1*H.

(H' - Homography-Matrix考虑相机校准,H - Homography-Matrix,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);
Run Code Online (Sandbox Code Playgroud)

我的下一步是根据单应性计算相机姿态,如此处所述.基于4个共面点计算具有单应矩阵的相机姿势.

因为即时尝试在Android上执行此操作,我必须将C++代码移植到Java:

private Mat cameraPoseFromHomography(Mat h) {
    Log.d("DEBUG", "cameraPoseFromHomography: homography " + matToString(h));

    Mat pose = Mat.eye(3, 4, CvType.CV_32FC1); …
Run Code Online (Sandbox Code Playgroud)

android opencv tracking homography

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

标签 统计

android ×1

homography ×1

opencv ×1

tracking ×1