资源简介
机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数即为相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定。本代码实现了基于张正友标定法和基于消失点标定法两种相机标定方法并进行验证。
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个文件信息
相关资源
- 相机标定完整工程vs
- 张正友相机标定(OpenCV实现)223402
- 相机标定完整工程
- OpenCV张正友相机标定程序,附实验数
- 张正友相机标定Opencv实现完整程序+棋
- 相机标定讲解ppt
- opencv标定单目相机
- 工业机器人手眼系统标定
- 相机标定图像
- 张正友相机标定的论文中文版
- OPENCV实现相机标定程序
- 计算机视觉中相机标定算法研究
- 在Vs2005下的三线法相机标定
- 基于opencv的双目相机标定代码
- opencv相机标定程序
- 张正友相机标定Opencv实现
- Kinect相机标定
- 计算机双目立体视觉_)高宏伟
- opencv 张正友相机标定源代码及标定照
- 相机标定单目、双目.zip
- 海康威视标定
- opencv2.4.9 相机定标及图像矫正
- 基于opencv的鱼眼相机标定和透视投影
- 相机标定和鸟瞰图生成_vs2017.rar
- 相机标定代码相机标定代码
- 相机标定时使用的标定板
- halcon相机标定
- 圆形标定板排序.rar
- 相机标定棋盘图
- 张正友标定法原版
评论
共有 条评论