洋食の日記

「だ・である」調ではなく「です・ます」調で書きはじめれば良かったなと後悔してる人のブログです

画像をNumo::NArrayで扱えるMagroに画像のサイズ変更を追加した

はじめに

Magroという画像をNumo::NArrayで扱える(読み書きできる)Gemを作っていたが、いろいろと時間がとれず更新が滞っていた。

yoshoku.hatenablog.com

せっかくの連休なので、Bilinear補完によるサイズ変更を追加した。基本的なとこから実装するならばNearest Neighbor法であるし、クオリティを重視するならばLanczos法であるが、実装しやすさからBilinear補完にした。OpenCVのresizeのデフォルトがBliinearなのもある。

使い方

Magroは画像ファイルの読み書きにlibpngとlibjpegを必要とする。Magroをインストールすると、依存関係でNumo::NArrayがインストールされる。

$ brew install libpng libjpeg
$ gem install magro

画像の読み込み・サイズ変更・保存までは以下のようになる。

require 'magro'

img = Magro::IO.imread('hoge.png')

resized = Magro::Transform.resize(img, height: 128, width: 128)

Magro::IO.imsave('hoge_resized.png', resized)

おわりに

Bilinear補完によるサイズ変更の実装では、Extensionは使わずにすべてRubyで書いてある。画像をNumo::NArrayで扱える便利さを、自身で体験することになった。次に追加するとすればフィルタかな。

github.com