上一篇我們準備好了 Google Colab,接下來終於可以開始接觸圖片了,當我們看到一張皮膚病灶照片時,可以直接看出它的顏色、形狀、大小,但對電腦來說,一張圖片其實是由大量的 Pixel(像素) 和數字所組成
所以在開始訓練 AI 之前,我們先來看看一張圖片在電腦眼中到底長什麼樣子呢?
Pixel 中文叫做「像素」,是組成數位圖片的基本單位,我們平常看到的圖片看起來是一個完整的畫面,但如果把圖片一直放大,就會慢慢看到一格一格的小方塊,每一個小方塊,就是一個 Pixel
我們可以把它想成拼圖,是由很多很小的 Pixel 拼在一起,最後就形成了我們看到的圖片
例如一張圖片有:600 × 450 Pixel
代表這張圖片:
所以整張圖片總共有:600 × 450 = 270,000 個 Pixel
也就是說,我們看到的一張小小照片,其實已經是由 27 萬個 Pixel 組成的。
圖片最常看到的資訊之一,例如 600 × 450,前面的數字通常代表 Width(寬度),後面的數字代表 Height(高度),也就是:
而我們常聽到的 Resolution(解析度),在數位圖片的情境中,常會用圖片的像素尺寸來描述,例如 600 × 450,通常 Pixel 數量越多,圖片能保留的細節也越多,但同時需要處理的資料量也會增加
這件事之所以重要,是因為如果我們把很大的圖片直接交給 AI,當圖片越大、Pixel 越多 就代表要處理的數字也越多,所以之後在 Image Preprocessing 時,常常會先把圖片 Resize 成固定大小
接下來就是最重要的地方,我們看到的是一張皮膚病灶圖片,但是電腦並不知道「這是一個病灶」,它看到的是很多數字,先用比較簡單的灰階圖片來理解,假設有一張只有 3 × 3 Pixel 的圖片
52 61 70
63 75 90
80 95 110
這其實就是一個3 × 3的數字矩陣,每一個數字代表一個 Pixel 的亮度,一般 8-bit 灰階圖片的數值會落在 0 ~ 255,其中:
0 = 黑色
255 = 白色
中間的數字則代表不同程度的灰色,所以,圖片其實可以用一堆數字表示,這也是為什麼電腦可以對圖片進行計算
HAM10000 裡的皮膚病灶圖片是彩色圖片,所以情況會再多一層,彩色圖片通常會使用三個 Channel(通道):
也就是我們常聽到的 RGB,所以一個 Pixel 不再只有一個數字,而是可以用三個數字表示,例如:[255, 0, 0],代表:R = 255、G = 0、B = 0,看起來就是紅色,透過不同數值的組合,就可以產生我們看到的各種顏色
至於 RGB 三個 Channel 到底是怎麼組成一張彩色圖片的,我們下一篇會實際把它們拆開來看
現在把前面的概念組合起來,假設我們有一張彩色圖片:Width = 600、Height = 450、Channel = 3
在程式裡,它可能會看到類似(450, 600, 3),這個東西通常稱為圖片的 Shape,所以我們眼中的「一張皮膚病灶照片」,到了電腦裡,其實比較接近 450 × 600 × 3 的數值資料
資料集: https://www.kaggle.com/datasets/kmader/skin-cancer-mnist-ham10000
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import os
# HAM10000 圖片資料夾
image_folder = "/kaggle/input/skin-cancer-mnist-ham10000/HAM10000_images_part_1"
# 找出所有 jpg 圖片
image_files = [
file for file in os.listdir(image_folder)
if file.endswith(".jpg")
]
# 取得第一張圖片
image_path = os.path.join(image_folder, image_files[0])
# 讀取圖片
img = Image.open(image_path)
# 將圖片轉成 NumPy Array
img_array = np.array(img)
# 顯示圖片
plt.imshow(img)
plt.axis("off")
plt.show()
# 顯示圖片資訊
print("圖片名稱:", image_files[0])
print("圖片尺寸 (Width, Height):", img.size)
print("圖片 Shape (Height, Width, Channel):", img_array.shape)
print("左上角 Pixel RGB:", img_array[0, 0])
print(img_array)
實際從 HAM10000 資料集中取出一張圖片後,可以看到這張圖片的尺寸為 600 × 450 Pixel,也就是 Width 有 600 個 Pixel、高度 Height 有 450 個 Pixel,整張圖片總共由 270,000 個 Pixel 組成
當我們將圖片轉換成 NumPy Array 後,可以看到它的 Shape 為 (450, 600, 3),分別代表 Height、Width、Channel,最後的 3 代表這是一張彩色圖片,每個 Pixel 都包含 R(Red)、G(Green)、B(Blue) 三個數值
例如圖片左上角第一個 Pixel 的 RGB 為 [214, 153, 152],代表 Red = 214、Green = 153、Blue = 152,三個數值組合後,就形成了我們看到的顏色
因此,我們眼中看到的是一張完整的皮膚病灶照片,但對電腦來說,這張圖片其實是一個 450 × 600 × 3 的數值陣列。他會從從這些 Pixel 的數值開始處理圖片,下一篇就會繼續看看,每個 Pixel 裡的 R、G、B 三個 Channel 到底代表什麼,以及它們是怎麼組合成一張彩色圖片的