画像の色処理 モノクロ画像に変換
(Visual Basic 4〜6対象)
*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・
Visual Basicを使った画像の色処理の基本として、前回は、読み込んだ画像(Bitmap)のある点のRGB値
の取得をやってみました(RGB値の取得)。今回は、画像のグレースケール化(モノクロ画像に変換)をやって
みます。
ちなみに、今回紹介する方法は、Visual Basic4〜6が対象です。
*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・*+・
1 YIQ方式
今回は、カラー写真を白黒写真にしてしまおうと思います。彩度をなくして明度だけ、すなわち
グレースケール(256階調の灰色だけ)にしてしまおうというわけです。
その方法ですが、色を表す方法でYIQという方式があります。TVのカラー放送で使われる方式で、Yが明るさ
を表します。RGBとYIQの関係は以下の式になります。
Y | = | 0.30R | + | 0.59G | + | 0.11B |
I | = | 0.60R | - | 0.28G | - | 0.32B |
Q | = | 0.21R | - | 0.52G | + | 0.31B |
取得したRGB値を上の式でYIQに変換し、
このYIQ方式の明るさYだけを使い、RGB(Y,Y,Y)とすると明るさの違う灰色だけの画像にすることができます。
作成しようとしている画像変換ソフトの[グレースケール]ボタンで呼び出されるのが、そのグレースケール化を行う
プロシージャ(Private Sub Command3_Click())になります。今回はそこだけ説明してみます。
2 グレースケール化
以下が、そのグレースケール化を行うプロシージャです。
Private Sub Command3_Click() Dim r, g, b, y As Long w = Picture1.Width h = Picture1.Height For i = 1 To w For j = 1 To h ' @RGB値の取得 color = Picture1.Point(i, j) ' Ar,g,bをyに変換 r = (&HFF And color) g = (&HFF And (color \ &H100)) b = (&HFF And (color \ &H10000)) y = 0.3 * r + 0.59 * g + 0.11 * b ' B変換した灰色で塗る Picture1.PSet (i, j), RGB(y, y, y) Next j Next i End Sub |
画像の左上から右下まで順番にpoit関数でRGB値を取得し(上記@)、yに変換(上記A)したあと、
RGB(y,y,y)で灰色に置き換え(上記B)ています。
やっていることはシンプルです。
グレースケール化してみたサンプル。