iT邦幫忙

2021 iThome 鐵人賽

DAY 2
1

萬般皆是臉
Francois & Jean Robert – 《FACES》

:在接下來的內容裡,我會著重在"圖片"下的人臉辨識 (包含攝影機圖片串流處理),3D影像或其他非圖片類型的本人還未著墨,因此不會在這個系列內容中說明。

註2:本篇文章著重在接下來系列文的基礎知識,如果這些對你來說太簡單了,可以斟酌跳過 :)

本文開始

以下面年輕時的卓別林照片來說:
卓別林
reference: 維基百科 - 查理·卓别林

這張照片有幾個資訊:

  1. 大小是寬高比 540 x 720 px (單位為像素,好奇的邦友可以按F12打開開發者工具檢查)
  2. 照片是灰階照片 (也就是只有一種顏色表示的圖片:黑色)
  3. 卓別林年輕時真帥

若將上述的資訊用電腦能夠理解的資料儲存,以矩陣來表示會看起來像這樣:

matrix

若用numpy array的方式表示會長這樣 (numpy是Python中很常用的矩陣與數值函式庫,這裡可以先不管):

[[ 67  69  65 ...  60  58  60]
 [ 63  62  67 ...  60  58  59]
 [ 64  59  68 ...  54  54  55]
 ...
 [210 211 209 ...  23  20  21]
 [204 210 216 ...  19  15  16]
 [209 203 213 ...  24  18  17]]

到目前為止我們知道:

  1. 電腦在處理圖片時通常會用pixel(像素)來作為基本的單位處理內容 (所以這張照片就有540x720=388800個像素)
  2. 每個像素的值範圍是 [0, 255] (灰階圖片來說,數值越大顏色越淺;255代表白色)
  3. 卓別林年輕時真的很帥

因此,如果是一個彩色圖片:
彩色卓別林

為了要表示色彩空間,我們用大家所熟悉的三原色(RGB)來表示這張圖片的話:
matrix
圖片上半部依序由左至右為圖片僅紅色部分圖片僅綠色部分圖片僅藍色部分

那下半部的三張圖片呢?
還記得前面提到灰階圖片表示,數值範圍是從 [0, 255] 吧?

因此下半部三張圖可以想成把三原色(RGB)分別以灰階數值來表示
頭暈了嗎?

舉例說明:

  • 在左下的圖紅色部分以灰階表示中,可以看到卓別林的臉部部分比起其他下半部的圖都是特別的亮:
    • 意思是臉部部分紅色色彩大多都接近255 (0 ~ 255 是從黑到白);也就是臉部主要是用紅色表示
      (上半部分圖片由於人對不同顏色的差異感知不同,因此紅色部分很難看出臉部比較"亮")
  • 衣服部分可以看出"藍色圖片那張都比較黑" (下半部藍色部分以灰階表示的圖片,對應的地方則是黑色比較多):
    • 意思是原圖衣服部分很少有藍色的像素存在

以上的範例說明希望能讓你對"顏色以數值表示"有一些感覺。
當然,沒有很理解也不會影響接下來的主題就是。

最後,圖片的原始大小為510 x 706,而圖片是彩色的就表示要用三個510 x 706的矩陣來表示:
510 x 706 x 3

numpy來查看圖片的"大小"的話:

numpy.shape(image)
> (706, 510, 3)

依序由左至右是:高為706、寬為510、通道(顏色)為3的圖片

圖片的ROI與Bounding Box

在上面的彩色圖片中,如果在做人臉偵測(Face Detection)或是其他物件辨識時,通常會有類似下圖的過程:
image_color_box

其中:
ROI (Region of Interest),指的是在準備做某個影像分析處理時 (這裡範例就是人臉辨識),後續會特別針對進行處理的區域,通常這個區域是矩形。

而因為目前圖片中ROI只有一個,後續在進行人臉辨識分析,最終結果還是同樣的一個矩形範圍。這個最終人臉辨識結果通常會用Bounding Box(邊界框)表示人臉辨識的範圍。

通常邊界框會有兩種表示方式:

  1. (x0, y0, x1, y1):用兩個點表示邊界框。分別代表左上X座標、左上Y座標、右下X座標、右下Y座標
  2. (x0, y0, w, h):用一個點與寬高表示邊界框。分別代表左上X座標、左上Y座標、邊界框的寬、邊界框的高

再多說一點,由於邊界框一定會在原始圖片內某一個區塊,在做電腦視覺分析(甚至是其他機器學習)時,通常會為了方便進行分析而將邊界框的數值結果都用[0, 1]這個範圍表示

那要如何做呢?

假設我們現在看上面範例圖片的x0位置,可以發現它大概就在整張圖片約左右正中心的位置;這時我們就可以把x0的數值標示成0.5

計算方式聰明的你應該也想到了:x0 / 圖片寬(image_width),然後再取整數 (座標通常都會用整數表示)

其他數值也是用類似的方式計算。

到目前為止這一些基礎知識應該足夠了,明天見!


上一篇
[Day1] 說在前頭
下一篇
[Day3] 人臉偵測 (Face Detection)
系列文
[Computer Vision] 電腦視覺下的人臉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言