Lanczos拡縮アルゴリズムの実装

原理

画像の拡大縮小アルゴリズムはいくつか存在します
・ニアレストネイバー
・バイリニア
バイキュービック
・Lanczos-2
・Lanczos-3

この中で理論上最も美しいとされているのはLanczos-3であり、漢はだまってこの方法を選ぶべきなのですが、いくつかの実装では正確な計算がされておらず、もったいない事になっています。
なので今回はできるだけ正確な高品質な画像を目指して実装してみました。
rubyで。

原理的なものはコチラが詳しいです。こんなブログを見るよりお勧め
http://gwaihir.hp.infoseek.co.jp/wiki.shtml?Lanczos%E9%96%A2%E6%95%B0%E3%81%AB%E3%82%88%E3%82%8B%E7%94%BB%E5%83%8F%E3%81%AE%E6%8B%A1%E5%A4%A7%E7%B8%AE%E5%B0%8F

前提

画像のピクセルデータを取得しないといけないのだが、画像のデコードは別の話なので、また今度にします。
今回は無圧縮のPPM形式を使用。
そしてPPM画像を得るためにImageMagickを使った。

convert test.jpg test.ppm

実装

まずはPPMを読み書きする簡単なクラスがコチラ
image.rb

そして拡大縮小するコードがコチラ
lanczos.rb
※このコードは手続きをダラダラ書いただけな上に、とてつもなく遅いので実用性は皆無です。

出力画像

対象はコチラ
対象画像

40%の縮小結果がコレ
結果画像

綺麗ですよねー?

最後に

遅すぎ。rubyでやるもんじゃない。