このページの主題は、動画に限らず、美しく画像をリサイズしたい場合のお話・・・・て事になるかな?
個人的な検証がメインのお話ですが、画像の拡大縮小に使われるlanczos法・bicubic法・Bilinear法などを5~6年ぶりに検証しなおしてみたら、lanczos法にこだわってた自分がバカみたいでした・・・ってお話。
▲こんな感じに比較テストしてみました。
CG等の人工的な図形などの場合は「lanczosResizeやSpline16Resize」と「bicubic法・Bilinear法」でかなりの違いが出ますが、通常の実写・アニメ素材(特にHD→縮小SDリサイズ)の場合は、殆ど差が出ないです。
そして、よく使われるbicubic法・Bilinear法などは、ツールによっても出力結果がかなり違いますね。。。リサイズのシャープさを気にする場合はツール毎にチェックしないとダメですねぇ('Α`)
ここ1ヶ月くらい、CUDAエンコーダーで遊んでて、リサイズの「キレイだ」とか「Lanczosっぽい」とか、間違った情報・・・というか独りよがりな情報を垂れ流してハシャいでた事になります(凹)
やばい、今めっちゃ恥ずかしいですw
画像縮小テストしてみる
こんなテストやるのは4~5年ぶりかな?
Lanczos法・Bicubic法・Bilinear法でドレくらい画質に差が出るかテスト。
地デジTSファイル(1440x1080)
「車のCM下段に良くある注意書き」出来るだけ小さい文字が映っている所。
地デジ録画素材の中から、違いが現われやすそうな所(小さな文字と人工的なラインを含む箇所)を抜き取り。これを各種リサイズ方法を使って縮小してみる。
AviSynthとPhotoshopでリサイズ
▲クリックで200%に拡大します
- lanczosが一番シャープ。
- 同じリサイズ方法でも、AviSynthとPhotoShopで微妙に結果が違う
(後述するVirtualDubはもっと違う) - AviSynthは10年位使っているけど、AviSynth のBicubicとBilinearって縮小すると殆ど変わらないんですね。気が付かなかった。。。
VirtualDubでリサイズ確認
次にVirtualDubのリサイズを利用してみる。
AviSynthやPohoShopと随分違った結果になった。ここ数日間に感じていた違和感(このテストを行った原因)はこれだった。
Lanczos法・Bicubic法・Bilinear法、各アルゴリズムで250%縮小
▲クリックで200%に拡大
何故かBicubicを使ったのが一番クッキリ見える(シャープすぎてリンギング発生)
Lanczos法とBilinear法が大体同じに見える。
また、BilinearとBicubicが、AviSynthやPhotoshopのリサイズと随分違った結果になっています。Lanczos法はほぼ同じか、ややボケた印象。
うーむ。。。「リサイズ方法の名称」が一緒でも、ツールにより出力される結果は微妙に異なるのか。
VirtualDubで別のサイズに縮小してみる
※この項目はどうでもよい項目です。
「ちょっと気になる事」があって、中途半端な割合で縮小してみた。
中途半端な縮小
▲854x484(223.1404・・・%)と中途半端な縮小
うーむ。変わらない。「ちょっと気になる事」は気のせいだった。
Bicubic法を勉強しなおしてみる
これまた熟読するのは5~6年ぶり。
avisynth.info - Resize
Resize - Avisynth (英語サイト)
BicubicResize(幅, 高さ, "b", "c", "左", "上", "クロップ後の幅", "クロップ後の高さ")
bパラメータとcパラメータは、それぞれ「ぼかし(blur)」と「リンギング(ringing)」に利用されるとあります。
デフォルトは共に1/3で、b = 0、c = 0.75ならば、VirtualDubのprecise bicubicフィルタと同等になります。
注意: b + 2 * c = 1 以下になるように。c が 0.6以上になるとリンギングが目立ち始める。
BicubicResizeの「ぼかし」「リンギング」パラメータなんて、今まで気にした事が無かった。VirtualDubのBicubicはb = 0、c = 0.75と少しシャープに補正してたのか(^_^;
と言う事で、Bicubicのパラメータを色々いじって画像比較▲クリックで200%に拡大
- 縮小する場合、AvisynthのLanczosとBicubicの違いは殆ど無くなった。
- 理由はよく解らないけど、c = 0.75としても VirtualDub のBicubicデフォルトと同じ画像は得られなかった。b値をマイナスにしたり、c値を大きくとってみても、似たような結果は得られない。(色空間が異なるからなのかな?)
- まあ VirtualDub の Bicubic初期値はリンギングの発生が酷いし、再現できなくても良いかw
速度・ファイルサイズについて
短いTSファイル(1440x1080)を用意して、AvisynthのLanczos、Bicubicそれぞれで(640x360)にリサイズ。
MT | パラメータ | fps | ファイルサイズ | |
Lanczos | 66 | 8,636 kb | ||
Bicubic | なし | 75 | 7,328 kb | |
Bicubic | b = 0、c = 0.75 | 75 | 8,466 kb | |
Bicubic | b =-1、c = 1 | 75 | 11,020 kb | |
Lanczos | ○ | 105 | ||
Bicubic | ○ | b = 0、c = 0.6 | 105 | 8,298 kb |
PointResize(速度参考用) | 105 | |||
PointResize(速度参考用) | ○ | 125 |
PointResizeは「ソース読み込み速度が105~110fpsで頭打ちかな?」と思ったので確認のためにテスト。
ほぼ同じ画質でも、速度もファイルサイズでもBicubicの方が有利だ。
画像縮小の場合はb=0 / c=0.6~0.75 あたりのBicubicで充分。拡大する場合はともかく、縮小にLanczos使う必要って全く無かったのね。。。
あとがき
さすがに画像拡大や高詳細な縮小を行いたい場合はLanczos法やSpline法を使いますが、HD動画→SD動画に縮小変換する場合などは、人工的なデザインはともかく自然な画像ならばBicubic法・Bilinear法でも充分ですね。。。
地デジエンコするようになってからもLanczosにこだわってた自分がアホみたいだ('Α`)
DVDやアナログ放送素材(720x480~640x480を512x384~448x336にリサイズ)してた頃は細部のボケや潰れがどうしても気になってしまい、Lanczos法のリサイズ一択で利用してた訳ですが・・・
HD→SD変換じゃあLanczosは遅いし画質の差は小さいし、意味無いじゃん。って結果でした。。orz
今色々とCUDAツールを試しているけれど、仕切り直しする。
1~2週間後になると思うけど、過去に書いたページも順次訂正していくつもり。