使用ffmpeg的 lenscorrection 过滤器似乎可以补偿鱼眼镜头的畸变:
ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-.25:k2=-.25" out.mp4
k1
和k2
的取值,特别是对于GoPro相机,有没有一种计算的方式呢?
使用ffmpeg的 lenscorrection 过滤器似乎可以补偿鱼眼镜头的畸变:
ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-.25:k2=-.25" out.mp4
k1
和k2
的取值,特别是对于GoPro相机,有没有一种计算的方式呢?
我认为没有一个通用的设置适用于所有GoPro型号和镜头,考虑到人们可能会使用一些定制/替换镜头。
我希望有一个包含您要处理的内容的示例图像,但无妨...
希望以下内容对你有所帮助。
查看此链接获取GoPro Hero 3设置
(适用于其他型号)。为了大致了解最佳k1
和k2
值,您应该找到与图像分辨率最接近的画面比例然后...
将H. FOV deg
除以V. FOV deg
并将结果乘以Diag. FOV deg
。
例如:当图片大小为1920 x 1080时:它是16:9的宽屏。
GoPro 3设置:16 x 9宽屏 ::
H fov
= 69.5 ||V fov
= 118.2 ||Diag
= 133.6
因此,118.2 / 69.5 * 133.6 = 227.216 等等
。
对于k1
,结果现在为整数227
(去掉小数点)。
对于k2
,值0.022
似乎是通用的(所有测试图像),因此您可以尝试k2=-.022
。
对于cx
和cy
,保持它们为:cx=0.5:cy=0.5:
。
示例:
ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-0.227:k2=-0.022" out.mp4
结果:(通过GoPro Hero-2视频中找到的原始图像)。
k2
,它并不是通用的,而是适用于那种鱼眼镜头。我的测试图片都有一个“圆内图像”的外观(带有黑边)。它可能不适用于全景镜头(畸变图像但填满屏幕而无黑边)。我现在正在执行任务,稍后会更新额外的信息/示例。 - VC.One我写了一篇文章,介绍了使用ffmpeg进行校正畸变的各种方法 - 我认为lensfun
或v360
滤镜比lenscorrection滤镜更好。
CALIB_FIX_PRINCIPAL_POINT
(以及坐标来固定主点在图像中心,因为lenscorrection假设如此),CALIB_FIX_K3
(因为lenscorrection不使用k3
),以及CALIB_FIX_S1_S2_S3_S4
(因为lenscorrection不考虑切向畸变)。有可用的示例代码,您可以简单修改以执行此操作。FFmpeg有一个lenscorrection
过滤器,可用于纠正视频中的径向畸变。话虽如此,如果没有更多上下文信息 - 比如您相机的型号和设置 - 那么提供更多信息将会很困难。我怀疑这需要一些试错。
PS:您尝试在WINE下运行相机软件了吗?某些版本的软件似乎预定义并且易于访问此类校正滤镜。
k1
和k2
的具体值就太好了,这是关于GoPro的。 - abernierffmpeg -i input.mp4 -vf "lenscorrection=0.5:0.5:-0.335:0.097" output.mp4