mikeo_410


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の順、カラムの順、ローの順と進むことによっています。

 

 


東戸塚 マンション 石川県 不動産 横浜 不動産 チラシ 印刷 借金相談