14.4. 画像の符号化
画像には複数の表現方法があります。 目的に応じて使い分けます。
ラスタ表現とベクタ表現 #
画像をディスプレイで表示したりプリンタで印刷するときに表現するときには、細かい点毎に色や明るさが制御されます。 この基本単位を画素 (pixel) と呼び、画素の細かさを解像度と呼びます。
この画素毎の色や明るさを、このまま保存することもできますが、目的に応じて他の表現が適することもあります。
ラスタ表現 #
ラスタ表現とは、画素の列に基礎を置く表現です。 写真やスクリーンショットなど作成時の画素列を保存し、 を表示領域に合わせて拡大縮小して表示します。 当然ですが、原サイズでの表示が一番美しくなります。 たとえば縦横 1/2 のサイズに縮小するには、元の画像で隣り合う2つのピクセルの色の平均を取って新しいピクセルを作ることになります。
png
, jpeg
などがよく使われる形式です。
ベクタ表現 #
ベクタ表現は、画像を円や直線・Bézier 曲線などの抽象的な図形を記述します。 表示する際には、図形の方程式から「どの位置にどんなピクセルを出力すればよいか」を計算し、ラスタ画像を作って表示します。これとをラスタライズといいます。
拡大しても綺麗なフォントは、ベクタ表現で作られています。
svg
, pdf
などがよく使われる形式です。
二つの画像は、一見どちらも同じように見えますが、片方は svg
(ベクタ表現)、片方は png
(ラスタ表現) です。
どちらが png
かあててください。ラスタ表現は拡大するとぼやけます。
制御情報 #
最近の保存形式では本来の画像そのものだけでなく、以下のような拡張を含んでいます。
メタ情報 #
EXIF という方法で様々な情報を保持します。 たとえば、ディジタルカメラの機種、撮影場所の緯度経度などを書くことができます。 色を再現するための、カラープロファイルという情報も活用されています。
透明色 #
特別な色として画素の色を「透明」と指定すると、その部分は背景を透過させて見せることができます。 たとえば、画像は長方形領域を前提としますが、外部を透明化させることで丸い画像のように扱うこともできます。
exif を読んでみる
iMac端末で、画像のexif情報を表示するには、ターミナルで exiftool
というコマンドに 画像のファイルパスを指定します。
圧縮表現 #
ラスタ形式の画像にはいくつかの保存方法があります。 画素の数や一つの画素の情報の豊かさを増やすと、ファイルの大きさが大きくなります。そのため圧縮技術が使われます。 圧縮には、画像の内容で得意不得意があります。
ビットマップ表現 #
最も基本的な表現が無圧縮の ビットマップ形式です。 各画素 (pixel) の情報をそのまま無圧縮で表現します。 一つの画素をどの程度の情報で表現するかは目的で変わります。
- 白黒
- 1bit で表現可能です
- グレイスケール
- 1byte 使えば、256段階で白から灰色を表現できます。2byte なら 65536段階です。
- カラー
- 光の 3 原色である赤、緑、青 (RGB)の強さを指定します。それぞれの色を1byte で表現すれば、 \(256^3=16,777,216\) (約1,600万) 種類の色 となります。
- カラー+透明
- RGBに加えて透明度を指定します。RGBA など1ピクセルあたり4次元になります。
例えば縦横ともに 1000 ピクセルの画像を最後の形式で表現すると、以下のように 3MB となります。 \[ 1000 \cdot 1000 \cdot 3 \text{byte} = 3 \text{MB}\]
bmp
や xpm
などがこのような形式ですが、ファイルサイズが大きくなるので、保存にはあまり使われません。
PNG #
PNG (Portable Network Graphics) は、可逆圧縮を行う画像フォーマットです。可逆圧縮の可逆とは、圧縮表現から完全に元データを復元できることを言います。PNGの圧縮は、文字を変換したような画像の圧縮に優れています。
ラスター形式の画像に標準的に使われていて、
たとえば macOS でスクリーンショットを撮ると png
で保存されます
(
21.1. スクリーンショット
)。
可逆圧縮を行う古い表現に gif
もあります。かつては圧縮アルゴリズムの特許の問題がありました。
JPEG #
JPEG (Joint Photographic Experts Group) は、非可逆圧縮形式の画像フォーマットです。 特にこの手法は写真 (自然画像) の圧縮にすぐれ、たとえばほとんどのデジタルカメラは JPEG 形式で画像を保存するようになっています。 非可逆圧縮なので、元の画像を完全には復元できませんが、その差が人には気にならないように設計されています。 一方、文字を変換したような画像を jpeg にすると、輪郭がぼやけることがあります。