lenscorrectionフィルターのおかげで、ffmpeg を使用して魚眼の歪みを補正できるようです。
ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-.25:k2=-.25" out.mp4
特にgoproの場合、k1
との値は何ですか? k2
それらを計算する方法はありますか?
lenscorrectionフィルターのおかげで、ffmpeg を使用して魚眼の歪みを補正できるようです。
ffmpeg -i in.mp4 -vf "lenscorrection=cx=0.5:cy=0.5:k1=-.25:k2=-.25" out.mp4
特にgoproの場合、k1
との値は何ですか? k2
それらを計算する方法はありますか?
すべての GoPro モデルとレンズをカバーする一般的な設定はないと思います。人々がカスタマイズされた/交換用レンズを使用できることも考慮してください.
私はあなたが働かなければならないものをフィーチャーしたサンプル画像を望んでいましたが、気にしないでください...
以下が何らかの形であなたに役立つことを願っています
このリンクを確認してくださいGoPro Hero 3 settings
(他のモデルに適用されます)。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 etc
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 ビデオのGoogle 画像を介して見つかりました)。
FFmpeg には、lenscorrection
ビデオの放射状の歪みを修正するために使用できるフィルターがあります。とはいえ、カメラのモデルや設定などのコンテキストがなければ、これ以上の情報を提供することは困難です。とにかく試行錯誤が必要だと思います。
PS: カメラのソフトウェアをWINEで実行してみましたか? 一部のバージョンでは、この種の修正フィルターが事前定義されており、簡単にアクセスできるようです。
ffmpeg を使用して歪みを補正するためのさまざまな方法についての投稿を書きました -lensfun
またはv360
フィルターは lenscorrection フィルターよりも優れたオプションだと思います。
とは言っても、理論的には、OpenCV- calibrationCamera関数を使用して k1 と k2 の値を計算できるはずです。フラグCALIB_FIX_PRINCIPAL_POINT
(lenscorrection が想定するように画像の中心に主点を固定するための座標とともに)、CALIB_FIX_K3
(lenscorrection は を使用しないためk3
)、およびCALIB_FIX_S1_S2_S3_S4
(lenscorrection は接線方向の歪みを考慮しないため) を使用することをお勧めします。これを行うために簡単に変更できるサンプル コードがあります。
しかし、試してみると、OpenCV で焦点距離を修正する方法が見つからなかったため行き詰まりましたが、レンズ補正では焦点距離が画像の対角線の半分にハードコードされています。