
如果今天我把一張狗的照片丟給你。
你大概不到一秒就知道:
「這是一隻狗。」
但如果把同一張照片交給電腦呢?
它真的有看到一隻狗嗎?
答案是...
沒有。
在電腦眼裡,一張圖片並不是:
它甚至不知道什麼叫做「圖片」。
它看到的只有一大串數字。
例如下面是一張非常小的灰階圖片。
52 61 70
81 120 145
200 230 255
我們知道這些數字代表亮度。
但是對電腦來說,它只是一個二維陣列。
沒有任何「圖片」的概念。
如果把每個數字對應到一個亮度:
中間的數字就是不同程度的灰色。
例如
0
就是純黑。
而
255
就是純白。
所以對電腦來說,圖片只是 很多很多像素,每個像素都有自己的數值。
我們來寫程式吧!
這 30 天的文章中會使用 Google Colab 來寫程式。
請在 colab 寫入以下程式碼,看看會跑出什麼。
import numpy as np
import matplotlib.pyplot as plt
img = np.array([
[0, 64, 128],
[96, 160, 224],
[192, 240, 255]
], dtype=np.uint8)
plt.imshow(img, cmap="gray")
plt.axis("off")
plt.show()

執行後,會看到一張只有 3 × 3 的灰階圖片。
雖然它非常小,但它已經是一張影像了。
因為圖片本來就是數字。
我們把 colab 的程式改成:
img = np.random.randint(0, 256, (30, 30), dtype=np.uint8)
plt.imshow(img, cmap="gray")
plt.axis("off")
plt.show()

我們會得到一張充滿雜訊、很像馬賽克的圖片。
在這兩個小實驗中,我們根本沒有畫任何東西。
只是寫入一些數字,電腦卻把它顯示成圖片。
這是因為圖片不是「畫」出來的,而是把數字映射成亮度。
今天我們沒有學任何影像處理演算法。
但我們建立了一個很重要的觀念:
圖片 = 一個由數字組成的矩陣。
未來的各個影像處理的方式,本質上都是在操作這個矩陣。
所以在影像處理中的主要問題並不是:
「我要怎麼處理圖片?」
而是:
「我要怎麼修改這些數字,讓圖片產生我想要的變化?」
從明天開始,我們就會正式認識這些組成圖片的最小單位。
Pixel(像素)。