画像と画像処理

完了

画像処理やその他のコンピューター ビジョン機能を確認する前に、コンピューター プログラムのデータのコンテキストで画像とは実際に何なのかを検討すると便利です。

ピクセル配列としての画像

コンピューターにとって画像はピクセル数値の配列です。 たとえば、次の配列を考えてみましょう。

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

この配列は 7 つの 行と 7 つの 列で構成され、7 x 7 ピクセルの画像 (画像の解像度と呼ばれます) のピクセル値を表します。 各ピクセルは 0 (黒) から 255 (白) までの値を持ち、この範囲内の値がさまざまな色合いの灰色を表します。 この配列が表す画像は次の (拡大) 画像のようになります。

Diagram of a grayscale image.

この画像のピクセル値の配列は 2 次元 (行と列または x 座標と y 座標を表す) で、ピクセル値の単一の四角形を定義します。 このようなピクセル値の単一レイヤーは、グレースケール画像を表します。 実際にはほとんどのデジタル画像は多次元で、赤、緑、青 (RGB) の色相を表す 3 つのレイヤー (チャネルと呼ばれる) で構成されます。 たとえば、前のグレースケールの例と同じ正方形の図形を作成する 3 つのピクセル値のチャネルを定義することで、カラー画像を表現できます。

Red:
 150  150  150  150  150  150  150  
 150  150  150  150  150  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  150  150  150  150  150
 150  150  150  150  150  150  150

Green:
 0    0    0    0    0    0    0          
 0    0    0    0    0    0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0    0    0    0    0    0
 0    0    0    0    0    0    0

Blue:
 255  255  255  255  255  255  255  
 255  255  255  255  255  255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255  255  255  255  255  255
 255  255  255  255  255  255  255

結果的に生成される画像:

Diagram of a color image.

紫色の四角形は、次の組み合わせで表されます。

Red: 150 
Green: 0 
Blue: 255 

中央の黄色い四角形は、次の組み合わせで表されます。

Red: 255
Green: 255
Blue: 0

フィルターを使用して画像を処理する

画像処理タスクを実行する一般的な方法は、画像のピクセル値を変更するフィルターを適用することで視覚効果を作成することです。 フィルターは、フィルター カーネルと呼ばれる 1 つ以上のピクセル値の配列によって定義されます。 たとえば、次の例に示すように、3x3 カーネルでフィルターを定義できます。

-1 -1 -1
-1  8 -1
-1 -1 -1

その後、カーネルは画像全体に "結合" され、ピクセルの 3x3 パッチごとに重み付けされた合計を計算し、結果を新しい画像に割り当てます。 詳細な例を見ると、フィルター処理のしくみを理解しやすくなります。

前に説明したグレースケール画像から始めましょう。

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

まず、画像の左上のパッチにフィルター カーネルを適用し、各ピクセル値にカーネル内の対応する重み値を掛け、結果を追加します。

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (0 x -1) + (255 x -1) = -255

結果 (-255) は新しい配列の最初の値になります。 次に、フィルター カーネルを 1 つのピクセルに沿って右に移動し、操作を繰り返します。

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (255 x -1) + (255 x -1) = -510

再び結果が新しい配列に追加され、配列に次の 2 つの値が含まれます。

-255  -510

次のアニメーションに示すように、フィルターが画像全体に結合されるまでこのプロセスは繰り返されます。

Diagram of a filter.

フィルターが画像全体に結合され、値の新しい配列を計算します。 一部の値は 0 から 255 のピクセル値の範囲外になることがあるため、値はその範囲に収まるように調整されます。 フィルターの図形のためピクセルの外側のエッジは計算されないため、パディング値 (通常 0) が適用されます。 結果の配列は、フィルターが元の画像を変換した新しい画像を表します。 この場合、フィルターは画像内の図形のエッジを強調表示する効果を果たしました。

フィルターの効果をより明確に確認するために、実際の画像に適用される同じフィルターの例を次に示します。

元の画像 フィルター処理された画像
Diagram of a banana. Diagram of a filtered banana.

フィルターは画像全体に結合されるため、このような画像の操作は多くの場合結合的フィルター処理と呼ばれます。 この例で使用するフィルターは、画像内のオブジェクトのエッジを強調表示する特定の種類のフィルター (ラプラス フィルターと呼ばれる) です。 ぼかし、シャープニング、色反転、その他の効果を作成するために使用できる多くの種類のフィルターがあります。