上一篇我們實際從 HAM10000 中讀取了一張皮膚病灶圖片,並發現它的 Shape 是(450, 600, 3)
其中 450 是圖片的 Height、600 是 Width,而最後面的 3 代表 Channel,那這個 Channel 到底是什麼?
其實,我們看到的一張彩色圖片,可以拆成 Red、Green、Blue 三個 Channel。
上一篇我們提到 RGB 三個 Channel 組合起來,就形成我們最後看到的顏色,而我們可以把 Channel 想成:分別記錄圖片中某一種顏色資訊的圖層
原本 HAM10000 圖片的 Shape 是 (450, 600, 3),如果把最後面的三個 Channel 拆開,就會得到:
Red Channel = (450, 600)
Green Channel = (450, 600)
Blue Channel = (450, 600)
所以一張 RGB 彩色圖片,可以想成由三個 Channel 疊在一起,這也就是為什麼彩色圖片的 Shape 最後會有一個 3
import matplotlib.pyplot as plt
import numpy as np
# 建立三張只有單一 Channel 的圖片
red_img = np.zeros_like(img_array)
green_img = np.zeros_like(img_array)
blue_img = np.zeros_like(img_array)
# 只保留對應的 Channel
red_img[:, :, 0] = img_array[:, :, 0]
green_img[:, :, 1] = img_array[:, :, 1]
blue_img[:, :, 2] = img_array[:, :, 2]
# 顯示
plt.figure(figsize=(16, 4))
# 分為一列四欄
# 原圖
plt.subplot(1, 4, 1)
plt.imshow(img_array)
plt.title("Original")
plt.axis("off")
# Red
plt.subplot(1, 4, 2)
plt.imshow(red_img)
plt.title("Red Channel")
plt.axis("off")
# Green
plt.subplot(1, 4, 3)
plt.imshow(green_img)
plt.title("Green Channel")
plt.axis("off")
# Blue
plt.subplot(1, 4, 4)
plt.imshow(blue_img)
plt.title("Blue Channel")
plt.axis("off")
plt.show()

將原始圖片的 RGB Channel 分開後,可以發現三張圖片雖然來自同一張皮膚病灶影像,但呈現出的明暗程度並不完全相同。這是因為 Red、Green、Blue Channel 分別保存了不同的顏色強度資訊
圖片中越亮的位置,代表該 Channel 的數值越高;越暗則代表數值越低。因此,透過拆分 RGB Channel,我們可以更清楚觀察病灶與周圍皮膚在不同顏色成分上的差異
從肉眼可以看到,在Green Channel中病灶的輪廓相較另外兩者較為明顯,不過目前我們只是觀察單張圖片,還不能因此判斷哪一個 Channel 對病灶辨識最重要,這些 RGB 數值之後都會成為模型學習影像特徵的基礎
最後來複習一下,今天我們知道,一張彩色的皮膚病灶圖片,其實可以拆成 Red、Green、Blue 三個 Channel,每個 Pixel 都包含:[R, G, B],而整張 HAM10000 圖片的:(450, 600, 3),最後面的 3,就是這三個 RGB Channel。
那麼下一篇就來實際動手處理圖片,看看如何使用 Python 對 HAM10000 的圖片進行讀取、縮放與裁切