Re: [问题] 关于摄影机内部参数的问题

楼主: damody (天亮damody)   2014-05-18 05:28:51
※ 引述《svsv (SV)》之铭言:
: 不知道要在哪个板PO 不知道在这个板有没有违规
: 有的话请告知 谢谢
: 小弟在参考文县中 常常看到以下两种摄影机内部参数矩阵
: http://ppt.cc/zD98
: http://ppt.cc/H~1P
: 想问各位高手的是
: 理论上 f(焦距)跟 beta 是不太可能一样的
: 为什么会有这两种方式的校正 还是说 这两个矩阵之间有什么关系吗
心血来潮查了一下
我先说我不是这领域的专家
http://en.wikipedia.org/wiki/Camera_resectioning
我发现大家的calibration matrix都有点不一样
有些解3x3 有些 4x4
但都是 upper matrix
从wiki可以看到
alphaX = f dot mx
alphay = f dot my
garma = skew = s
所以你查到的这两个矩阵意思上是一样的
A是要解Ax=b时的状态了
最后为了跟c/c++扯上关系
一个 eigen 解矩阵的范例
其实 opencv 有 function 一行解决
// 填A矩阵
// 解 Ax=b
void test_EigenLU()
{
const int LEN = I_DONT_CARE;
const int DIM = 3;
MatrixXd A(LEN, DIM), At, Ata;
VectorXd b1(LEN), x1(DIM), Atb1;
int c = 0;
for (int y = 0; y < LEN; ++y)
{
for (int x = 0; x < img.rows; ++x)
{
b1.coeffRef(c) = YOUR_VALUE;
A.coeffRef(0, 0) = alphaX;
A.coeffRef(0, 1) = s;
A.coeffRef(0, 2) = u0;
A.coeffRef(1, 1) = alphaY;
A.coeffRef(1, 2) = v0;
A.coeffRef(2, 2) = 1;
c++;
}
}
At = A.transpose();
Ata = At * A;
Atb1 = At * b1;
Eigen::PartialPivLU<MatrixXd> Atalu = Ata.lu();
x1 = Atalu.solve(Atb1);
}

Links booklink

Contact Us: admin [ a t ] ucptt.com