有没有一种使用ffmpeg去除GoPro鱼眼的方法?

19

使用ffmpeg的 lenscorrection 过滤器似乎可以补偿鱼眼镜头的畸变:

ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-.25:k2=-.25" out.mp4

k1k2的取值,特别是对于GoPro相机,有没有一种计算的方式呢?


视频中出现了重复的内容:http://video.stackexchange.com/questions/12667/linux-command-line-option-to-do-video-lens-correction - payne
@abernier 我认为提供一个示例输入图像(视频截取)会加快获取一些答案的速度。 - VC.One
6个回答

20

我认为没有一个通用的设置适用于所有GoPro型号和镜头,考虑到人们可能会使用一些定制/替换镜头。

我希望有一个包含您要处理的内容的示例图像,但无妨...
希望以下内容对你有所帮助。

查看此链接获取GoPro Hero 3设置(适用于其他型号)。为了大致了解最佳k1k2值,您应该找到与图像分辨率最接近的画面比例然后...

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

对于cxcy,保持它们为: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值吗?为什么它是“普遍的”?再次感谢。 - abernier
1
@abernier 谢谢。关于 k2,它并不是通用的,而是适用于那种鱼眼镜头。我的测试图片都有一个“圆内图像”的外观(带有黑边)。它可能不适用于全景镜头(畸变图像但填满屏幕而无黑边)。我现在正在执行任务,稍后会更新额外的信息/示例。 - VC.One

6

针对GoPro Hero 5和6:

ffmpeg -i input.mp4 \
    -vf 'lenscorrection=k2=0.006:k1=-0.18' \
    output.mp4

source


4

我写了一篇文章,介绍了使用ffmpeg进行校正畸变的各种方法 - 我认为lensfunv360滤镜比lenscorrection滤镜更好。

在理论上,您应该能够使用OpenCV的calibrateCamera函数计算k1和k2的值。您需要使用标志CALIB_FIX_PRINCIPAL_POINT(以及坐标来固定主点在图像中心,因为lenscorrection假设如此),CALIB_FIX_K3(因为lenscorrection不使用k3),以及CALIB_FIX_S1_S2_S3_S4(因为lenscorrection不考虑切向畸变)。有可用的示例代码,您可以简单修改以执行此操作。
但是当我尝试时,我卡住了,因为我找不到在OpenCV中固定焦距的方法,但在lenscorrection中,焦距被硬编码为图像对角线的一半。

4

FFmpeg有一个lenscorrection过滤器,可用于纠正视频中的径向畸变。话虽如此,如果没有更多上下文信息 - 比如您相机的型号和设置 - 那么提供更多信息将会很困难。我怀疑这需要一些试错。

PS:您尝试在WINE下运行相机软件了吗?某些版本的软件似乎预定义并且易于访问此类校正滤镜。


3
谢谢回复,但我正在寻找针对镜头校正的ffmpeg参数(或其他开源软件,不使用第三方软件)。 - user4223883
谢谢回答,但是如果能提供k1k2的具体值就太好了,这是关于GoPro的。 - abernier

3
对于GoPro 3+,16:9的宽屏格式使用广角视野。
ffmpeg -i input.mp4 -vf "lenscorrection=0.5:0.5:-0.335:0.097" output.mp4

3
你可以使用ffmpeg的lenscorrection修复鱼眼,但边缘的效果会很差。

Image of how it looks on edges


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接