MMX, SSEを使うことで、複雑な計算をしても高速です。
lanczosの半径を32まで設定できます。
CZP法で比較してみました。

オリジナル画像です。






順に1,2,4,8,16,32です。
また、平均画素法で縮小すると

このようになります。
CZP法はISP imaging-developers - CZPによる評価に詳しく書かれています。上の図もこのサイトのものを使わせていただきました。
縮小時に、縮小後のナイキスト周波数以上の信号が残っていれば、規則的なパターンの部分でエイリアスノイズになりますし、だからと言ってsinc関数(はコンパクトサポートではないのでフィルタをかけたLanczos関数)で正確に計算すると不規則的な部分でギブズ現象によってリンギングノイズが出ます。さらにノイズが多い場合、重み関数が負の値をとると平均化によるノイズ減少効果が薄れます。lanczosフィルタは解像感・リンギング・エイリアスのバランスが取れているとは言え、元画像が、人工物など規則正しいパターンを含むならばエイリアスを減らすためにローブ幅の大きなlanczos、文字、アニメなど規則的ではないけれど境界がはっきりしている画像ならばリンギングを減らすためにローブ幅はむしろ狭い方が良くlanczos2で充分でしょうし、高感度で撮影したためにノイズの多い画像なら、ノイズを平均化するために負の重みにならない平均画素法やlanczos1(これを実装したソフトはあまり見かけません。ノイズの平均化なら平均画素法の方が良いですし、そもそも一般のノイズフィルタはローパスフィルターの効果があります)、という使い分けがよさそうです。
専門分野ではないので一度斜め読みしただけですが空間スケーラビリティを用いた画像解像度変換法
スキマ産業 » CZPによる評価?
きれいに縮小する方法(1) — 2値線画編 | 有坂ユウトのblog
きれいに縮小する方法(2) — Photoshopの32 bit/チャンネル | 有坂ユウトのblog
yukariも良さそうですが、TIFFを読めないのが不便です。Ralphaで「リニアな色空間で処理する」のオプションをONにして平均画素法を使うのが良さそうなので、「リニアな色空間で処理する」を試してみました。順に平均画素法、lanczosの1,2,4,8,16,32です。
明るさ的には正しいですが、lanczos32でも外側にモアレがあります。計算間違いと言うことはないでしょうから、ガンマカーブとの干渉でこうなるのが正しいのでしょうか?
そう思って先ほどのページの少し先を見てみると、ISP imaging-developers - 視覚特性を考慮した縮小処理にCZP画像をγ=2.2で逆変換した画像、つまりγ=2.2で見ると丁度CZPになる画像がありました。
これだとγ=2.2のディスプレイでは外側のモアレは見えません。つまり最初の画像の外側のモアレはガンマカーブとの干渉によって生じたもので、それを見たままに縮小するなら外側のモアレも再現しているほうが正しいと言うことになります。
この画像をRalphaで「リニアな色空間で処理する」のオプションをONにして縮小してみると、平均画素法、Lanczos1, 2, 3, 4, 8, 16, 32の順に
となり、Lanczos2で充分モアレは消えていますし、Lanczos8くらいで充分正解に近いです。
ついでにR13も試してみました。順に平均画素法、lanczosの2,3,4です。
これもガンマは考慮されていないようで、混合すると暗くなります。
「リニアな色空間で処理する」をONにするとリンギングが強調されるそうなので、リンギングが気にならない範囲でタップ数を抑えたほうが良いでしょう。
0 件のコメント:
コメントを投稿