资源简介

机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数即为相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定。本代码实现了基于张正友标定法和基于消失点标定法两种相机标定方法并进行验证。 ps.压缩包中列出了张正友和两篇消失点法的论文 代码实现基本上是按照论文的方法复现

资源截图

代码片段和文件信息

#include “linearMethod.h“

VectorXf setvij(const MatrixXf& homogrph int i int j)
{
VectorXf vij(6);
i = i-1;
j = j-1;
vij(0) = homogrph(0i)*homogrph(0j);
vij(1) = homogrph(0i)*homogrph(1j)+homogrph(1i)*homogrph(0j);
vij(2) = homogrph(1i)*homogrph(1j);
vij(3) = homogrph(0i)*homogrph(2j)+homogrph(2i)*homogrph(0j);
vij(4) = homogrph(1i)*homogrph(2j)+homogrph(2i)*homogrph(1j);
vij(5) = homogrph(2i)*homogrph(2j);
return vij;
}

MatrixXf solve_homogrph(const Mat& I const int& row_corners const int& col_corners const float& width)
{
// find the corners in image space
Mat corners;
bool isfind = findChessboardCorners(I Size(row_corners col_corners) corners);
if(!isfind)
{
cout<<“Could not find chessboard corners!“< return MatrixXf::Zero(33);
}
// generate the 3D object coordinates
vector points3D;
for (int i = 0; i < col_corners; i++) {
for (int j = 0; j < row_corners; j++) {
points3D.push_back(Vector3f(j * width i * width 0));
}
}
vector points2D;
for (int i = 0; i < corners.rows; i++) {
Vec2f pos = corners.at(i 0);
points2D.push_back(Vector2f(pos[0] pos[1]));
}

// solve the matrix M
MatrixXf A = MatrixXf::Zero(points3D.size() * 2 9);
for (int i = 0; i < points3D.size(); i++) {
A(i * 2 + 0 0) = points3D[i][0];
A(i * 2 + 0 1) = points3D[i][1];
A(i * 2 + 0 2) = 1;
A(i * 2 + 0 6) = -points2D[i][0] * points3D[i][0];
A(i * 2 + 0 7) = -points2D[i][0] * points3D[i][1];
A(i * 2 + 0 8) = -points2D[i][0];

A(i * 2 + 1 3) = points3D[i][0];
A(i * 2 + 1 4) = points3D[i][1];
A(i * 2 + 1 5) = 1;
A(i * 2 + 1 6) = -points2D[i][1] * points3D[i][0];
A(i * 2 + 1 7) = -points2D[i][1] * points3D[i][1];
A(i * 2 + 1 8) = -points2D[i][1];
}
JacobiSVD h_svd(A ComputeThinU | ComputeThinV);
// cout<<“A“<
// cout << “Matrix A is:“ << endl << A.matrix() << endl;
// MatrixXf temp(h_svd.singularValues().asDiagonal());
// cout << “UDV‘ is:“ << endl << h_svd.matrixU()*temp*h_svd.matrixV().transpose() << endl;


MatrixXf::Index minIndex;
h_svd.singularValues().minCoeff(&minIndex); //最小特征值所在的行号
VectorXf h = h_svd.matrixV().col(minIndex);

// cout<<“Index is “< // cout << “svd singular value is:“ << endl << h_svd.singularValues() << endl;
// cout << “svd right singular matrix is:“ << endl << h_svd.matrixV() << endl;
// cout << “svd right singular matrix index is:“ << endl << h_svd.matrixV().col(minIndex) << endl;

const int h_rows = 3;
const int h_cols = 3;
MatrixXf homogrph(h_rowsh_cols);
for(int row=0; row for(int col=0; col homogrph(row col) = h(row*h_cols+col);
// cout<<“Matrix homogrph “<
return homogrph;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        776  2018-05-17 01:29  Calibration\CMakeLists.txt

     文件       3501  2017-06-15 15:10  Calibration\cmake_modules\FindEigen3.cmake

     文件     163774  2018-05-16 13:44  Calibration\img\1.jpg

     文件     199547  2018-05-16 13:44  Calibration\img\10.jpg

     文件     198330  2018-05-16 13:44  Calibration\img\11.jpg

     文件     173529  2018-05-16 13:44  Calibration\img\12.jpg

     文件     178730  2018-05-16 13:44  Calibration\img\2.jpg

     文件     181272  2018-05-16 13:44  Calibration\img\3.jpg

     文件     180693  2018-05-16 13:44  Calibration\img\4.jpg

     文件     180164  2018-05-16 13:44  Calibration\img\5.jpg

     文件     184916  2018-05-16 13:44  Calibration\img\6.jpg

     文件     182973  2018-05-16 13:44  Calibration\img\7.jpg

     文件     195530  2018-05-16 13:44  Calibration\img\8.jpg

     文件     168912  2018-05-16 13:44  Calibration\img\9.jpg

     文件     195530  2018-05-16 13:44  Calibration\img\vanishingPoint_1.jpg

     文件     168912  2018-05-16 13:44  Calibration\img\vanishingPoint_2.jpg

     文件     199547  2018-05-16 13:44  Calibration\img\vanishingPoint_3.jpg

     文件     198330  2018-05-16 13:44  Calibration\img\vanishingPoint_4.jpg

     文件       2807  2018-05-17 16:16  Calibration\linearMethod.cpp

     文件        343  2018-05-17 01:18  Calibration\linearMethod.h

     文件       7767  2018-05-20 18:57  Calibration\main_calibration.cpp

     文件        201  2018-05-17 01:37  Calibration\README

     文件     832486  2018-05-16 19:27  Calibration\Reference\基于两灭点法的摄像机标定方法研究_胡桂廷.pdf

     文件    1141186  2018-05-17 15:55  Calibration\Reference\基于正交消失点对的摄像机标定方法_陈爱华.pdf

     文件     406818  2018-05-14 15:19  Calibration\Reference\张正友标定相机.pdf

     文件      10532  2018-05-18 16:18  Calibration\vanishingPointMethod.cpp

     文件       1006  2018-05-18 15:40  Calibration\vanishingPointMethod.h

     目录          0  2019-03-05 15:46  Calibration\cmake_modules

     目录          0  2019-03-05 15:46  Calibration\img

     目录          0  2019-03-05 15:46  Calibration\Reference

............此处省略4个文件信息

评论

共有 条评论