快轉到主要內容

數位影像處理筆記

目錄
這是一份為了對付期中考的臨時筆記,為了方便隨時閱讀(另一方面是紀錄),我把它作為文章放到網站上

BMP
#

bmp 的格式
#

檔案表頭
#

  • 簽名檔 (2 Bytes): 檔案的前兩個字母永遠是 BM (代表 Bitmap)。如果電腦沒看到 BM,就會直接報錯說檔案損壞
  • 檔案大小 (4 Bytes): 告訴電腦這個檔案總共有多大。
  • 保留區 (4 Bytes): 暫時沒用到,通常是 0。
  • 資料偏移量 (4 Bytes): 這個很重要!它告訴電腦:「包裹的資訊到此為止,請從第幾個 Byte 開始讀取真正的『圖片像素資料』」。

Note:4 bits 可以表示 0 ~ 15,而 1 bytes = 8 bits ,換句話說 1 bytes = 16 進位的兩個位數。像 " BM " 在檔頭會表示成 " 42 4D " ," 42 " -> ‘B’ 、 " 4D " -> ‘M’。

影像資訊表頭
#

  • 圖片的寬度(4 Bytes)
  • 圖片的高度(4 Bytes)

調色盤
#

  • 什麼時候會有? 如果圖片是 8-bit (256色) 或更低,檔案裡就會有這個調色盤。它會列出這 256 種顏色具體是什麼紅、什麼綠。

  • 什麼時候沒有? 如果你的圖片是 24-bit 或 32-bit (全彩),每個像素自己就已經帶有完整的顏色資訊了,就不需要調色盤。這時候這個區塊會直接省略。

調色盤的作用就是建立一張表,後面像素只需要 1 byte 查詢對應的顏色號碼

像素資料 (Pixel Data)
#

  1. 由下往上畫 (Bottom-Up): 一般習慣是從左上角開始畫到右下角。但 BMP 預設是從圖片的「左下角」開始記錄,一路記錄到「右上角」,也就是像素是從下到上、從左到右儲存的

  2. 顏色是 BGR,不是 RGB: 常聽到的顏色排列是紅、綠、藍 (RGB),但 BMP 要反過來,它的順序是藍、綠、紅 (BGR)。

  3. 4 的倍數強迫症 (Padding): BMP 規定,每一橫列的資料量,都必須是 4 的倍數 (Bytes)。如果一張圖的寬度換算下來不是 4 的倍數,它會在每一列的最後面強行塞入沒意義的 0 (Padding) 來補齊

#

  • 如果是彩色影像:檔頭有 56 個 bytes
  • 如果是灰階影像:因為調色盤的原因檔頭是 1078 bytes

色彩空間轉換
#

HSV
#

什麼是 HSV?
#

HSV 是一種基於人類視覺感知的色彩模型,比起機器在看的 RGB 模型,HSV 更符合人類直觀的感受。它將顏色分解為三個屬性:

  • H (Hue, 色相)

  • S (Saturation, 飽和度)

  • V (Value / Brightness, 明度/亮度),因此有時也稱為 HSB。

像是 CSP 或其他電繪軟體都會提供 HSV 色彩系統

三大元素詳解
#

  1. 色相 (Hue)
  • 定義: 顏色的種類(例如紅、黃、藍)。
  • 數值: 用角度表示,範圍是 0° 到 360°。
  • 舉例: 0° 對應紅色,120° 對應綠色,240° 對應藍色。
  1. 飽和度 (Saturation)
  • 定義: 顏色的純度或鮮豔度(或彩度)
  • 數值: 範圍是 0% 到 100%。
  • 舉例: 100% 是最純的顏色;數值越低,顏色越黯淡,0% 時會變成灰階。
  1. 明度 (Value)
  • 定義: 顏色的明暗程度。
  • 數值: 範圍是 0% 到 100%。
  • 舉例: 100% 代表該顏色最亮的狀態;0% 則是純黑色。

為什麼要用 HSV?
#

  • 更直觀的調色: 當你想要把一個紅色「變暗一點」或「變灰一點」,在 RGB 模式下很難抓準數值;但在 HSV 模式下,只要單獨調整明度 (V) 或飽和度 (S) 即可。

YUV
#

什麼是 YUV?
#

YUV 是一種將「亮度」與「色度」分離的色彩編碼系統。

  • Y (Luma, 亮度):代表影像的明亮程度(黑白影像)。

  • U (Chroma Blue, 色度):藍色色差訊號(U = 藍色 - 亮度)。

  • V (Chroma Red, 色度):紅色色差訊號(V = 紅色 - 亮度)。

為什麼需要 YUV?
#

  1. 相容性歷史:當彩色電視問世時,為了讓舊有的黑白電視也能收看訊號,廣播系統保留了 Y 頻道(黑白),並額外疊加了 U 和 V 訊號給彩色電視使用。

  2. 節省頻寬/空間:人類視覺對「亮度」的敏感度遠高於「色彩細節」。因此,我們可以降低 U 和 V 的解析度(採樣率)而不會被肉眼察覺,這就是 YUV 壓縮的核心原理。

常見的採樣格式 (Chroma Subsampling)
#

  • YUV 4:4:4:完全不壓縮,每個 Y 都有對應的 U 和 V。

    • 第一排:4 個亮度、4 個色彩
    • 第二排:4 個色彩
  • YUV 4:2:2:水平方向的色度採樣減半,常用於高品質影片錄製。

    • 第一排:4 個亮度、2 個色彩
    • 第二排:2 個色彩
  • YUV 4:2:0:最常見的格式(如 DVD、藍光、串流影片),色度在水平和垂直方向都減半,能大幅節省空間(約節省一半資料量)。

    • 第一排:4 個亮度、2 個色彩
    • 第二排:0 個色彩(意思是,第二排不存色彩,直接「往上借用」第一排的色彩)
alt text

雜訊
#

雜訊
#

高斯雜訊 (Gaussian Noise)
#

  • 定義:其機率密度函數 (PDF) 符合常態分佈(高斯分佈)的一種雜訊。

  • 外觀:影像看起來會有一層細微的「顆粒感」,幾乎每個像素的亮度都會被輕微改變。

  • 處理方式:常用 均值濾波 (Mean Filter) 或 高斯濾波 (Gaussian Filter) 來平滑化影像。

椒鹽雜訊 (Salt-and-Pepper Noise / Impulse Noise)
#

  • 定義:影像中出現隨機的純白點(鹽)或純黑點(椒)。

  • 外觀:影像上佈滿黑白相間的小點,像是被撒了胡椒粉和鹽巴。

  • 處理方式:中值濾波 (Median Filter) 是最有效的解決方法,因為它可以直接去除極端的離群點。

隨機雜訊 (Random Noise)
#

  • 定義:廣義指各種無規律的干擾,有時特指「均勻雜訊 (Uniform Noise)」。

  • 外觀:雜訊值在一定範圍內隨機分佈,不像高斯雜訊那樣集中在平均值附近,又被稱作白噪音。

  • 處理方式:視分佈情況而定,通常綜合使用各種平滑演算法。

雜訊抑制
#

  要了解這三種濾波器的運作方式,必須先認識影像處理中一個非常核心的概念:「滑動視窗 (Sliding Window)」與「遮罩 (Mask / Kernel)」。你可以想像手上拿著一個通常是 \(3 \times 3\)(九宮格)或 \(5 \times 5\) 的放大鏡。

  這把放大鏡會從圖片的左上角開始,一格一格地往右、往下掃描過整張圖片。每次放大鏡停下來時,它會看著框框內的 9 個像素,然後經過某種「秘密計算」,算出一個新的數值,用來替換掉正中間那個像素原本的顏色。

  這三種濾波器的差別,就在於它們框住那 9 個像素後,進行了什麼樣的「秘密計算」

均值濾波器 (Mean Filter / 最標準的低通濾波)
#

  • 怎麼算: 當 \(3 \times 3\) 的九宮格框住 9 個像素時,它會把這 9 個像素的數值全部加起來,然後除以 9,算出一個平均值。

  • 舉例: 假設中間原本是一個很亮的點(數值 200),但周圍 8 個點都是暗的(數值 20)。計算方式就是:\((200 + 20 \times 8) / 9 \approx 40\)。

  • 結果: 中間原本很突兀的 200,被周圍的鄰居「平均」成了 40。所有的極端值都會被周圍的環境給拉平,這就是為什麼畫面會變模糊的原因。

高斯濾波器 (Gaussian Filter)
#

高斯濾波覺得「均值濾波」太粗暴了,離中心點很遠的像素,怎麼可以和中心點擁有相同的發言權呢?

  • 怎麼算: 它的九宮格裡會自帶「權重分數」。正中間的權重最高(例如 4 分),上下左右次之(例如 2 分),四個角落最低(例如 1 分)。權重會按照某個複雜的公式取值,但實務上是直接查表。

  • 計算過程: 它會把這 9 個像素各自乘上它們的權重,全部加起來後,再除以「總權重」。

  • 結果: 因為正中間的權重最大,所以算出來的新數值,還是會比較貼近原本中心點的顏色。這樣在把雜訊「揉勻」的同時,就能比均值濾波更好地保留原本物體的輪廓和漸層。

中值濾波器 (Median Filter)
#

中值濾波器是個異類,它不加、不減、不乘、不除,它是用排序的

  • 怎麼算: 當 \(3 \times 3\) 的九宮格框住 9 個像素時,它會把這 9 個數字抓出來,從小到大排成一列。然後,直接挑選排在正中間(第 5 個)的那個數字,作為中心點的新數值。

  • 為什麼能秒殺「椒鹽雜訊」? 假設周圍 8 個像素都是正常的灰色(數值都在 100~110 之間),但中間混入了一顆純白的「鹽巴雜訊」(數值 255)。 排隊後會變成這樣:100, 101, 102, 105, 105, 106, 108, 110, 255。 排在正中間的數字是 105。

  • 結果: 那個極端的 255(雜訊)因為太大,直接被踢到隊伍的最尾端,永遠不可能被選中!同樣地,純黑的 0 也會被踢到最前面。所以雜訊就這樣不費吹灰之力地被「無視」並移除了,而原本正常的邊緣卻能完好如初。


影像增強
#

影像增強
#

影像增強的主要目的是透過對像素值的運算,改善影像的視覺效果或轉化為更適合電腦視覺處理的形式。

固定數值 (Linear Scaling / Constant Adjustment)
#

  • 原理:對每個像素加上或乘上一個固定常數。\(g(x,y) = a \cdot f(x,y) + b\)。

  • 效果:加上常數 \(b\) 改變「亮度」,乘上係數 \(a\) 改變「對比度」。

Log 增強 (Log Transformation)
#

  • 原理:\(s = c \cdot \log(1 + r)\)。

  • 效果:擴展影像中的低亮度(較暗)部分,同時壓縮高亮度部分。

  • 應用:常用於顯示動態範圍極大的影像,如傅立葉頻譜圖。

Gamma 增強 (Gamma Correction / Power-Law)
#

  • 原理:\(s = c \cdot r^\gamma\)。

  • 效果:\(\gamma < 1\) 時影像變亮,\(\gamma > 1\) 時影像變暗。

  • 應用:校正顯示器亮度、調整照片曝光不足或過度。

alt text

對比拉伸 (Contrast Stretching)
#

  • 原理:分段線性變換。將原本窄小的灰階範圍(例如 50-100)拉伸到完整的範圍(0-255)。

  • 效果:使影像黑白更分明,細節更清晰。

alt text

灰度切片 (Gray-level Slicing)
#

  • 原理:將特定範圍的灰階值(如 150-200)設為高亮度,其餘設為低亮度(或保持不變)。

  • 應用:從背景中突顯出特定強度的目標物體(如 X 光片中的骨骼)。

alt text

直方圖等化 (Histogram Equalization)
#

  • 原理:透過機率密度函數 (PDF) 與累積分佈函數 (CDF),將影像像素值重新分佈,使其直方圖趨於均勻。

  • 效果:自動最大化影像的全局對比度,特別適用於背景與前景過於接近的影像。

alt text

浮水印
#

浮水印
#

分成:

  • 可見式浮水印
  • 隱藏式浮水印

什麼是數位浮水印?
#

數位浮水印是一種將特定資訊(如版權聲明、作者標識、序號等)隱藏嵌入到數位媒體(影像、音訊、影片)中的技術。

  • 目的:主要用於保護智慧財產權、驗證數位內容的真實性與完整性,以及追蹤資料的非法散佈。

  • 提取方式:當發生版權爭議時,可以透過特定的演算法將隱藏的浮水印提取出來,作為合法的證明。

浮水印技術的三大核心要求
#

這三個特性通常是互相牽制的(Trade-off):

  1. 隱蔽性 (Imperceptibility / Invisibility):嵌入浮水印後,不能嚴重影響原始影像的視覺品質,肉眼應該看不出差異。

  2. 強健性 (Robustness):當影像遭到各種影像處理攻擊(如 JPEG 壓縮、裁切、縮放、加入雜訊、濾波等)後,浮水印仍能存活並被成功提取。

  3. 容量 (Capacity / Payload):影像中能隱藏多少浮水印資訊(位元數)。

浮水印的兩大技術分類
#

A. 空間域技術 (Spatial Domain)
#

直接對影像的像素值(灰階值或 RGB 值)進行修改來嵌入資訊。

  • 代表技術:LSB (Least Significant Bit,最低有效位元)

    • 原理:將像素值的二進位表示法中,最右邊、對數值影響最小的位元(LSB)替換成浮水印的位元。

    • 優點:計算速度極快、演算法簡單、可以隱藏大量資訊(容量高)。

    • 缺點:非常脆弱!只要影像經過輕微的壓縮(如轉存 JPEG)或濾波,最低有效位元就會被破壞,浮水印隨之消失。

B. 頻率域 / 轉換域技術 (Frequency / Transform Domain)
#

先透過數學轉換將影像從「像素空間」轉換到「頻率空間」,在頻率係數上嵌入浮水印後,再逆轉換回影像。這類技術安全性較高,是目前的主流。

  • 代表技術 1:DCT (Discrete Cosine Transform,離散餘弦轉換)

    • 原理:將影像切塊後轉換成不同頻率的係數。通常會將浮水印嵌入在「中頻區塊」,因為低頻區(影像主體輪廓)若被修改會嚴重影響視覺,而高頻區(細節與邊緣)的資訊在 JPEG 壓縮時很容易被捨棄。

    • 優點:對 JPEG 壓縮、濾波等一般影像處理有較強的抵抗力。

  • 代表技術 2:DWT (Discrete Wavelet Transform,離散小波轉換)

    • 原理:將影像分解成不同的解析度頻帶,包含一個低頻子頻帶(LL,近似影像)和三個高頻子頻帶(HL、LH、HH,包含邊緣細節)。浮水印通常嵌入在特定的子頻帶中。

    • 優點:與人類視覺系統(HVS)的特性更吻合,隱蔽性好,且對多種攻擊有極佳的魯棒性。許多先進演算法會結合 DWT 與 DCT 使用。


影像縮放
#

影像縮放
#

Down-sampling (降採樣 / 影像縮小)
#

  • 概念:降低影像的空間解析度(例如把 1000x1000 的圖片縮成 500x500)。

  • 運作原理:最直白的方法就是「丟棄像素」。例如每隔一行、一列就刪除一個像素。

  • 潛在問題 (Aliasing,混疊/鋸齒):如果直接粗暴地丟棄像素,影像中原本細密的紋理(高頻細節)會因為採樣不足而失真,產生水波紋般的「摩爾紋」。

  • 正確做法:在丟棄像素之前,必須先用**低通濾波器(如高斯濾波)**把影像稍微弄模糊,濾掉過於尖銳的高頻細節後,再進行降採樣,這樣縮小後的圖片才會自然。

alt text

Up-sampling (升採樣 / 影像放大)
#

  • 概念:增加影像的空間解析度(例如把小圖放大成桌布)。

  • 運作原理:這其實是一個「無中生有」的過程。電腦會先建立一個更大的空白網格,然後把原本的像素放進去。接下來的問題是:「那些多出來的空白格子,要填入什麼顏色?」

  • 核心關鍵:為了解決空白格子的顏色問題,我們就需要用到**「插值 (Interpolation)」**演算法來「猜」出合理的數值。

其中一個方法就是把像素點複製成更多份

alt text

雙線性插值 (Bilinear Interpolation)
#

這是最常見且速度與品質平衡得很好的放大演算法。

  • 運作原理:當電腦要決定一個新像素的顏色時,它會去尋找距離這個新位置最近的 4 個原始像素(2x2 的田字格)。

  • 計算方式:顧名思義,它會在兩個方向(水平和垂直)分別進行「線性」的加權平均計算。

    1. 先在水平方向上,根據距離遠近,算出上下兩條線的中間值。

    2. 再於垂直方向上,把剛剛算出的兩個值再做一次加權平均。距離新像素越近的原始像素,對最終顏色的影響力(權重)就越大。

  • 效果與優缺點:

    • 優點:運算速度快,比起最簡陋的「最近鄰插值(直接拷貝最近的像素,會充滿馬賽克)」,雙線性的過渡非常平滑。

    • 缺點:因為是不斷取平均值,所以影像放得太大時,邊緣會顯得比較模糊、缺乏銳利感。

雙三次插值 (Bicubic Interpolation)
#

這是專業影像處理軟體(如 Photoshop)在放大圖片時的預設標準演算法。

  • 運作原理:雙線性只參考 4 個鄰居,而雙三次插值會參考最近的 16 個原始像素(4x4 的網格)!

  • 計算方式:它不再只是畫直線做簡單的加權平均,而是利用數學上的「三次多項式曲線(Cubic Polynomial)」來擬合這 16 個點的數值變化趨勢。電腦不只看周圍的顏色,還會計算顏色變化的「斜率(梯度)」。

  • 效果與優缺點:

    • 優點:放大後的影像品質極佳!它能夠非常聰明地保留物體的銳利邊緣,同時讓色彩的漸層過渡非常滑順,不會有雙線性那種糊成一團的感覺。

    • 缺點:計算量相當大(因為要算三次函數和 16 個點),處理高解析度影片時較耗費硬體資源。

    alt text

相關文章