Bitmap DLL R言語 エクステンション
引数に、リスト以外に、単純なベクトルと配列を指定できるように変更しました。
演算結果も表示したくなりました。
Bitmap DLL R言語 エクステンション
気が付いたこと。
1.大きな画像データを読み込むと、R言語の起動終了に時間がかかるようになり
ます。スクリプトの変数に割り当てられた値がすべて保存、復帰されるためで
す。R言語の再開時に不要なら、「その他」「全てのオブジェクトの消去」す
るか、rm(オブジェクト名)で削除してください。
2.bm_image()で、main="図のタイトル"とオプションを付けられますが、日本語
が文字化けすることがあります。これは、plot()など基本的なRの関数でも同
じです。(インターネット上には、コンソールの文字化け対策として、「編
集」「プリファレンス」でMS Gthicを選択したり、etc/にあるRconsole、
Rdevga、Rprofile.siteのフォント設定MS Gthicにすることが出ていますが
私には良く分かりません。)
私が気が付いたのは、「ファイル」「新しいスクリプト」で、表示される
「Rエディタ」上から、マウスの右ボタンメニュー、「カーソル行、または選
択中のRコードの実行」をした場合に置きます。
選択している場合はOKで、選択せず単にカーソルのある行を実行と使用とした
時に化けます。どうも、Rエディタがカーソルの位置を読み込んで、コンソー
ルに移す部分に問題があるのではと思っています。
このプログラムは、R言語で画像ファイルの読み込むために作成しました。
また、検証も兼ねて、ビットマップを表示する関数も作りました。

> img <- bm_read("DSCF0670.JPG")
> bm_image(img)
の、ように使います。
ビットマップは、以下のような構造で、各ビットのR,G,Bを格納します。
> str(img)
List of 5
$ width : int 640
$ height: int 480
$ h_dpi : int 72
$ v_dpi : int 72
$ rgb : int [1:3, 1:307200] 13 13 11 12 12 10 12 11 9 11 ...
>

グレースケールにして、表示してみます。
> y <- (img$rgb * c(306,601,116))
> gray <- (y[1,] + y[2,] + y[3,]) / 1024
> bm_image(gray, img$width, img$height)
>
1.動作環境
Windows XP
R言語 2.7.2
.net framework
2.ファイル構成
1.Bitmap_R.dll
実際に、画像ファイルを読み込む処理をするWindowsのダイナミックリンク
ライブラリです。
2.Bitmap_R.R
R言語のスクリプトです。
3.Readme.txt
このファイルです。
3.インストール
ダウンロードしたBitmap_Rxx_xx.zipを解凍すると3つのファイルが展開されます。
Bitmap_R.dll、Bitmap_R.R を、R言語のワーキング・ディレクトリにコピーして
ください。これで終わりです。
R言語のワーキング・ディレクトリは、
getwd()
で、確認できます。特に設定しなければ、"マイドキュメント"に当たる、
[1] "C:/Documents and Settings/xxxxx/My Documents"
と、表示されます。
これが不便なら、「使い方」の後半の記述の方法で、変更できます。
4.使い方
R言語のコンソール・ウインドウで
> source("Bitmap_R.R")
と、入力します。
Bitmap_R.dllがロードされ、Bitmap_R.Rに記述された関数が有効になります。
> bm_image
のように関数名を入力すると、関数のスクリプトが表示されます。
また、
C:\\Program Files\\R\\R-2.7.2\\etc\\Rprofile.site
に、
setwd("C:/R_WORK")
source("Bitmap_R.R")
を書いておけばR言語の起動時に読み込めます。(C:/R_WORKに、Bitmap_R.dll、
Bitmap_R.Rがあるとして。)
5.関数
1.bm_read("ファイル名")
引数で指定した画像ファイルを読み込んで、ビットマップを返します。
bitmap <- bm_read("thin.bmp")
読み込んだビットマップは、以下のような構造です。
str(bitmap)
List of 5
$ width : int 245
$ height: int 183
$ h_dpi : int 96
$ v_dpi : int 96
$ rgb : int [1:3, 1:44835] 255 255 255 255 ...
2.bm_image(bitmap, width, height)
bm_read()の返すリストを、image()を使って描画します。
この場合は、単にbitmapを指定してください。
ベクトルをbitmapに指定した場合は、width、heightを指定してください。
このとき、ベクトルが行列の場合はRGBが指定されたものと見なします。
単なるベクトルの場合は、0から255でグレースケールを表わすものとみなし
ます。
6.詳細
この関数は、.netのBitmapクラスのコンストラクタで開いた画像ファイルを
開きます。開けるのは、「ペイント」などで開ける形式になります。
BitmapクラスのGetPixel()メソドで得られるColor型のデータのR,G,Bを返し
ます。
Format1bppIndexedのように直接色を示さない場合も、GetPixel()は、正しく
R,G,B値を返します。それぞれ0から255で、順序は、R、G、Bです。
R言語のrgb()の引数は0から1がデフォルトなので注意してください。
また、TOPからBOTTOMへ向かって、水平(左から右)にスキャンした順序で
出力します。R言語の垂直方向の座標は、上に向かって大きくなるので注意が
必要です。
他の色を扱うデータ型では、(n,1:3)の形式が一般的なようです。
ここでは、(1:3,n)の形をしていることに注意してください。
これは、windowsのグラフィックスが(x,y)で座標を指定し、x方向(水平、幅)が先に変化することからきています。
行、列と考えると、windowsのグラフィックは、(カラム、ロー)になっています。
(カラム、ロー)ごとに、(R,G,B)があり、メモリ上の並びが、RGBの順、カラムの順、ローの順と進むことによっています。
|