スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

Lanczos 3, Lanczos 4とはなんぞや


※タグ:『なんぞや』は未解明項目です。

【Lanczosとは】
 スケーリング・アルゴリズムのひとつ。ffmpegXの選択肢にもある。妖精現実さん(Lanczos3)、Doom9 コデックコンテスト2005(Lanczos4)、その他AviSynthスクリプトでは良く見かける。拡大してもジャギが出にくいらしい。縮小の場合、 ほとんど違いが解らないところがナニだが、まぁ気分で^^;
 原理としてはinterpolation、補間フィルタ(補完ではない)の一種で、いくつかの点が与えられ たとき、それらの点を通る滑らかな曲線を求めること。画像の拡大・縮小処理の際にも用いられる。との事です(*1)3とか4とかはその「いくつかの点(タップと言うようで す)」 の数。
(*1)リンクがうまく行かない場合は、右クリックでURLをコピペして使って下さい。
【MEncoderでの指定方法】
-zoom -sws 9 scale=640:480:::4
-sws 9でLanczos。-vf scale=w:h:::Lanczos Filter Length。Filter Lengthの範囲は、1-10。
なお、-zoomはソフトウェアスケーリングの許可。
manの記載はこう。
scale[=w:h[:interlaced[:chr_drop[:param[:param2[:presize[:noup]]]]]]]
paramとparam2は-swsでナニを選ぶかによって指定値の意味が違って来る。Lanczosの場合はここは Filter Lengthだとあります。
paramかparam2のどっちに入 れても良いようです。
ただ、どうも再生時でないと効かないっぽい。
【実験】

 scale=320:240::::4 -sws 9
、再生の場合(param2になるハズ)
MPEG-PS file format detected.
VIDEO: MPEG2 720x480 (aspect 2) 29.970 fps 8001.2 kbps (1000.1 kbyte/s)
Opening video filter: [scale w=320 h=240 param2=4]
==========================================================================
中略

SwScaler: Lanczos scaler, from 0x32315659 (21VY) to 0x32595559 (2YUY) using AltiVec
SwScaler: using C scaler for horizontal scaling
SwScaler: using n-tap C scaler for vertical scaling (BGR)
SwScaler: 720x480 -> 320x240
 縦はn-tapになりました。横はなんだかよくわかりません。

 scale=320:240:::4:4 -sws 9、再生の場合(paramとparam2 両方)
MPEG-PS file format detected.
VIDEO: MPEG2 720x480 (aspect 2) 29.970 fps 8001.2 kbps (1000.1 kbyte/s)
Opening video filter: [scale w=320 h=240 param=4 param2=4]
==========================================================================
中略

SwScaler: Lanczos scaler, from 0x32315659 (21VY) to 0x32595559 (2YUY) using AltiVec
SwScaler: using C scaler for horizontal scaling
SwScaler: using n-tap C scaler for vertical scaling (BGR)
SwScaler: 720x480 -> 320x240
VO: [macosx] 320x240 => 320x240 Packed YUY2 [zoom]
 paramとparam2はどちらか片方で良いようです。

 scale=640:480:::4 -sws 9、エンコードの場合(":"が一個少ないのでparamになるハズ)
MPEG-PS file format detected.
VIDEO: MPEG2 720x480 (aspect 2) 29.970 fps 8001.2 kbps (1000.1 kbyte/s)
Opening video filter: [scale w=640 h=480 param=4]
==========================================================================
中略

SwScaler: Lanczos scaler, from 0x32315659 (21VY) to 0x32315659 (21VY) using AltiVec
SwScaler: using C scaler for horizontal scaling
SwScaler: using 1-tap C "scaler" for vertical scaling (YV12 like)
SwScaler: 720x480 -> 640x480
 いやいや1-tapじゃダメだろう、効いてるのかオマエ?再生、エンコードとも、いろいろ値を変えて試しましたが、エンコードは全部1-tapでした。


【画質の違い】

 仕方が無いので再生で試しました。
 拡大の場合、細かいディテイルが鮮明になりましたが、ゴーストらしきものも出ました。
TMPGEnc講座 Ver.22 - 2ch,google キャッシュ
810 :名 無しさん@編集中 :2006/03/19(日) 17:35:04 ID:1IA0QulE
DivX6にLanczos4ってあるけどXP3.0のLanczos3との違い判る人います?
812 :名 無しさん@編集中 :2006/03/19(日) 18:19:24 ID:YvlfNtGV
>>810
参照するピクセル数がLanczos3よりLanczos4の方が多い。
その分時間は確実に多くかかるし、画質も必ずしもLanczos4の方が良いとは限らない。
Lanczos8とかLanczos16とかだと、えらくノイジーになるし。
 また、きっちん - 拡大縮小アルゴリズム(バイキュービックとLanczos) - 2006/02/02 の例を見ると、アニメ(自然界では有り得ないはっきりした塗り分け)は、2で充分なように も思えます。むやみにタップ数(Filter Length)を増やせば良いというものでもなさそうです。

 縮小の場合はほとんど違いが解りませんでした。

 以下の内容はLanczos 2と3の縮小についてです。 時期的に見て、720x480 to 320x240の縮小が主流だった頃と思われます。
 例えば、縮小後画像の x=99, y=99 の座標は、元画像では x=217.8, y=198 の座標に相当するので、先にx=217.8, y=198の値を出して、そこから縮小後の値を決めるという事らしいです。その際、元画像にx=217.8なんて値は無いから周辺ピクセルを参考する、 と。いくつ参考にするかをタップ数と言 う、と。
まるも製作所 - 2001/07月の日記
7 月6日(金) 縮小アルゴリズム(6)— デシメーション

 低域通過フィルタを使ったことのある人ならば体験的に理解してるはずですが、解像感を高めようとタップ数を増やせばリンギングノ イズが発生し、リンギン グノイズを減らそうとタップ数を減らせばエイリアスノイズが発生し、エイリアスノイズを減らそうと縮小サイズよりも小さい阻止周波数を指定すれば解像感が 失われるといった具合に、バランスの良い設定値を見つけることが困難です。

 しかし、Lanczos フィルタ(正確には Lanczos 窓関数を使用した FIR 低域通過フィルタ)は解像感・リンギング・エイリアスのバランスが高いレベルで取れているためその心配がなく、画像処理には最適であると言われています。


7月9日(月) 縮小アルゴリズム(9)— おまけ(補間の場合)

Lanczos フィルタは補間(拡大)にも使用することができます。補間の場合、参照画素数は拡大後の解像度によらず原画像の解像度によってのみ決定されます。

Lanczos フィルタは基本的に低域通過フィルタなのですが、その遮断周波数は基準にとる幅によって決定されます。具体的には、基準の幅のナイキスト周波数が遮断周波 数になります。

原画像の1画素の幅を基準にとると、遮断周波数は原画像解像度のナイキスト周波数に等しくなるので、オリジナルに含まれる(計算誤 差によって削除・追加される歪みを除いた)全情報をそのまま通すフィルタになり、補間に使用することができるようになります。


コメント

     修正用パスワード :

管理人にのみ公開 :

トラックバック


<<前の記事へ ▲  次の記事へ>>