opencv - 需要消除相机镜头失真
问题描述
我们有这台相机,它是ELP 180度超广角畸变校正。我们需要标准化从这个相机捕获的图像。但它既不是鱼眼也不是标准相机。
据我了解,这是桶形失真。但是,如果您注意到直线是水平弯曲的,而垂直线不是弯曲的。相机的制造商说它是“失真校正”。所以让我们假设他们想说垂直失真得到纠正,但水平失真没有得到纠正。
我们尝试了以下两种消除失真的方法,但并不完美。请帮助我们消除它的失真。非常感谢。
- 我们尝试了 OpenCV Camera Calibration 来获得相机内在参数和失真系数。
内在参数
[673.9683892, 0., 343.68638231]
[0., 676.08466459, 245.31865398]
[0., 0., 1.]
失真
[5.44787247e-02, 1.23043244e-01, -4.52559581e-04, 5.47011732e-03, -6.83110234e-01]
- Matlab 计算机视觉工具获取内在参数和失真系数
内在参数
[291.11314081, 0.0, 289.772432415],
[0.0, 274.219315391, 223.73258747],
[0., 0., 1.0]
失真
[-3.0108207175179114e-01, 1.0803633903579697e-01, 4.3487318865386296e-03, -5.9566348399883859e-04, -1.8867490263403317e-02]
结果
Original image:
After Removing Distortion:
解决方案
对我来说,看起来可能有一个棱镜(或一个数字棱镜等效的重新映射滤波器)水平“挤压”图像,这具有在视觉上突出水平方向的桶的效果。
如果我是对的,我认为标准的 OpenCv Heikkila-Silven 模型不适合它。您需要在 (x, y) 中拟合 2 个单独的高阶多项式,一个用于失真的水平分量,一个用于垂直分量。
查找“变形镜头失真”
推荐阅读
- python - 一旦将字段转换为Django中的属性,如何防止字段从模型中“删除”?
- rabbitmq - RabbitMQ 联合到同一服务器上的虚拟主机
- curl - 如何使用终端的 curl 和 jq 将令牌保存在环境变量中
- python - 正则表达式提取复杂文本中的电话号码
- javascript - 我们可以在铯地图上上传 tiff 图像吗?
- ruby-on-rails - 如何在 Rails API 中使用 FK 检索模型实例?
- go - 使用 Go 读取已使用 UCS-2 little Endian 编码的文本文件
- sql - 是否可以在不连接数据库的情况下在 sql 中打开 .bak 文件?
- c++ - 为 C++ 构建 Boost 库时出错
- flutter - Flutter - 如何从认证错误链接中获取 api 响应