Entering Passive Mode

カテゴリ 'Perl' の記事
< ... 5 6 7 8 9 10 >

グレースケール

写真 グレースケール 色の感じ方

今日はグレースケール。

画像から色彩情報を除き、灰色の階調で表現したものである。
一般的には白から黒までの色彩のない 256 階調で表現され、
画像の明るさを抽出するのに利用されることもある。

グレースケールの計算方法は色々あるが、
今回は、最も多くのアプリが実装している方法にしてみよう。

単純に考えた場合、R と G と B の平均値でもよさそうだが、
今回の計算はそれとは少し異なる。では、どう違うのか。

ガンマ値

写真 ガンマ調整 グラフ

今日はガンマ値の調整。
これも画像を扱うアプリケーションの定番機能でもある。

ガンマ値は、画像自体が持つ特性ではなく、
画像を表示するハードウェアの特性である。

ピクセル値、つまり入力値が、0 から 255 まで
直線的に滑らかに変化しても、
ハードウェアの表示、つまり出力値は、
同じように滑らかに出力するとは限らず、
ハードウェアによって様々である。

コントラスト

写真 コントラスト強

今日はコントラストの調整。
画像を扱うアプリケーションの定番機能でもある。

コントラストは、明暗の対比であり
コントラストを高めるということは、
明るいものをより明るく、
暗いものをより暗くするということである。

明るいものと暗いものを分けるのは、
表現できる範囲の中間値を 128 とし、
128 からの差を増幅することに等しい。

ネガ・ポジ反転

写真 ネガ

今日から、簡易レタッチをやっていこう。

レタッチといっても高度なことはできないので
簡単なものから。今日は、ネガ・ポジ反転。

レタッチは、基本的にピクセルの値に計算を施し、
新しいピクセルの値を算出することで行うものがほとんどだ。

自由な計算を行えるように、24 か 32 ビットの画像、
つまりフルカラーの画像を対象としておこう。
色空間は RGB とし、それぞれ 8 ビットで表現する。

BMP まとめ #2

今まで扱った BMP についてまとめてみる。
今日は、BMP ファイルの構造について。

BMP ファイルでは、多バイト長の整数を格納する際、
リトルエンディアンを利用してバイト化される。
例を挙げよう。32 ビット数値の、0x12345678 を、
リトルエンディアンで格納した場合、
バイト上での並びは、0x78, 0x56, 0x34, 0x12 の順となる。

ファイルの先頭には、14 バイトの BITMAPFILEHEADER がある。
最初の 2 バイトには、ASCII 文字で "BM"、
続く 4 バイトはファイル全体のサイズ、
続く 4 バイトは常に 0 であり、
最後の 4 バイトには、画像データ部の
ファイル先頭からのオフセット位置が入る。
BMP は、種類によってヘッダの数やサイズが異なるため、
便宜上、データに直接アクセスできる位置を格納してある。

BMP まとめ #1

この何日か、内容が飛躍しすぎてる気がしてきたので、
ちょっとスローダウンしよう。

今まで扱った BMP についてまとめてみる。
まずは、BMP の表現形式について。

BMP の標準的な形式には、ピクセルあたり
表現ビット数が 1, 4, 8, 16, 24, 32 ビットの種類がある。

表現ビット数が 16, 24, 32 ビットのものは、
各ピクセルは RGB 表現そのものである。
16 ビットの場合は、R, G, B それぞれ 5 ビット、
24, 32 ビットの場合はそれぞれ 8 ビット使用する。

GIF 書き出し(脱線)

BMP なら Web で利用しづらいため、
今日は脱線して GIF での書き出しをしてみる。
昨日ダウンしていた分、気合入れて実装してみた。

GIF は、カラーテーブルを持つ表現のみ可能であり、
原則として最大 256 色しか表示できない。
しかしながら、ピクセルあたりの表現ビット数は、
1, 2, 3, 4, 5, 6, 7, 8 と細かく調整できる。
また、データに LZW をベースとした圧縮が掛かっているので、
単純な画像であればサイズが小さくなりやすい特長がある。

カラーテーブル式 BMP生成

では、カラーテーブルを使った BMP を作ってみよう。

use strict;
use warnings;
use integer;

# 基本情報
my $width  = 100;
my $height = 75;
my $bit_count = 4;

カラーテーブル(パレット)

これまでの内容で、16, 24, 32 ビットの BMP は
作成できるようになったと思うので、
今日は、それ以下のビット数を持つ BMP について書く。

BMP には、ピクセルあたりのビット数がさらに小さい、
1, 4, 8 の値を取る形式もある。
しかし、8 や 4 はともかく、1 ビットでは、
表現できる範囲が少なすぎて、色の表現には無理がある。

そこで、これらでは色その物を直接表現せず、
カラーテーブルを参照する方法を使う。

16 ビット BMP 生成

昨日の説明は文字ばかりで頭が痛いので、
今日は、昨日説明した 16 ビットの BMP を生成してみる。

# gen16bmp.pl

use strict;
use warnings;
use integer;

binmode(select);

< ... 5 6 7 8 9 10 >
このページのトップへ戻る
© 2008 Project Loafer/Project Fireball and all blog writers. Powered by Nucleus CMS