デジタル画像とは — 写真の正体は「数の表」
スマホの写真も、ゲームの画面も、コンピュータの中では数値がぎっしり並んだ2次元の表にすぎません。ズームインして1マス=画素(ピクセル)まで拡大し、画像が数でできていることをこの目で確かめます。
1. ズームすると見えてくる — 画素
デジタル画像は、画素(ピクセル, pixel)と呼ばれる小さな正方形を格子状にぎっしり並べたものです。1つの画素が持っているのは「自分は何色か」という情報だけ。カラー画像なら R(赤)・G(緑)・B(青)の明るさを表す3つの数です。
下のデモは、このページのためにコードだけで描いた 64×64 画素の風景です。倍率スライダーを上げて、絵が「色のついた正方形の集まり」に分解されていく様子を見てください。カーソルを載せると、その位置の画素が持つ数値が読めます。
ズーム実験 — 絵の中の「数値」を覗く
画像の上でカーソルを動かすと画素のRGB値が出ます
64×64画素の風景(プロシージャル生成)。倍率を上げると、なめらかに見えていた絵が正方形の集まりだとわかります。白い枠=いま注目している画素。左上のパネルがその画素の中身、つまり R・G・B の3つの数です。
POINT — 画像 = 数値の2次元配列
プログラムから見ると、画像は
img[y][x] = (R, G, B) という配列です。座標は左上が原点で、y軸は下向き。「画像を処理する」とは、この配列の数値を読み書きすることに他なりません。
2. 格子の細かさ — 解像度
格子を何マスに区切るかが解像度です。同じ風景でも、8×8 のわずか64画素ではただのモザイク。マス目を細かくしていくと、ある段階から急に「絵」として認識できるようになります。
解像度の効果 — モザイクが絵になる瞬間
同じ風景を 8×8 / 16×16 / 32×32 / 64×64 で表示。スライダーで手動切替、▶で自動めくり。16×16で「何かの風景」、32×32で山と太陽が判別でき、64×64でようやく絵になります。画素数は解像度の2乗で増えることに注意。
注意 — 画素は後から増やせない
一度 8×8 で保存した画像を引き伸ばしても、ぼやけた 8×8 のままで情報は戻りません。AIによる「超解像」は失われた部分をそれらしく推測して描き足しているのであって、復元ではありません。
3. 階調の細かさ — ビット深度
1つの数を何ビットで記録するかも画質を左右します。これがビット深度。n ビットなら 2n 通りの明るさを区別できます。
階調数 = 2n
8 bit なら 256 階調。RGB 3チャンネルなら 256×256×256 ≈ 1,677万色
ビットを削ると何が起きるでしょうか。グレースケール画像で試すと、なめらかな空に等高線のような縞(バンディング)が現れます。ヒストグラム(明るさの分布)を見ると、使える値が飛び飛びになっていくのがわかります。
ビット深度とバンディング
左=n ビットに量子化したグレースケール画像、右=明るさのヒストグラム(灰色=元画像の分布、青=量子化後に使われている値)。4 bit 以下にすると空に縞(バンディング)が浮かび、青い棒がまばらになっていきます。
一歩先へ — なぜ実際の写真では縞が目立ちにくい?
カメラのセンサーにはわずかなノイズがあり、階調の境目をランダムに揺らして縞をぼかしてくれます(ディザリングと同じ原理)。逆に CG のなめらかなグラデーションでは 8bit でも縞が見えることがあり、HDR 表示では 10bit(1,024階調)が使われます。
4. データ量を計算してみる
「幅×高さ」個の画素それぞれが「チャンネル数×ビット深度」の情報を持つので、非圧縮の画像データ量は掛け算だけで見積もれます。
データ量 [バイト] = 幅 × 高さ × チャンネル数 × ビット深度 ÷ 8
フルHD写真: 1920 × 1080 × 3ch × 8bit ÷ 8 = 6,220,800 バイト ≈ 6.2 MB
| 画像 | 解像度 | チャンネル | 非圧縮サイズ |
|---|---|---|---|
| アプリのアイコン | 64×64 | RGBA 4ch | 16 KB |
| フルHD写真 | 1920×1080 | RGB 3ch | 約 6.2 MB |
| 4K写真 | 3840×2160 | RGB 3ch | 約 24.9 MB |
| 8K動画 1秒(30コマ) | 7680×4320 | RGB 3ch | 約 3.0 GB |
一歩先へ — この巨大さが圧縮技術の出発点
非圧縮のままでは写真1枚で数MB、動画は毎秒GB級。だから実際のファイルは PNG(可逆)や JPEG(非可逆)で圧縮されています。写真が1/10になるからくりは第12回「画像圧縮とJPEG」で扱います。
5. まとめ
- 画像は数値の2次元配列。最小単位が画素で、色は R・G・B の3つ(グレースケールなら1つ)の数。
- 解像度=空間方向の細かさ、ビット深度=階調方向の細かさ。音声のサンプリングと量子化と同じ2軸の離散化。
- ビット深度を削るとバンディングが出る。ヒストグラムには飛び飛びの値として現れる。
- データ量 = 幅 × 高さ × チャンネル数 × ビット深度 ÷ 8。まず非圧縮で見積もる癖をつけると圧縮のありがたみがわかる。