在Stake Overflow里面有人讨论过这个问题,当我们用Opencv和halcon一起编程序的时候,需要考虑两者参数的不同,现在碰到的问题就是,我在已经知道内参矩阵的前提之下,想要求出外参矩阵,而内参是用halcon求出来的,vs中想用opencv写标定外参的程序,两者的参数表达方式不一样。
c++ - HALCON to OpenCV Distortion Coefficients Convertion - Stack Overflow
在HALCON中有两种标定方式
首先是面扫描(多项式)
还有就是面扫描(除法)
除法式校正:
U = u / (1 + Kappa*(u*u + v*v))
V = v/(1+ Kappa*(u*u + v*v))
多项式矫正:
U = u + u*(K1*r*r + K2*r*r*r*r + K3*r*r*r*r*r*r)+ 2*P1*u*v + P2*(r*r + 2*u*u)
V = v + v*(K1*r*r + K2*r*r*r*r + K3*r*r*r*r*r*r)+ P1*(r*r + 2*v*v)+ 2*P2*u*v
下面是Opencv标定出来的结果:
再看opecnv的标定文档里面所描述的
看来opencv标定畸变系数对应的是HALCON的多项式
但是它的畸变系数顺序是:
还要注意的有,一些畸变消去算法用的是除法
这里面需要注意的挺多的