Opencv中的Homography矩阵?

时间:2016-06-01 09:24:56

标签: opencv image-processing homography

LATCH_match.cpp opencv_3.1.0中,单应矩阵被定义并用作:

Mat homography;
FileStorage fs("../data/H1to3p.xml", FileStorage::READ);
...
fs.getFirstTopLevelNode() >> homography;
...
Mat col = Mat::ones(3, 1, CV_64F);
col.at<double>(0) = matched1[i].pt.x;
col.at<double>(1) = matched1[i].pt.y;
col = homography * col;
...

为什么H1to3p.xml是:

<opencv_storage><H13 type_id="opencv-matrix"><rows>3</rows><cols>3</cols><dt>d</dt><data>
    7.6285898e-01  -2.9922929e-01   2.2567123e+02
    3.3443473e-01   1.0143901e+00  -7.6999973e+01
    3.4663091e-04  -1.4364524e-05   1.0000000e+00 </data></H13></opencv_storage>

选择这些数字的标准是什么?它们可用于过滤关键点的任何其他单应性测试(如LATCH_match.cpp)?

1 个答案:

答案 0 :(得分:4)

我认为您的“LATCH_match.cpp opencv_3.1.0https://github.com/Itseez/opencv/blob/3.1.0/samples/cpp/tutorial_code/xfeatures2D/LATCH_match.cpp

在该文件中,您find

// If you find this code useful, please add a reference to the following paper in your work:
// Gil Levi and Tal Hassner, "LATCH: Learned Arrangements of Three Patch Codes", arXiv preprint arXiv:1501.03719, 15 Jan. 2015

所以,看http://arxiv.org/pdf/1501.03719v1.pdf你会发现

  

对于每个集合,我们将第一个图像与剩余的每个图像进行比较   五,检查通信。使用的是衡量绩效   代码来自[16,17] 1 ,它计算召回和1精度   在图像之间使用已知的基本事实单应性

我认为我在此处显示的图片../data/graf1.pnghttps://github.com/Itseez/opencv/blob/3.1.0/samples/data/graf1.png

enter image description here

根据评论Homography matrix in Opencv? Catree,原始数据集位于http://www.robots.ox.ac.uk/~vgg/research/affine/det_eval_files/graf.tar.gz,据说

  

包括图像对之间的同形数据。

所以我认为存储在文件../data/H1to3p.xml中的单应性是图像1和图像3之间的单应性。