デジタル画像とは — 写真の正体は「数の表」

スマホの写真も、ゲームの画面も、コンピュータの中では数値がぎっしり並んだ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×64RGBA 4ch16 KB
フルHD写真1920×1080RGB 3ch約 6.2 MB
4K写真3840×2160RGB 3ch約 24.9 MB
8K動画 1秒(30コマ)7680×4320RGB 3ch約 3.0 GB
一歩先へ — この巨大さが圧縮技術の出発点 非圧縮のままでは写真1枚で数MB、動画は毎秒GB級。だから実際のファイルは PNG(可逆)や JPEG(非可逆)で圧縮されています。写真が1/10になるからくりは第12回「画像圧縮とJPEG」で扱います。

5. まとめ