Rubyで簡単な画像処理プログラム

はじめに

これまで学生の卒論等で画像処理プログラムを作成するとき,C言語で指導をしていたのだけど,画像ファイルを読み込む際にmalloc関数でメモリを確保したり,ポインタを多用したりして,画像データを一次元配列で処理する部分等がなかなか学生に理解してもらえないので,これまでCで書いていたものをRubyに書き換えようと考えたのです.

Rubyで画像処理といっても,単純に画像ファイルを読み込み,画像データを配列に格納し,コンボリューションなど加工するだけのことで,別に高機能なライブラリ(OpenCVなど)は必要ないのです.

Rubyで画像処理についてググると,ImageMagickのAPIを利用する「RMagick」を利用する例が多く見受けられます.

しかし,RMagickは,最新のImageMagick 7に非対応.従って,RMagickを利用するためにはImageMagic 6.xが必要(brew install imagemagick@6)らしい.

rmagickのインストールにハマった – Qiita
http://qiita.com/gakkie/items/1ec4c0362047154f1690

しかし,Ver.6.xではbrewでのインストールの際「–with-x11」オプションが使用できないため,displayコマンドが利用できないなど,Macでしようするのはどうも...

とりあえず,brewでは最新版のImageMagick 7を入れておくことにし,RMagickはインストールせず,ImageMagickのconvertコマンドを利用して,PGM形式に変換してから画像処理を行うことにします.

PGM形式を簡単に読み書きできるgemがあった!

PNM – A Ruby library for PNM image files (PBM, PGM, PPM)
https://github.com/stomar/pnm

これを使用にします.

  1. XQuartzのインストール
  2. ImageMagickのインストール
  3. PNMのインストール

の順番でインストールしていきます.

XQuartzのインストール

まずは,displayコマンドで画像をウィンドウに表示させるために必要な,OSXのX WindowシステムであるXQuartzをインストールをインストールしておきます.

brew caskでインストールしてみる.

$ brew cask --version

と打つと,色々とインストールしてくれて,caskが利用できる環境になるようです.caskが利用できるようになったらXQuartzをインストール.

$ brew cask install xquartz
Password:(管理者のパスワード)

XQuartzをインストールしたらDISPLAY環境変数が有効になるように,システムを一度再起動します.
ログインして,ホームディレクトリ内にファイル「~/.Xauthority」ができているのを確認します.

ImageMagickのインストール

X11が利用できるようにオプション「–with-x11」をつけてインストールします.

$ brew install imagemagick --with-x11
$ convert --list configure

「DELEGATES」の中に,「x」があることを確認(x11対応)

適当な画像ファイルを表示してみます.

$ display lena512.tif

画像がウィンドウ上に表示される.これでImageMagickまでの準備はOK!

PNM の gem をインストールする

PNMは特に依存するgemもなさそうなので,bundlerではなくgemでインストールすることにします.

$ gem install pnm

簡単なプログラム(濃度反転 reverse.rb)を作成してみる

require "pnm"

if ARGV.size != 2 then
    puts "USAGE: ruby #{$0} input.pgm output.pgm"
end

img = PNM.read(ARGV[0])
puts img.info

d = img.pixels
ys = img.height
xs = img.width

opix = Array.new(ys).map{Array.new(xs)} 
for i in 0..(ys-1)
    for j in 0..(xs-1)
        opix[i][j] = 255 - d[i][j]
    end
end

oimg = PNM.create(opix)
oimg.write(ARGV[1])

convertコマンドで,TIFFファイルをPGM形式に変換し,上記プログラムにて処理してみます.

$ convert lena512.tif lena512.pgm
$ ruby reverse.rb lena512.pgm out.pgm
$ display out.pgm

out_lena

簡単にできました.

けど,こわい...

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中