我的问题是: 我的光学系统是由一个相机加上一个圆形有机玻璃“透镜”组成的,它可以根据压力改变曲率(径向弯曲)。在
这种曲率会导致相机捕捉到的图像发生变形。 为了纠正这种变形,需要校准图像。 可以用网格(棋盘、点、线)进行标定,压力范围必须离散化一定的步骤。 对于每个压力步骤,必须拍摄网格图像。 然后每个图像必须与参考图像(P=0)进行比较,并且必须计算和存储转换矩阵。 最后,在实验过程中拍摄的每一张特定压力的图像都必须通过变换矩阵进行校正。在
变形是非线性的(不仅是旋转和平移的组合),但很可能是筒体变形。(同样不是由摄像机诱导) 看起来像这样: http://en.wikipedia.org/wiki/Distortion_%28optics%29#mediaviewer/File:Barrel_distortion.svg
我在ImageJ中找到了一个名为BunwarpJ的插件,http://biocomp.cnb.csic.es/~iarganda/bUnwarpJ/
我基本上想知道在Opencv中是否有同样的方法来产生同样的结果。 (CalibrateCamera无法做到这一点)
矩阵只能捕获线性变换(或齐次空间中的线性变换),而不能捕获一般的失真。在
根据我的经验,任何使用单一全局转换公式的尝试都不会非常精确(仅获得99.9%的准确率并非易事)。如果你想要高精度的话,即使只是用这种方法校正相机镜头的失真也是很困难的。在
在过去,我使用稀疏全局RBF插值获得了足够好的结果,但后来我转向了插值2d样条曲线方法;如果您可以选择您的校准点在规则网格上,这是我建议的解决方案。在
最后,映射可以是规则网格上的2值三维插值样条线(XY表示图像,Z表示压力;值UV是像素坐标)。在
一旦压力已知,矫直图像就是纹理映射。在
OpenCv有一个可以拍摄当前图像的^{} function ,一个相机系数矩阵,畸变系数。并产生一个新的图像校正发送的相机系数。还有一组新的摄像机系数。(如果需要对新图像执行其他转换)。在
我以前没用过,所以我不能确切地说什么是摄像机或畸变系数,但正如手册所述:
所以检查这两个函数。出去是个好办法。在
我相信你误解了手册,也许是因为你似乎认为CalibrateCamera能帮你做到这一点。相反,CalibrateCamera实际上返回摄影机和扭曲系数。你需要
undistort
你的图像。在每个透镜都有自己的常数系数。在你的例子中,这意味着你必须在一定的压力范围内
calibrateCamera
(我假设你是通过实验控制的?){cd1>然后调用。你可以从实验中得到不同的参数。在相关问题 更多 >
编程相关推荐