ffmpeg 3.4でリリースしたRoberts cross operatorを用いたエッジ検出フィルタrobertsの使い方。同様のフィルタにsobel, prewittがあり、他にもエッジ検出できるフィルタはいくつかある。

基本コマンド

ffmpeg -i input -vf roberts=planes=15:scale=1:delta=0 output
ffmpeg -i input -vf roberts=15:1:0 output
ffplay -i input -vf roberts=15:1:0

公式ドキュメント:FFmpeg Filters Documentation : roberts

オプション

乗算、加算の値は増やせば線が増え、減らせば線が減る。

  • planes[int]
    フィルタを当てるチャンネル指定
    詳しくは ffmpeg について | チャンネルの順番と注意点を参照
    既定値:15(すべて)
  • scale[float]
    フィルタを当てる乗算値の指定
    範囲:0 から 65535 まで
    既定値:1
  • delta[float]
    フィルタを当てる加算値の指定
    範囲:-65535 から 65535 まで
    既定値:0

サンプル画像

アニメ画像

アニメ「艦隊これくしょん~艦これ~」の11話の大和出撃のシーン

アニメ画像 roberts=1(1st plane だけフィルタを当てている)

実写画像

実物大の戦艦大和

実写画像 roberts=1(1st plane だけフィルタを当てている)

roberts_opencl

opencl を使ってroberts_openclフィルタを使う。

opencl が使えれば以下のコマンドを実行すると対応 CPU、または GPU が表示される。
ffmpeg -hide_banner -v verbose -init_hw_device opencl

出力コマンド例。

ポイントは opencl を使うデバイスを上の例では 0.0 から 1.1 から指定する。能力によって処理速度が大きく異なる。オプション指定は通常と同じ。

コマンド例。
ffmpeg -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input -vf hwupload,roberts_opencl output

通常のフィルタに切り替えるにはhwdownload,format=yuv420pフィルタを挟む。
ffmpeg -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input -vf hwupload,roberts_opencl,hwdownload,format=yuv420p,lutyuv=val:128:128 output

公式ドキュメント:FFmpeg Filters Documentation : roberts_opencl

5 thoughts on “エッジ検出フィルタ roberts

  • 匿名

    いつもここでffmpegについて勉強させてもらっています。
    「ffmpeg について | チャンネルの順番と注意点 」の表の読み方がわからないので、解説をお願いします。
    YUVでいうと、1st planeがY、2nd planeがU、3rd planeがV、4th planeがアルファー
    1st planeが1、2nd planeが2、3rd planeが3で表記
    とは想像したのですが、1st planeに1と4が割り当てられたり、オプション番号との対応も???です。
    2nd planeのみや、2nd planeと3rd planeの時は?と。

    • admin

      >1st planeが1、2nd planeが2、3rd planeが3で表記とは想像したのですが、
      誤解を生む表記だったので plane の表記を削除し書き直しました。指摘ありがとうございます

      >2nd planeのみ
      2 を指定します

      >2nd planeと3rd planeの時
      6 を指定します

      • 匿名

        コメントが反映されていなかったので再コメントです。
        解説ありがとうございます。
        planeのを説明しているところがなかったので、とてもありがたがったです。

        提案なのですが、二進法十進法を知らない人用の表に
        https://pastebin.com/NLmZnNHK
        はいかがでしょうか?

        • admin

          グラフありがとうございます。plane 順番ですが、必ずしも YUV の順番だけではなく、YVU の順番もあるのでそれも記載しておきます。

  • 匿名

    解説ありがとうございます。ようやくplaneが理解できました。
    planeがチャンネルらしきことは解り始めていたのですが、???な状態から抜け出せたようです。
    planeの解説は海外サイトでも見かけないのでとてもありがたいです。

    ありがとうございます。

    提案なのですが、二進数の十進表記を知らない人にもわかるようんい表を下のようにしてみるのはいかがでしょうか?

    option\Plane |1st(Y,R,G) 2nd(U,G,B) 3rd(V,B,R) 4th(a)
    |0=0x2^0(off) 0=0x2^1(off) 0=0x2^2(off) 0=0x2^3(off)
    |1=1×2^0(on) 2=1×2^1(on) 4=1×2^2(on) 8=1×2^3(on)
    ——————————————————————————
    0 |0 0 0 0
    1 |1 0 0 0
    2 |0 2 0 0
    3 |0 0 3 0
    4 |1 0 3 0
    5 |0 2 4 0

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)