2008年マルチメディア論 画像処理の演習

2010年マルチメディア論
画像処理演習(2)
http://www.nier.go.jp/saka/rika/pic2009.txt
(pic1.txt ~pic8.txt)
1.プログラム環境の準備
(1) 検索エンジンで「 Tiny Basic 」をキーワードにして、「 Tiny Basic for
Windows 」のトップページを開く。
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/
(2)「Tiny Basic for Windows Ver. 1.21」をダウンロードする。
→ 左の「ダウンロード」をクリックし、「最新版 Ver. 1.21」を選択する。
→ 保存したファイル(セットアップファイル)をクリックする。
(3)TBasic のフォルダを開いて、Tbasic.exe を実行(クリック)する。
(4)プログラム-新規作成 で、以下のプログラムを入力して、実行してみる。
(5)Tiny Basic for Windows のWEBページがあるので参考にしてください。
2.画像とプログラム
• 画像を z: のドライブにダウンロードする。
• http://www.nier.go.jp/saka/rika/koizumi.jpg
• http://www.nier.go.jp/saka/rika/koizumi3.jpg
• 「プログラム」-「新規作成」の画面に以下の
プログラムをコピーする。
• http://www.nier.go.jp/saka/rika/pic1.txt
• 「即実行」をクリックする。
3.座標系を知る
(0,400)
(300,400)
(600,400)
(0,0)
(300,0)
(600,0)
4.1
LINEと色番号
• 直線を描く方法: line (始点)-(終点),色番号
• 【例】 line (150,0)-(150,400),14
• グラフィックで使える色は16色で,色番号0か
ら15まで指定できます。 色は次のように割り
当てられています。
4.2
•
•
•
•
LINEで長方形を描く
長方形を描く方法: line (始点)-(終点),色番号,bf
【例】 line (300,0)-(600,400),14,bf ←塗りつぶす
【例】 line (300,0)-(600,400),14,b ←塗りつぶさない
長方形の色は16色で,色番号0から15まで指定
できます。 色は次のように割り当てられています。
【演習1】 LINEの演習
(0,400)
(300,400)
(600,400)
簡単な漢字を
LINEで書く
ここを黒く
塗る
(0,0)
(300,0)
(600,0)
5.画素(ピクセル)
• http://www.nier.go.jp/saka/rika/pic2.txt
• (x,y)の色を読み取る方法
iro$ =GetRGBPixel(x,y)
※GetRGBPixelのy座標(次頁参照)に注意すること。
• (x+300,400-y)に色を書き込む方法
forecolor=iro$
pset(x+300,400-y)
6. GetRGBPixel(x,y)のy座標
(0,400)
(300,400)
(600,400)
y の値
pset(x+300,400-y)
x の値
(0,0)
(300,0)
(600,0)
【演習2】 画像を斜め傾ける
(0,400)
(300,400)
(600,400)
(0,0)
(300,0)
(600,0)
7.1 RGBを16進数で表示
• http://www.nier.go.jp/saka/rika/pic3.txt
• RGBを16進数で表示
zr$="&h"+mid$(iro$,2,2)
zg$="&h"+mid$(iro$,4,2)
zb$="&h"+mid$(iro$,6,2)
• iro="#FF005A" のとき、
mid$(iro$,2,2) は、FF
mid$(iro$,4,2) は、00
mid$(iro$,6,2) は、5A
7.2 RGBを10進数で表示
• http://www.nier.go.jp/saka/rika/pic3.txt
• iro="#FF005A" のとき、 mid$()によって、
zr$="&hFF" になる。
zg$="&h00" になる。
zb$="&h5A" になる。
• RGBを10進数で表示
nr=val(zr$)
→ nr=16x15+15=255
ng=val(zg$) → ng=16x 0+ 0= 0
nb=val(zb$)
→ nb=16x 5+10= 90
8.1 画像(カラー)を赤色のみに
• http://www.nier.go.jp/saka/rika/pic4.txt
• iro="#xx????" のとき、 mid$()によって、
zr$="#xx0000" にする。
• zr$="&h"+mid$(iro$,2,2)
または、 zr$=mid$(iro$,1,3)
forecolor=zr$+"0000"
pset(x+300,0)
8.2 画像(カラー)をモノクロに
• http://www.nier.go.jp/saka/rika/pic5.txt
• nrとngとnbの平均を求め、整数化する。
nx=int((nr+ng+nb)/3)
• nxを16進数にする。
zx$=right$("0"+hex$(nx),2)
• RGBをすべて同じ zx$ にして、その色をpset
の座標に置く。
forecolor="#"+zx$+zx$+zx$
pset(x+300,400-y)
【演習3】 画像を2値化する
• 2値化とは、白か黒にする。白と黒の中間(灰
色)は使わない。
• 前頁のnxは、nrとngとnbの平均なので、
0≦nx≦255 となる。
• 2値化の場合、nxを0( nx<128のとき)
または 255( 128≦nx≦255のとき)のどちらか
にする。
• BASICの条件分岐
If nx<128 Then nx=0 Else nx=255
9.画像をぼかす
• http://www.nier.go.jp/saka/rika/pic7.txt
n1:(x-1,y-1)
n2:(x,y-1)
n3:(x+1,y-1)
n4:(x-1,y)
n5:(x,y)
n6:(x+1,y)
n7:(x-1,y+1)
n8:(x,y+1)
n9:(x+1,y+1)
• n5のまわりの画素(n1~n9)の平均を nx とする。
• nx=int((n1+n2+n3+n4+n5+n6+n7+n8+n9)/9)
zx$=right$("0"+hex$(nx),2)
forecolor="#"+zx$+zx$+zx$
【演習4】 カラー画像をぼかす
n1:(x-1,y-1)
n2:(x,y-1)
n3:(x+1,y-1)
n4:(x-1,y)
n5:(x,y)
n6:(x+1,y)
n7:(x-1,y+1)
n8:(x,y+1)
n9:(x+1,y+1)
• n5のまわりの画素(n1~n9)について、RGBそれぞれ
の平均を求める。
10.画像のエッジを抽出する
• http://www.nier.go.jp/saka/rika/pic8.txt
n1:(x-1,y-1) n2:(x,y-1)
n3:(x+1,y-1)
n4:(x-1,y)
n5:(x,y)
n6:(x+1,y)
n7:(x-1,y+1)
n8:(x,y+1)
n9:(x+1,y+1)
• N1(上の画素)とn4(下の画素)の差を nx とする。
• nx=int((n1-n4)/4)
zx$=right$("0"+hex$(nx),2)
forecolor="#"+zx$+zx$+zx$
【演習5】 エッジ抽出後にぼかす
• エッジ抽出画像は、白黒がはっきりと描か
れている。そこで、この画像をぼかして
みよう。
• 元画像を左に、エッジ抽出画像を右に描い
たので、今度はエッジ抽出画像(右の画像)を
ベースにして、左にぼかした画像を描いてみ
よう。