遊び tokidoki 仕事

数学と音楽と教育と遊び

Top | おしごと | ゼミ | がくせい | すうがく | かがく | きょういく | おんがく | おきにー | Tips | Photo | イベント | ものもう | あれこれ | About

BMPからCSVへ

今年度卒業のゼミ生、卒論ではFourier変換の利用をテーマに進めている。
とりかかりが遅かったため、かなりピンチな状況だ。


何人かがデジタル画像処理をテーマにしていることもあって、
画像処理をブラックボックス化してしまわないで
教育的に目に見える形で処理させたい。
そこで、BMP画像をEXCELで処理できるように
BMP画像からRGBに分解してCSV形式で出力するプログラムを
(半分は趣味を兼ねて)10進BASICで作ったので、
ここに公開しておきます。


10進BASICプログラム→[bmp2csv.bas]

REM [bmp2csv.bas]
REM BMP画像データをRGBに分解し3つのCSVファイルとして出力する
REM
REM office2003のEXCELシート互換にするため
REM BMPの横幅は256pxまで、縦幅は65536pxまで
REM
REM [使用法]
REM (1)このプログラムと同じフォルダにBMP画像を置く
REM (2)読み込む画像ファイル名はf$="○○"で指定する
REM (3)実行するとCSV形式でRGB情報が
REM       ○○_rr.csv,○○_gg.csv,○○_bb.csv
REM として同じフォルダに出力される

OPTION ARITHMETIC NATIVE
SET COLOR MODE "NATIVE"
LET  f$="neko"
GLOAD f$ & ".bmp"
ASK PIXEL SIZE (0,0; 1,1) bw,bh
DIM bc(bw,bh), rr(bw,bh), gg(bw,bh), bb(bw,bh), bf(bw,bh), dr(bw), dg(bw), db(bw)
ASK PIXEL ARRAY (0,1) bc
SET BITMAP SIZE bw*4,bh

FOR y=1 TO bh
   FOR x=1 TO bw
      LET  c=bc(x,y)
      LET  rr(x,y)=MOD(c,256)
      LET  c=INT(c/256)
      LET  gg(x,y)=MOD(c,256)
      LET  bb(x,y)=INT(c/256)
   NEXT x
NEXT y

OPEN #1:NAME f$ & "_rr.csv", RECTYPE INTERNAL
ERASE #1
OPEN #2:NAME f$ & "_gg.csv", RECTYPE INTERNAL
ERASE #2
OPEN #3:NAME f$ & "_bb.csv", RECTYPE INTERNAL
ERASE #3
FOR y=1 TO bh
   FOR x=1 TO bw
      LET  dr(x)=rr(x,y)
      LET  dg(x)=gg(x,y)
      LET  db(x)=bb(x,y)
   NEXT x
   MAT WRITE #1: dr
   MAT WRITE #2: dg
   MAT WRITE #3: db
NEXT y
CLOSE #3
CLOSE #2
CLOSE #1

! 確認のためRGBそれぞれで画像を表示してみる

MAT gg=256*gg
MAT bb=65536*bb

MAT PLOT CELLS, IN 1/4,1; 2/4,0 :rr
MAT PLOT CELLS, IN 2/4,1; 3/4,0 :gg
MAT PLOT CELLS, IN 3/4,1;   1,0 :bb
END