使用SIFT查找两张天花板照片之间的距离

时间:2013-07-27 10:50:21

标签: location feature-detection sift

我目前正在编写一个项目,允许机器人根据天花板的照片找到它的位置。摄像机安装在机器人上并直接面向天花板(意味着照片的中心始终被视为机器人的位置)。我们的想法是使用第一张照片建立x,y轴的0,0位置和方向,然后找到它与下一张照片之间的距离和旋转(将在稍微不同的位置拍摄)并建立新的0, 0位置和x,y轴的方向等。我使用以下算法找到照片上的特征(到目前为止仅在一个图像上):

#include <opencv/cv.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat img = imread("ceiling.jpg");

    if (img.empty()) 
    {
        cout << "Cannot load an image!" << endl;
        getchar();
        return -1;
    }

    SIFT sift(10);   //number of keypoints

    vector<KeyPoint> key_points;

    Mat descriptors, mascara;
    Mat output_img;

    sift(img,mascara,key_points,descriptors);
    drawKeypoints(img, key_points, output_img);
    namedWindow("Image");
    imshow("Image", output_img);
    imwrite("image.jpg", output_img);
    waitKey(0);

    return 0;
}

是否有任何功能可以帮助我做到这一点?

1 个答案:

答案 0 :(得分:0)

如果图像距离不远,光流可能是更好的选择。有关如何使用它的详细信息,请查找有关cv :: calcOpticalFlowPyrLK的文档。