影像和影像處理

已完成

在我們可以探索影像處理和其他電腦視覺功能之前,考慮電腦程式資料內容中的實際影像會很有幫助。

影像即像素陣列

對於電腦而言,影像是數值化像素值的陣列。 例如,請考慮下列陣列:

 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

陣列包含七個資料列和七個資料行,代表 7x7 像素影像的像素值 (這稱為影像的解析度)。 每個像素的值介於 0 (黑色) 和 255 (白色) 之間;這些界限之間的值代表灰色陰影。 此陣列所代表的影像看起來會類似下列影像 (放大) 影像:

Diagram of a grayscale image.

此影像的像素值陣列是二維 (代表資料列和資料行,或 xy 座標),並定義像素值的單一矩形。 像這樣的單層像素值代表灰階影像。 事實上,大多數數位影像都是多維度,而由三個階層 (稱為通道) 所組成,代表紅色、綠色和藍色 (RGB) 的色彩色調。 例如,我們可以藉由定義三個像素值的通道來表示色彩影像,這些通道會建立與上一個灰階範例相同的方形圖形:

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

使用篩選來處理影像

執行影像處理工作的常見方法是套用篩選,修改影像的像素值以建立視覺效果。 篩選是由一或多個像素值的陣列所定義,稱為篩選核心。 例如,您可以使用 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) 會成為新陣列中的第一個值。 然後,我們會沿著一個像素將篩選核心移動至右側,然後重複作業:

(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

同樣地,結果會新增至新的陣列,而其現在包含兩個值:

-255  -510

此程序會重複執行,直到篩選卷積運算整個影像為止,如此動畫所示:

Diagram of a filter.

篩選會卷積運算整個影像,並計算新的值陣列。 某些值可能超出 0 到 255 的像素值範圍,因此值會進行調整以符合該範圍。 由於篩選的形狀,系統不會計算像素的外緣,因此會套用邊框間距值 (通常是 0)。 產生的陣列代表新的影像,其中篩選已轉換原始影像。 在此情況下,篩選的效果是醒目提示影像中圖形的邊緣

若要更清楚地看到篩選的效果,以下是套用至實際影像的相同篩選範例:

原始影像 已篩選的影像
Diagram of a banana. Diagram of a filtered banana.

由於篩選會卷積運算整個影像,因此這種影像操作通常稱為卷積篩選。 此範例中使用的篩選是特定類型的篩選 (稱為 laplace 篩選),可醒目顯示影像中物件上的邊緣。 您可以使用許多其他類型的篩選來建立模糊、銳利化、色彩反轉和其他效果。