影像處理 === *** 2025 成大資工研究所課程 25/10/24: 更新到Ch2 25/10/30: 更新到Ch3 25/11/13: 期中考 *** # Chapter 1 ## 1.1 What is DIP(digital image processing) ### 1.1.1名詞解釋 #### Image - 2-D 函式 *f(x, y)*. - *x, y* : 空間座標 - amplitude(振幅) *f* : intensity(強度) or gray-level(灰階) #### Digital Image - *x, y, f* 都 **離散(discrete)** 的image - *f* 可為RGB或多光譜(multispectral)的image #### Video - *f(x, y, t)* : frames. #### Digital Image Processing - 由電腦或硬體將影像轉為數位(digital) - 輸入與輸出皆為 **影像** #### Digital Image Analysis - 識別與描述影像內容 - 輸入為影像,輸出為 **象徵性描述(symbolic description)** 的有意義資訊 #### Computer Vision - 使用數位電子設備 **模擬(emulate)** 人類視覺 ## 1.2 The Origins of DIP **廢話** ## 1.3 Examples of Fields that use DIP 好像也不是太重要,認個圖。 ![image](https://hackmd.io/_uploads/BJx5uFdRlg.png) ### 1.3.1 Gamma-Ray ![image](https://hackmd.io/_uploads/rkgOFKO0xg.png) a. 注入放射性同位素,其衰變時釋放正子;正子與電子碰撞湮滅,產生兩個伽馬射線 ### 1.3.2 X-Ray ![image](https://hackmd.io/_uploads/r19wqK_Axx.png) ### 1.3.3 Ultraviolet Band (UV紫外線) ![image](https://hackmd.io/_uploads/BybJiKOCex.png) ### 1.3.4 Visible & infrared Band (可見光) ![image](https://hackmd.io/_uploads/HyKBjFu0xx.png) ### 1.3.5 LANDSAT-7 (衛星主題波段) - 用了紅字,意義不明 ![image](https://hackmd.io/_uploads/S1C12YdAxe.png) ### 1.3.6 Microwave Band (微波) - 太空雷達影像 ![image](https://hackmd.io/_uploads/r1Hz2KORel.png) ### 1.3.7 Radio (無線電波) #### Magnetic Resonance Imaging (MRI) ![image](https://hackmd.io/_uploads/SJpCnY_Cll.png) ### 1.3.8 Others #### Ultrasound Imaging (聲納) ![image](https://hackmd.io/_uploads/ByIYpY_0ex.png) #### SEM Imaging ![image](https://hackmd.io/_uploads/B1tqpYOAxe.png) #### 3D computer Models ![image](https://hackmd.io/_uploads/r1GopFuRex.png) ## 1.4 樹梅派 (Raspberry Pi) ![image](https://hackmd.io/_uploads/BkhD6Yd0el.png) ![image](https://hackmd.io/_uploads/rkMd6Fu0gx.png) # Chapter 2 ## 2.1 Elements of Visual Perception ### 2.1.1 Structure of the Human Eye #### 角膜(Cornea) & 晶體(Lens) - 將影像聚焦到視網膜(retina)上 #### 虹彩(Iris) - 控制進入瞳孔(pupil)的光線量 ### 2.1.2 Image Formation - 影像為倒置,大腦修正為正向 - 要會算成像大小(下圖) ![image](https://hackmd.io/_uploads/HJ59U5d0lg.png) ### 2.1.3 Brightness Adaptation and Discrimination #### 馬赫帶效應(Mach Band Effect) - 在不同亮度的邊界處,人眼會感知到實際不存在的更亮或更暗的條紋。 ![image](https://hackmd.io/_uploads/B157v9dRlg.png) #### 同時對比(Simultaneous Contrast) - 感知到的亮度不僅取決於該區域的強度,也受周圍背景的影響。 ![image](https://hackmd.io/_uploads/HyGIwcdCge.png) #### 視覺幻覺(Optical illusions) - 透過幾何排列、視覺成像規律等手段,製作有「視覺欺騙」成分的圖像進行眼球欺騙。 ![image](https://hackmd.io/_uploads/HJ0nwqORle.png) ## 2.2 Light & the Electromagnetic Spectrum ### 2.2.1 Electromagnetic(EM) Spectrum - 可見光光譜只占電磁光譜(EM Spectrum)的極小部分 - 約430nm(紫)到790nm(紅) ![image](https://hackmd.io/_uploads/BJEEu5O0gg.png) ### 2.2.2 EM expression - 能量 $E = h\nu$($h$ = 普朗克常數, $\nu$ = 頻率)。 - 波長 $\lambda = \frac{c}{\nu}$($c$ = 光速)。 ![image](https://hackmd.io/_uploads/Bk_h_qdAgl.png) ## 2.3 Image Sensing & Acquisition ### 2.3.1 影像擷取 ![image](https://hackmd.io/_uploads/S1mk39dCel.png) #### 單一感測器(Single Sensor) - 如光電二極體(photodiode),需移動以掃描整個影像 #### 條狀感測器 (Sensor Strips) - 用於線掃描(line-scan)應用,如影印機、CAT掃描。 #### 陣列感測器 (Sensor Arrays) - 如CCD(Charge-Coupled Device)或CMOS(Complementary Metal-Oxide Semiconductor)元件,用於數位相機,可一次擷取2D影像 。 ### 2.3.2 影像形成模型(Image Formatoion Model) - $f(x,y) = i(x,y) \cdot r(x,y)$ - $f(x,y)$: 影像強度 - $i(x,y)$: **照明 (illumination)** (光源能量, $0 < i(x,y) < \infty$) - $r(x,y)$: **反射 (reflectance)** (物體反射比例, $0 < r(x,y) < 1$) ### 2.3.3 灰階(Gray Level & GrAY Scale) - Gray Level: 單色(monochrome)影像的強度(intensity) - Gray Scale: $[L_{min},L_{max}]$的區間,通常為$[0,L-1]$ - $l = f(x,y),L_{min} \le l \le L_{max}$ ## 2.4 Image Sampling and Quantization ![image](https://hackmd.io/_uploads/B1l9Byo_Aeg.png) ### 2.4.1 取樣(Sampling) - 在**座標**上進行離散化 ### 2.4.2 量化(Quantization) - 在**振幅**上進行離散化 ### 2.4.3 Dynamic Range & Image Storage Size - Gray level通常為**二的次方**($L=2^{k}$) #### 動態範圍(Dynamic Range) - 影像中灰階所橫跨的值域(the range of value spanned by the gray levels)。 - 雜訊(Noise) - 在最暗的區域,雜訊會以顆粒狀紋理出現,這會掩蓋掉真正最低的可偵測強度值。 - 飽和(Saturation) - 在最亮的區域,當強度高過一個上限時,所有值都會被clipped成一個固定的最高值。 #### Image Storage Size - Bits Required = $M*N*k\ (L=2^{k})$ ![image](https://hackmd.io/_uploads/By_KzsdRex.png) ### 2.4.4 Spatial Resolution - 影像中**可辨識的最小細節** - 由**取樣(Sampling)** 決定 ![image](https://hackmd.io/_uploads/SJyeSj_Cxe.png) ### 2.4.5 Intensity Resolution - $k$值大小決定影像深度 - 由**量化(Quantization)** 決定 ![image](https://hackmd.io/_uploads/SJwdSsu0ge.png) ### 2.4.6 Level of Details - 影像的複雜程度 ![image](https://hackmd.io/_uploads/rJusHsOAex.png) #### ISO-preference curves - 描述影像**主觀品質(subjective quality)**的一種方式 - 這條曲線是繪製在一個 $N-k$ 平面上 - **N 軸(X軸):** 代表**空間解析度**(Spatial Resolution)。 - **k 軸(Y軸):** 代表**灰階解析度**(Gray-level Resolution,即位元深度)。 - 曲線解讀 - 曲線上的相同點表示有**相同品質(equal subject quality)** - **Crowd(高細節):** 曲線較陡峭。這意味著對於高細節影像,**空間解析度($N$)** 對主觀品質的影響遠大於灰階解析度($k$)。 - **Face(低細節):** 曲線較平緩。這意味著在細節較少的影像中,**灰階解析度($k$)** 的重要性相對提高。 - 記憶:**低細節重深度**!!! ![image](https://hackmd.io/_uploads/r15zOo_Rge.png) ### 2.4.7 Image Interpolation - 利用**已知數據**來**估計未知位置上的值**的過程 #### Neareat Neighbor Interpolation - 新網格直接疊加在舊網格上面 - 快速、鋸齒明顯 #### Bilinear Interpolation - 原始影像中**最近4個鄰居**($2\times2$鄰域)來估算新像素的值。 - 公式: $v(x,y) = ax + by + cxy + d$ #### BiCubic Interpolation - 使用原始影像中**最近16個鄰居**($4\times4$鄰域)來估算新像素的值。 - 公式: $v(x,y) = \sum_{i=0}^{3}\sum_{j=0}^{3} a_{ij}x^{i}y^{j}$ - 慢、最為平滑 ![image](https://hackmd.io/_uploads/S1jtsoO0lg.png) ## 2.5 Some Basic Relationships Between Pixels ### 2.5.1 Neighbors of a pixel #### $N_4(p)$ (4-鄰居) - 這是 $p$ 的水平和垂直鄰居。 - 其座標集合為:$(x+1, y), (x-1, y), (x, y+1), (x, y-1)$。 #### $N_D(p)$ (對角鄰居) - 這是 $p$ 的對角鄰居。 - 其座標集合為:$(x+1, y+1), (x+1, y-1), (x-1, y+1), (x-1, y-1)$。 #### $N_8(p)$ (8-鄰居) - 這是 $p$ 的 4-鄰居和對角鄰居的聯集 (union)。 - $N_8(p) = N_4(p) \cup N_D(p)$。 ### 2.5.2 Adjacency - 鄰接性用於定義像素間的連接。我們需要一個強度值集合 $V$ 來定義鄰接性。 #### 4-鄰接 (4-adjacency) - 如果 $q$ 在 $N_4(p)$ 集合中,則兩個來自 $V$ 集合的像素 $p$ 和 $q$ 是 4-鄰接的。 #### 8-鄰接 (8-adjacency) - 如果 $q$ 在 $N_8(p)$ 集合中,則兩個來自 $V$ 集合的像素 $p$ 和 $q$ 是 8-鄰接的。 #### m-鄰接 (mixed adjacency) - 這是 8-鄰接的修改版,用以消除歧義。 - 如果 $p$ 和 $q$ 的值都在 $V$ 集合中,它們是 m-鄰接的,若: 1. $q$ 在 $N_4(p)$ 中,**或** 2. $q$ 在 $N_D(p)$ 中,**且** $N_4(p) \cap N_4(q)$ 集合中沒有來自 $V$ 集合的像素。 ![image](https://hackmd.io/_uploads/H1mAPeY0ex.png) ### 2.5.3 Connectivity - 看起來同離散的概念 #### Digital path/curve - 從座標 $(x,y)$ 的像素 $p$ 到座標 $(s,t)$ 的像素 $q$ 的路徑,是一系列座標為 $(x_0, y_0), (x_1, y_1), ..., (x_n, y_n)$ 的相異像素序列。 - 其中 $(x_0, y_0) = (x, y)$ 且 $(x_n, y_n) = (s, t)$。 - 對於 $1 \le i \le n$, $(x_i, y_i)$ 和 $(x_{i-1}, y_{i-1})$ 必須是鄰接的。 - $n$ 是路徑的長度。 - 如果 $(x_0, y_0) = (x_n, y_n)$,則這是一條 **封閉路徑(Closed Path)**。 #### Connected - S 是一個影像中的像素子集。 - 如果 S 中的兩個像素 $p$ 和 $q$ 之間存在一條完全由 S 中像素組成的路徑,則稱 $p$ 和 $q$ 在 S 中是連通的。 #### Connected component - 對於 S 中的任何像素 $p$,S 中所有與 $p$ 連通的像素集合,稱為 S 的一個 **Connected Component**。 #### Connected set - 如果 S 僅包含一個 **Connected Component**,則 S 稱為一個 **連通集(Connected Set)**。 ### 2.5.4 Regions #### Region - 如果一個像素子集 $R$ 是一個 **Connected Set**,則 $R$ 稱為一個區域。 #### Adjacent - 如果兩個區域的 **聯集(union)** 是一個 **Connected Set**,則它們是鄰近的。 ![image](https://hackmd.io/_uploads/ryuZ3eYRle.png) #### Disjoint - 不鄰近的區域。 ### 2.5.5 Boundaries #### 內邊界 (inner border) - 一個區域 $R$ 的邊界,是 $R$ 中這樣一個像素集合:這些像素至少有一個鄰居不在 $R$ 中。 #### 外邊界 (Outer border) - 背景中對應的邊界。 ### 2.5.3 Distance measures #### Distance function / metric - 對於座標分別為 $(x, y), (s, t), (v, w)$ 的像素 $p, q, z$, $D$ 是一個距離函數,若滿足: 1. $D(p, q) \ge 0$ ($D(p, q) = 0$ iff $p = q$) 2. $D(p, q) = D(q, p)$ (對稱性) 3. $D(p, z) \le D(p, q) + D(q, z)$ (三角不等式) #### Euclidean Distance - $D_e(p, q) = [(x-s)^2 + (y-t)^2]^{1/2}$ #### $D_4$ (City-Block Distance) - $D_4(p, q) = |x-s| + |y-t|$ - $D_4 = 1$ 的像素即是 $(x, y)$ 的 4-鄰居。 #### $D_8$ (Chessboard Distance) - $D_8(p, q) = \max(|x-s|, |y-t|)$ - $D_8 = 1$ 的像素即是 $(x, y)$ 的 8-鄰居。 #### $D_m$ - 定義為兩點之間的最短 m-路徑 **(m-adjacency)**。 ## 2.6 Mathematical Tools used in DIP ### 2.6.1 Array vs Matrix Operation #### 陣列乘積 (Array product) - 這是 **逐元素 (element-by-element)** 的運算。 - $$\begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} \begin{bmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{bmatrix} = \begin{bmatrix} a_{11}b_{11} & a_{12}b_{12} \\ a_{21}b_{21} & a_{22}b_{22} \end{bmatrix}$$ #### 矩陣乘積 (Matrix product) - 這是標準的矩陣數學運算。 - $$\begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} \begin{bmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{bmatrix} = \begin{bmatrix} a_{11}b_{11}+a_{12}b_{21} & a_{11}b_{12}+a_{12}b_{22} \\ a_{21}b_{11}+a_{22}b_{21} & a_{21}b_{12}+a_{22}b_{22} \end{bmatrix}$$ ### 2.6.2 Linear & Nonlinear Operations - 一個運算子 $H$ 將輸入影像 $f(x,y)$ 轉換為輸出影像 $g(x,y)$,即 $H[f(x,y)] = g(x,y)$。 #### 線性運算子 (Linear Operator) - 如果 $H[a_i f_i(x,y) + a_j f_j(x,y)] = a_i H[f_i(x,y)] + a_j H[f_j(x,y)]$,則 $H$ 稱為線性運算子。 - 例如,**總和 (Sum, $\Sigma$)** 運算子是線性的。 #### 非線性運算子 (Nonlinear Operator) - 不滿足上述條件的即為非線性。 - 例如,**max** 運算子是非線性的(可用上點反證非線性)。 ### 2.6.3 Arithmetic Operations #### 影像間的算術運算是陣列運算,意指在對應的像素對之間進行。 - **加法:** $s(x,y) = f(x,y) + g(x,y)$ - **減法:** $d(x,y) = f(x,y) - g(x,y)$ - **乘法:** $p(x,y) = f(x,y) \times g(x,y)$ - **除法:** $v(x,y) = f(x,y) \div g(x,y)$ #### 應用:影像加法 (平均) 進行降噪 - 模型:$g(x,y) = f(x,y) + \eta(x,y)$。 - 將 $K$ 個雜訊影像平均:$\overline{g}(x,y) = \frac{1}{K}\sum_{i=1}^{K}g_i(x,y)$。 - 平均影像的標準差 $\sigma_{\overline{g}(x,y)}$ 降為 $\frac{1}{\sqrt{K}}\sigma_{\eta(x,y)}$。 - **前提:** 影像必須先**對齊 (registered)**。 #### 應用:影像減法 強化差異 - $g(x,y) = f(x,y) - h(x,y)$。 - 主要應用是**數位減法血管攝影 (Digital Subtraction Angiography, DSA)**。 - ![image](https://hackmd.io/_uploads/HyfDvbKCeg.png) #### 應用:影像乘法/除法 進行陰影校正 (Shading Correction) - 將有陰影的影像乘以陰影圖案的倒數,可得到校正後的影像。 ![image](https://hackmd.io/_uploads/SkavwWtRel.png) - 乘法也可用於**感興趣區域 (ROI) 遮罩**。 ![image](https://hackmd.io/_uploads/BJD9vZK0ex.png) #### Full Range - 為了將結果縮放到固定的 $K$ 位元範圍($[0, K]$): - 正規化到 $[0, 1]$,乘上 $K$ 1. $f_m = f - \min(f)$ (移至 $0$) 2. $f_s = K[f_m / \max(f_m)]$ (縮放到 $K$) ### 2.6.4 Set and Logical Operations #### Set Operations - **聯集 ($A \cup B$)**、**交集 ($A \cap B$)**、**補集 ($A^c$)**、**差集 ($A - B$)**。 - **德摩根定律 (DeMorgan's laws):** $(A \cup B)^c = A^c \cap B^c$ 和 $(A \cap B)^c = A^c \cup B^c$。 ![image](https://hackmd.io/_uploads/SkOQY-t0ex.png) #### Gray-Level Image Operation - **補集 (影像負片):** $A^c = \{(x, y, 255-z) | (x, y, z) \in A\}$。 - **聯集:** $A \cup B = \{\max_z(a, b) | a \in A, b \in B\}$。 ![image](https://hackmd.io/_uploads/ryrKtWKRel.png) #### Logical Operation - NOT, AND, OR, XOR ![image](https://hackmd.io/_uploads/SJO0tbKRex.png) #### Fuzzy Sets - 用於處理隸屬關係不明確的集合。 - (我看起來)非0即1的反話 - 使用**隸屬函數 (membership function)**,其值可在 0 和 1 之間漸變。 ### 2.6.5 Spatial Operations #### 單像素運算 (Single-pixel operations):** - $s = T(z)$,$T$ 是一個轉換函數。 - 例如:影像負片 $s = (L-1) - z,\ L=2^k$。 ![image](https://hackmd.io/_uploads/r16XibKAxx.png) #### 鄰域運算 (Neighborhood operation):** - 輸出像素的值由輸入像素 $(x,y)$ 的一個鄰域 $S_{xy}$ 決定。 - 例如:**Local averaging** $g(x,y) = \frac{1}{mn}\sum_{(r,c) \in S_{xy}} f(r,c)$。 ![image](https://hackmd.io/_uploads/HyrnoZF0gx.png) #### Geometric spatial transformations - 兩個操作: 1. **座標的空間轉換**:$(x, y) = T\{(v, w)\}$。 2. **強度內插 (Intensity interpolation)**。 - **仿射轉換 (Affine Transform):** - $[x, y, 1] = [v, w, 1]T$。 - 可實現**scale**、**rotate**、**translate**或**sheer**。 ![image](https://hackmd.io/_uploads/ByPb3bF0lg.png) #### 影像對齊 (Image Registration):** - 目的是估計轉換函數,以對齊**輸入影像**與**參考影像**。 - **繫點 (Tie points / Control points):** 是解決此問題的主要方法之一。 - 可使用**雙線性模型 (bilinear approximation)** 來求解轉換係數。 - $x = c_1v + c_2w + c_3vw + c_4$ - $y = c_5v + c_6w + c_7vw + c_8$ ### 2.6.6 Vector and Matrix Operations - 像素可以表示為向量。例如,RGB 影像的像素 $z = [R, G, B]^T$。 - **Euclidean distance:** $D(z,a) = [(z-a)^T(z-a)]^{1/2} = ||z-a||$ (vector norm)。 - **Linear Transformation:** $w = A(z-a)$。 - 一個 $M \times N$ 的影像可以被表示為一個 $MN \times 1$ 的向量 (攤平)。 - 線性過程可表示為 $g = Hf + n$。 *** 此處以下內容我都不知道在幹嘛 *** ### 2.6.7 Image Transforms - 有些任務最好在**轉換域 (transform domain)** 中進行。 #### 流程 - 空間域 $f(x,y)$ $\rightarrow$ 轉換 $T(u,v)$ $\rightarrow$ 運算 $R[T(u,v)]$ $\rightarrow$ 反轉換 $g(x,y)$。 #### 2-D 線性轉換 (General Form) - **正向轉換:** $T(u,v) = \sum_{x} \sum_{y} f(x,y) r(x,y,u,v)$ - **反向轉換:** $f(x,y) = \sum_{u} \sum_{v} T(u,v) s(x,y,u,v)$ - $r(...)$ 和 $s(...)$ 分別是**正向**和**反向**的**轉換核 (kernel)**。 #### 可分離核 (Separable Kernel) - $r(x,y,u,v) = r_1(x,u) r_2(y,v)$。 #### 離散傅立葉轉換 (DFT) 看第四章 - 正向核: $r(x,y,u,v) = e^{-j2\pi(ux/M + vy/N)}$ - 反向核: $s(x,y,u,v) = \frac{1}{MN} e^{j2\pi(ux/M + vy/N)}$ #### 矩陣形式 - 如果核是可分離且對稱的 ($T = AFA$)。 - 反轉換為 $F = BTB$。如果 $B = A^{-1}$,則 $F$ 可以完全恢復。 ### 2.6.8 Probabilistic Method #### 強度等級 $z_k$ 出現的機率 $p(z_k)$ - $p(z_k) = n_k / (MN)$,其中 $n_k$ 是 $z_k$ 強度出現的次數。 - $\sum_{k=0}^{L-1} p(z_k) = 1$。 #### 影像特徵 - **平均強度 (Mean):** $m = \sum_{k=0}^{L-1} z_k p(z_k)$ - **變異數 (Variance, $\sigma^2$):** $\sigma^2 = \sum_{k=0}^{L-1} (z_k - m)^2 p(z_k)$ - **$n$ 階動差 (nth moment):** $\mu_n(z) = \sum_{k=0}^{L-1} (z_k - m)^n p(z_k)$ - $\mu_2(z)=\sigma^2$(變異數)可作為影像**對比度 (contrast)** 的量測。 ![image](https://hackmd.io/_uploads/H1QWyfFCxe.png) # Chapter 3 ## 3.1 Background ### 3.1.1 影像增強的兩大類別 - **空間域 (Spatial Domain):** (The image plane itself, dealing directly with pixel values)。直接對影像中的像素進行操作。 - **頻率域 (Frequency Domain):** (Deals with the image's rate of change in pixel values, often manipulated via Fourier Transform)。透過修改影像的傅立葉轉換來達成。 ### 3.1.2 空間域處理 (Spatial Domain Process) - 可表示為 $g(x,y) = T[f(x,y)]$,其中 $f(x,y)$ 是輸入影像, $g(x,y)$ 是處理後的影像,T 是在 (x,y) 點的某個鄰域 (Neighborhood - a set of pixels surrounding a central pixel) 上定義的運算子。 #### 點處理 (Point Processing) - 最簡單的形式是當鄰域大小為 1x1。 - 轉換函式簡化為 $s = T(r)$,其中 r 是 $f(x,y)$ 的灰階,s 是 $g(x,y)$ 的灰階。 - 範例:對比度拉伸 (Contrast stretching) 和閾值處理 (Thresholding)。 ![image](https://hackmd.io/_uploads/rk0TUv90gx.png) #### 遮罩處理 (Mask Processing / Filtering) - (An operation where the new pixel value depends on the values in its neighborhood, as defined by a mask or kernel)。 - 當使用大於 1x1 的鄰域時,會使用「遮罩」(mask)(也稱為濾波器 (filter)、核心 (kernel)、模板 (template) 或窗口 (window))。 ## 3.2 Some Basic Gray Level Transformations ![image](https://hackmd.io/_uploads/SJFLDw5Cxl.png) ### 3.2.1 Image Negative - 公式: $s = L - 1 - r$,適用於灰階範圍在 $[0, L-1]$ 的影像。 - 用途: 增強嵌入在黑暗區域中的 **白色或灰色細節** (例如:乳房 X 光攝影影像)。 ![image](https://hackmd.io/_uploads/H1j-OP9Alx.png) ### 3.2.2 Log Transformation (值取Log) - 公式: $s = c \log(1 + r)$,其中 c 是常數,且 $r \ge 0$。 - 用途: 壓縮像素值變化範圍大的影像之動態範圍。例如,用於顯示 **傅立葉頻譜 (Fourier spectrum)**。 ![image](https://hackmd.io/_uploads/ryDLdDq0lx.png) ### 3.2.3 Power-Law Transformation - 公式: $s = cr^{\gamma}$,其中 c 和 $\gamma$ 是常數。 #### Gamma ( $\gamma$ ) 的影響 - $\gamma < 1$:擴展暗態灰階,壓縮亮態灰階。適用於需要灰階擴展的影像(例如:對比度不足的 MRI 影像)。 - $\gamma > 1$:壓縮暗態灰階,擴展亮態灰階。適用於需要灰階壓縮的影像(例如:曝光過度的空拍影像)。 - ![image](https://hackmd.io/_uploads/BkG4tD9Ceg.png) (思考): 取Log = $\gamma < 1$ #### Gamma 修正 (Gamma Correction) - 用於校正影像擷取、列印和顯示設備(如 CRT 螢幕)的冪律響應。 ![image](https://hackmd.io/_uploads/SkpxqvcAxe.png) ### 3.2.4 Piecewise-linear Transformation #### Contrast Stretching (對比度拉伸) - (Expanding a narrow range of pixel values to fill the full dynamic range)。 - 轉換由 $(r_1, s_1)$ 和 $(r_2, s_2)$ 兩個點控制。 ![image](https://hackmd.io/_uploads/Hy91JdcRle.png) #### Gray-Level Slicing (灰階切片) - Highlight 特定區間,將其他非目標範圍變暗或保持不變。 ![image](https://hackmd.io/_uploads/r1rnkuqRlg.png) ![image](https://hackmd.io/_uploads/BkQ6ku5Cll.png) #### Bit-Plane Slicing (位元平面切片) - 突顯特定位元對影像的貢獻。 - 一個 8 位元影像可分解為 8 個 1 位元的位元平面。 - 高階位元平面(如 7 和 8)通常包含視覺上最重要的數據。 - (備註): Bit-0幾乎為噪音。 ![image](https://hackmd.io/_uploads/BJtzxd5Cex.png) ## 3.3 Histogram Processing ### 3.3.1 Histogram - **定義:** 一個離散函式 $h(r_k) = n_k$,其中 $r_k$ 是第 k 個灰階, $n_k$ 是影像中具有該灰階的像素數量。 #### 標準化直方圖 (Normalized Histogram) - $p(r_k) = n_k / MN$,其中 M 和 N 是影像的行列維度。 - 即 $r_k$ 出現的機率 ### 3.3.2 Histogram Equalization - **目的:** 調整影像的灰階分佈,使其直方圖盡可能均勻 (uniform)。這是一種 global 處理。 #### 轉換函式 $T(r)$ 需滿足 - (a) $T(r)$ 區間內 **single-valued** 且 **monotonically increasing** (斜率>=0)。 - (b) $T(r)$ 的值域也在 **$[0, L-1]$** 區間內。 #### Continuous Form Derivation (CDF) 1. **(PDF Relationship):** 根據機率論,輸出與輸入 PDF 之間的關係由以下公式給出: - $p_s(s) = p_r(r) \left| \frac{dr}{ds} \right|$。 2. **(The Transformation):** 轉換 $T(r)$ 正是 $r$ 的**累積分布函式 (Cumulative Distribution Function, CDF)**: - $s = T(r) = (L-1) \int_{0}^{r} p_r(w) dw$。 - (這裡 $w$ 是一個虛擬變數 (dummy variable),$(L-1)$ 則是用於將值域從 [0, 1] 縮放回 [0, L-1])。 3. **(Find the Derivative):** 為了使用步驟 1 的公式,我們需要 $\frac{ds}{dr}$。根據微積分基本定理,我們對 $s$ 進行微分: -$\frac{ds}{dr} = \frac{d}{dr} \left[ (L-1) \int_{0}^{r} p_r(w) dw \right]$。 - $\frac{ds}{dr} = (L-1) p_r(r)$。 4. **(Substitution):** 現在,我們將 $\frac{ds}{dr}$ 代入步驟 1 的公式中: - $p_s(s) = p_r(r) \left| \frac{1}{(L-1) p_r(r)} \right|$。 5. **(The Result):** $p_r(r)$ 被消去,我們得到: - $p_s(s) = \frac{1}{L-1}$ (對於 $0 \le s \le L-1$)。 - **結論:** $p_s(s)$ 是一個**均勻機率密度函式 (uniform probability density function)**。這證明了使用 CDF 作為轉換函式,理論上可以產生一個直方圖完全均勻的輸出影像。 #### 連續範例推導 (Continuous Form Derivation - Example) - (此範例展示如何將特定 PDF 轉換為均勻 PDF)。 1. **假設一個 PDF (Assume a PDF):** - 假設影像的灰階強度 $r$ 具有以下 PDF: - $p_r(r) = \begin{cases} \frac{2r}{(L-1)^2} & \text{for } 0 \le r \le L-1 \\ 0 & \text{otherwise} \end{cases}$ 2. **應用 CDF 轉換 (Apply the CDF Transformation):** - $s = T(r) = (L-1) \int_{0}^{r} p_r(w) dw = (L-1) \int_{0}^{r} \frac{2w}{(L-1)^2} dw$ - $s = \frac{2(L-1)}{(L-1)^2} \int_{0}^{r} w dw = \frac{2}{L-1} \left[ \frac{w^2}{2} \right]_{0}^{r}$ - **得到轉換函式 $T(r)$:** $s = \frac{r^2}{L-1}$ 3. **驗證 $p_s(s)$ 是否均勻 (Verify Uniformity):** - 我們需要 $\left| \frac{dr}{ds} \right|$。 - 從 $s = \frac{r^2}{L-1}$ 可得 $\frac{ds}{dr} = \frac{2r}{L-1}$,因此 $\left| \frac{dr}{ds} \right| = \left| \frac{L-1}{2r} \right|$。 - 代入 $p_s(s) = p_r(r) \left| \frac{dr}{ds} \right|$: - $p_s(s) = \left( \frac{2r}{(L-1)^2} \right) \left| \frac{L-1}{2r} \right| = \frac{1}{L-1}$ - **驗證結果:** 輸出的 PDF $p_s(s)$ 確實是一個均勻分佈。 #### 離散形式 (Discrete Form - The Practical Implementation) - 在數位影像中,我們處理的是離散的灰階值,因此 integral 變成 **summation**,PDF 變成標準化直方圖 $p_r(r_k) = \frac{n_k}{MN}$。 - **(Discrete CDF):** 連續轉換 $s = T(r)$ 的離散形式為: - $s_k = T(r_k) = (L-1) \sum_{j=0}^{k} p_r(r_j)$。 - **(Pixel Count Form):** 將 $p_r(r_j) = \frac{n_j}{MN}$ 代入,得到更實用的計算公式: - $s_k = \frac{(L-1)}{MN} \sum_{j=0}^{k} n_j$。 - (其中 $M \times N$ 是總像素數, $n_j$ 是灰階 $j$ 的像素數, $\sum n_j$ 是累積像素數)。 - **(Rounding):** 由於 $s_k$ 的計算結果通常是浮點數,但像素灰階必須是整數,因此需要將 $s_k$ 四捨五入 rounded 到 $[0, L-1]$ 範圍內最接近的整數。 #### 必考範例 (Discrete Example) - 假設一個 3-bit 影像 ($L=8$,灰階範圍 0-7),總像素 $MN = 4096$。 - **1. 原始直方圖 (Original Histogram) & PDF:** | $r_k$ | $p_r(r_k) = n_k / 4096$ | $n_k$ | |:-------:|:-----------------------:|:-----:| | $r_0=0$ | 0.19 | 790 | | $r_1=1$ | 0.25 | 1023 | | $r_2=2$ | 0.21 | 850 | | $r_3=3$ | 0.16 | 656 | | $r_4=4$ | 0.08 | 329 | | $r_5=5$ | 0.06 | 245 | | $r_6=6$ | 0.03 | 122 | | $r_7=7$ | 0.02 | 81 | - **2. 計算 $s_k$ (Discrete CDF):** 我們使用 $s_k = (L-1) \sum_{j=0}^{k} p_r(r_j)$,其中 $L-1 = 7$。 - $s_0 = 7 \times p_r(r_0) = 7 \times 0.19 = 1.33$。 - $s_1 = 7 \times (p_r(r_0) + p_r(r_1)) = 7 \times (0.19 + 0.25) = 7 \times 0.44 = 3.08$。 - $s_2 = 7 \times (0.19 + 0.25 + 0.21) = 7 \times 0.65 = 4.55$ - $s_3 = 7 \times (0.65 + 0.16) = 7 \times 0.81 = 5.67$ - $s_4 = 7 \times (0.81 + 0.08) = 7 \times 0.89 = 6.23$ - $s_5 = 7 \times (0.89 + 0.06) = 7 \times 0.95 = 6.65$ - $s_6 = 7 \times (0.95 + 0.03) = 7 \times 0.98 = 6.86$ - $s_7 = 7 \times (0.98 + 0.02) = 7 \times 1.00 = 7.00$ - **3. 四捨五入 (Rounding) & 映射 (Mapping):** - $s_0 = 1.33 \rightarrow \text{round}(1.33) = \mathbf{1}$。 - $s_1 = 3.08 \rightarrow \text{round}(3.08) = \mathbf{3}$。 - $s_2 = 4.55 \rightarrow \text{round}(4.55) = \mathbf{5}$。 - $s_3 = 5.67 \rightarrow \text{round}(5.67) = \mathbf{6}$。 - $s_4 = 6.23 \rightarrow \text{round}(6.23) = \mathbf{6}$。 - $s_5 = 6.65 \rightarrow \text{round(6.65)} = \mathbf{7}$。 - $s_6 = 6.86 \rightarrow \text{round(6.86)} = \mathbf{7}$。 - $s_7 = 7.00 \rightarrow \text{round(7.00)} = \mathbf{7}$。 - **4. 均化後的直方圖 (Equalized Histogram):** - (原始灰階為 0 的 790 個像素 $\rightarrow$ 映射到新灰階 1) - (原始灰階為 1 的 1023 個像素 $\rightarrow$ 映射到新灰階 3) - (原始灰階為 2 的 850 個像素 $\rightarrow$ 映射到新灰階 5) - (原始灰階為 3 的 656 個像素 $\rightarrow$ 映射到新灰階 6) - (原始灰階為 4 的 329 個像素 $\rightarrow$ 映射到新灰階 6) - (原始灰階為 5, 6, 7 的 (245+122+81) 個像素 $\rightarrow$ 映射到新灰階 7) - **注意:** 由於離散化和四捨五入,均化後的直方圖很少是**完美**均勻的,但它會更廣泛地分佈在整個灰階範圍內。 #### 3.3.3 Histogram Matching (會考!!!) - Histogram Matching 允許我們**指定**一個輸出影像擁有的特定直方圖形狀 **$p_z(z)$**。 - 將輸入影像和目標直方圖**兩者**都轉換為均勻分佈,然後建立它們之間的聯繫。 #### 推導過程 (The Derivation) 1. **Input Transform:** 讓 $r$ 為輸入影像的灰階,其 PDF 為 $p_r(r)$。我們對它進行直方圖均化(CDF 轉換): - $s = T(r) = (L-1) \int_{0}^{r} p_r(w) dw$ - 如我們所知,這個轉換會產生一個均勻分佈的 $s$。 2. **Target Transform:** 讓 $z$ 為目標(輸出)影像的灰階,其**指定**的 PDF 為 $p_z(z)$。我們也對**它**進行 CDF 轉換: - $s = G(z) = (L-1) \int_{0}^{z} p_z(t) dt$ - 這個轉換**同樣**會產生一個(理論上)與 $T(r)$ 相同的均勻分佈 $s$。 3. **Linking the Transforms:** 既然 $T(r)$ 和 $G(z)$ 都等於同一個均勻分佈 $s$,我們可以將它們相等: - $G(z) = T(r)$ 4. **Finding the Mapping:** 找到一個從 $r$ 到 $z$ 的映射。因此,我們對 $z$ 求解: - $z = G^{-1}[T(r)]$ - 這就是最終的**直方圖匹配轉換**。 #### 轉換流程 (Transformation Flow) - `Input Pixel (r)` $\xrightarrow{\text{T(r) (均化)}}$ `Uniform Value (s)` $\xrightarrow{G^{-1}(s) \text{ (反CDF)}}$ `Output Pixel (z)` #### 在實際的數位影像中,我們使用 **summation** 來代替 integral - **步驟 1: 計算輸入影像的 CDF (Compute Input CDF)** - 計算輸入影像的直方圖 $p_r(r_k)$。 - 計算其離散 CDF(即均化轉換 $T(r)$): - $s_k = T(r_k) = (L-1) \sum_{j=0}^{k} p_r(r_j)$ - 將計算出的 $s_k$ 值四捨五入 (round) 到 $[0, L-1]$ 範圍內的整數。 - **步驟 2: 計算目標直方圖的 CDF (Compute Target CDF)** - 獲取**指定**的目標直方圖 $p_z(z_q)$。 - 計算其離散 CDF(即轉換 $G(z)$): - $G(z_q) = (L-1) \sum_{i=0}^{q} p_z(z_i)$ - 將計算出的 $G(z_q)$ 值四捨五入到整數。 - **步驟 3: 建立映射 (Create the Mapping)** - 建立一個從 $s_k$ (步驟 1 的結果) 到 $z_q$ (步驟 2 的輸入) 的映射。 - 遍歷**每一個** $s_k$ 值 (從 $k=0$ 到 $L-1$): - 尋找一個 $z_q$ 值,使得 $G(z_q)$ **最接近** $s_k$。 - **規則:** $z_q = \arg \min_{z_j} \{ |s_k - G(z_j)| \}$ - (如果有多個 $z_q$ 同樣接近,按照慣例選擇最小的 $z_q$ 值)。 - 儲存這個 $s_k \rightarrow z_q$ 的映射。 - **步驟 4: 應用映射 (Apply the Mapping)** - 遍歷原始影像中的每一個像素: 1. 取得該像素的灰階值 $r_k$。 2. 使用步驟 1 的 $T(r_k)$ 找到其均化值 $s_k$。 3. 使用步驟 3 的 $s_k \rightarrow z_q$ 映射表,找到 $s_k$ 對應的 $z_q$。 4. 將該像素的新值設為 $z_q$。 - (註:實際上,步驟 1 和 3 可以合併,直接建立一個 $r_k \rightarrow z_q$ 的映射表)。 #### 此範例承接了直方圖均化(Page 37)的結果 **A. 已知條件 (Given)** - **1. 輸入影像 $r_k$ (來自 Page 37):** - $r_k$ 值: (0, 1, 2, 3, 4, 5, 6, 7) - **$s_k = T(r_k)$ (步驟 1 的結果,已均化並四捨五入):** - **$s_k$ 值: (1, 3, 5, 6, 6, 7, 7, 7)** - **2. 指定直方圖 $p_z(z_q)$ (來自 Fig 3.22b):** | $z_q$ (灰階) | $p_z(z_q)$ (指定機率) | | :---: | :---: | | 0 | 0.00 | | 1 | 0.00 | | 2 | 0.00 | | 3 | 0.15 | | 4 | 0.20 | | 5 | 0.30 | | 6 | 0.20 | | 7 | 0.15 | **B. 計算過程 (Calculation)** - **步驟 2: 計算目標 CDF $G(z_q)$** - 使用公式 $G(z_q) = (L-1) \sum_{i=0}^{q} p_z(z_i)$,其中 $L-1 = 7$。 - $G(z_0) = 7 \times (0.00) = 0.00 \rightarrow \mathbf{0}$ - $G(z_1) = 7 \times (0.00 + 0.00) = 0.00 \rightarrow \mathbf{0}$ - $G(z_2) = 7 \times (0.00 + 0.00 + 0.00) = 0.00 \rightarrow \mathbf{0}$ - $G(z_3) = 7 \times (0.00 + ... + 0.15) = 1.05 \rightarrow \mathbf{1}$ - $G(z_4) = 7 \times (0.15 + 0.20) = 7 \times (0.35) = 2.45 \rightarrow \mathbf{2}$ - $G(z_5) = 7 \times (0.35 + 0.30) = 7 \times (0.65) = 4.55 \rightarrow \mathbf{5}$ - $G(z_6) = 7 \times (0.65 + 0.20) = 7 \times (0.85) = 5.95 \rightarrow \mathbf{6}$ - $G(z_7) = 7 \times (0.85 + 0.15) = 7 \times (1.00) = 7.00 \rightarrow \mathbf{7}$ - **目標 CDF (四捨五入):$G(z_q) = \{0, 0, 0, 1, 2, 5, 6, 7\}$** - **步驟 3: 建立 $s_k \rightarrow z_q$ 映射** - 我們要將 $s_k = \{1, 3, 5, 6, 6, 7, 7, 7\}$ 映射到 $z_q$。 - 我們尋找 $z_q$ 值,使其 $G(z_q)$(步驟 2 的結果)最接近 $s_k$。 | $s_k$ (來自步驟 1) | 最接近的 $G(z_q)$ (來自步驟 2) | 對應的 $z_q$ | | :---: | :---: | :---: | | $s_k=1$ | $G(z_3)=1$ | **$z_q=3$** | | $s_k=3$ | $G(z_4)=2$ (距離 1) (比 $G(z_5)=5$ 距離 2 更近) | **$z_q=4$** | | $s_k=5$ | $G(z_5)=5$ (完美匹配) | **$z_q=5$** | | $s_k=6$ | $G(z_6)=6$ (完美匹配) | **$z_q=6$** | | $s_k=6$ | $G(z_6)=6$ (完美匹配) | **$z_q=6$** | | $s_k=7$ | $G(z_7)=7$ (完美匹配) | **$z_q=7$** | | $s_k=7$ | $G(z_7)=7$ (完美匹配) | **$z_q=7$** | | $s_k=7$ | $G(z_7)=7$ (完美匹配) | **$z_q=7$** | - **步驟 4: 應用 (合併 $r_k \rightarrow z_q$ 映射)** - 將步驟 1 的 $r_k$ 與步驟 3 的 $z_q$ 直接對應起來: | $r_k$ (原始灰階) | $\rightarrow$ $s_k$ (均化) | $\rightarrow$ $z_q$ (最終灰階) | | :---: | :---: | :---: | | 0 | 1 | **3** | | 1 | 3 | **4** | | 2 | 5 | **5** | | 3 | 6 | **6** | | 4 | 6 | **6** | | 5 | 7 | **7** | | 6 | 7 | **7** | | 7 | 7 | **7** | **C. 結果 (Result - Fig 3.22d)** - 原始影像中 $p_r(0)=0.19$ 的像素 $\rightarrow$ 全部變為灰階 3。 - 原始影像中 $p_r(1)=0.25$ 的像素 $\rightarrow$ 全部變為灰階 4。 - 原始影像中 $p_r(2)=0.21$ 的像素 $\rightarrow$ 全部變為灰階 5。 - 原始影像中 $p_r(3)=0.16$ 和 $p_r(4)=0.08$ 的像素 $\rightarrow$ 全部變為灰階 6。 - 原始影像中 $p_r(5)=0.06$, $p_r(6)=0.03$, $p_r(7)=0.02$ 的像素 $\rightarrow$ 全部變為灰階 7。 - **最終的實際直方圖 (Actual Histogram) $p_z(z_k)$:** - $p_z(3) = p_r(0) = 0.19$ - $p_z(4) = p_r(1) = 0.25$ - $p_z(5) = p_r(2) = 0.21$ - $p_z(6) = p_r(3) + p_r(4) = 0.16 + 0.08 = 0.24$ - $p_z(7) = p_r(5) + p_r(6) + p_r(7) = 0.06 + 0.03 + 0.02 = 0.11$ - **結論:** 得到的實際直方圖 (Fig 3.22d) 與我們指定的目標直方圖 (Fig 3.22b) 非常接近,證明了此方法的有效性。 ### 3.3.4 Local Histogram Processing - 像直方圖均化這樣的**全域 (global)** 方法是基於整個影像的直方圖,適用於整體增強。 - 但當影像不同區域的明暗分佈差異很大時(例如,一張同時有陰影和陽光直射的臉),全域處理會顧此失彼,無法增強所有區域的細節。 #### 解決方案 (Solution) - 在影像中的每一個像素上,定義一個鄰域 (neighborhood),例如 3x3 或 5x5 的方框。 - **步驟 (Steps):** 1. 將鄰域的中心移動到某個像素 (x, y)。 2. 計算**該鄰域內**的直方圖。 3. 根據這個**區域直方圖 (local histogram)** 進行均化或匹配,得到一個區域轉換函式。 4. 僅使用此函式來映射鄰域**中心**像素 (x, y) 的新灰階值。 5. 將鄰域中心移動到下一個像素,重複此過程。 ![image](https://hackmd.io/_uploads/S1EjvTa0lx.png) - **結果 (Result):** - 這種方法可以顯著增強局部區域的細節,但計算成本非常高。 ### 3.3.5 Using Histogram Statistics #### Concept - 影像直方圖的統計數據可以描述影像的外觀: - **平均值 (Mean):** $m = \sum_{i=0}^{L-1}r_i p(r_i)$ - (Measures the average gray-level value, corresponding to brightness)。 - **變異數 (Variance):** $\sigma^2 = \mu_2(r) = \sum_{i=0}^{L-1}(r_i - m)^2 p(r_i)$ - (Measures the spread of gray levels, corresponding to contrast)。 #### Local Enhancement - 我們可以在一個鄰域 $S_{xy}$ 內計算 **local mean** $m_{S_{xy}}$ 和 **local variance** $\sigma_{S_{xy}}^2$。 - 透過這些統計數據,我們可以有條件地增強像素。 - **Enhancement Formula** - $g(x,y) = \begin{cases} E \cdot f(x,y) & \text{if } m_{S_{xy}} \le k_0 m_G,\ k_1 \sigma_G \le \sigma_{S_{xy}} \le k_2 \sigma_G \\ f(x,y) & \text{otherwise} \end{cases}$ - **Explanation** - 只有當一個像素 (x,y) 位於一個**暗區** (local mean $m_{S_{xy}}$ 低於 global mean $m_G$) **且** 該區域具有**足夠的細節** (local variance $\sigma_{S_{xy}}$ 在 global variance $\sigma_G$ 的特定範圍內) 時,才將該像素值乘以一個常數 $E$ (例如 $E=4.0$) 來增強它。 - 否則,保持像素不變。 ## 3.4 Fundamentals of Spatial Filtering ### 3.4.1 What is Spatial Filtering? - 空間濾波涉及使用一個小的子影像(稱為**mask**、**kernel**、**filter**、**template**、**window**)。 - 這個遮罩會在影像上逐像素滑動。在影像的每一個點 (x, y) 上,濾波器的響應 (response) 是透過遮罩係數 (coefficients) 與遮罩下方的影像像素值進行運算來計算的。 ### 3.4.2 Linear Spatial Filtering - 線性濾波的響應是透過將濾波器係數 $w(s,t)$ 與其對應的影像像素 $f(x+s, y+t)$ 相乘後求和得到的。 #### 公式 - $g(x,y) = \sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x+s,y+t)$ - 線性空間濾波常被稱為「將遮罩與影像進行摺積 (convolving a mask with an image)」。 - 因此,濾波器遮罩也常被稱為** convolution mask** 或 **convolution kernel**。 #### 向量表示法 - 濾波操作可以簡化為兩個向量的內積 (dot product): $R = w^T z$。 ### 3.4.3 相關 (Correlation) vs. 摺積 (Convolution) #### 相關 (Correlation) - 這就是上一節中**線性濾波**的直接定義。 - **公式:** $w(x,y)\otimes^{\wedge}f(x,y)=\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x+s,y+t)$ #### 摺積 (Convolution) - **公式:** $w(x,y)*f(x,y)=\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x-s,y-t)$ - **關鍵差異:** 摺積在運算前,會先將濾波器 $w$ 旋轉 180 度(即 $x$ 軸和 $y$ 軸都翻轉)。 #### 特性 (Properties) - 摺積滿足**交換律 (Commutative)** ($f*g = g*f$) 和**結合律 (Associative)** ($f*(g*h) = (f*g)*h$)。 - 相關則不滿足這些特性。 - 兩者都滿足**分配律 (Distributive)** ($f*(g+h) = f*g + f*h$)。 ![image](https://hackmd.io/_uploads/HJBg1CpAxe.png) ![image](https://hackmd.io/_uploads/BkDLk06Rge.png) ### 3.4.4 Example Kernels #### 平滑核 (Smoothing Kernels) - **方框核 (Box Kernel):** 一個所有係數皆相等的均值濾波器。 - **高斯核 (Gaussian Kernel):** 一個加權均值濾波器,權重由高斯函式決定。 #### 高斯核 (Gaussian Kernel) - **公式:** $w(s,t) = G(s,t) = Ke^{-\frac{s^{2}+t^{2}}{2\sigma^{2}}}$。 - 離散的核心是透過對這個連續函式採樣生成的。 (看不懂下圖 呵) ![image](https://hackmd.io/_uploads/rJFX-AT0eg.png) (Lowpass = Low-frequency pass,模糊非邊界...等高頻細節) ![image](https://hackmd.io/_uploads/Hk9Sb0TRxe.png) ### 3.4.5 Padding #### 當濾波器中心靠近影像邊界時,遮罩的一部分會超出影像範圍。處理方法包括: - **(Zero Padding):** 用 0 填充影像外部。 - **(Mirror Padding):** 以影像邊界為鏡像來填充外部。 - **(Replicate Padding):** 複製影像邊界的像素值來填充外部。 ## 3.5 Smoothing Spatial Filters - 平滑濾波器的輸出(響應)是濾波器遮罩鄰域內像素的平均值。 - 這些濾波器也常被稱為**均值濾波器 (averaging filters)** 或**低通濾波器 (lowpass filters)**。 - **範例 - 3x3 平滑核 (Example 3x3 Smoothing Kernels):** - **(a) 方框核 (Box Kernel) / 非加權均值:** - $R = \frac{1}{9}\sum_{i=1}^{9}z_{i}$ - 遮罩:$\frac{1}{9} \times \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix}$ - **(b) 加權均值核 (Weighted Average Kernel):** - 遮罩:$\frac{1}{16} \times \begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \end{bmatrix}$ - 每個遮罩前的常數乘數,等於 1 除以其係數的總和,這是計算平均值所必需的。 ### 3.5.1 Weighted Average Filter - 對一個 $M \times N$ 影像使用一個 $m \times n$ (m, n 為奇數) 加權平均濾波器的一般實作公式為: - $g(x,y)=\frac{\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x+s,y+t)}{\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)}$ ### 3.5.2 Examples of Linear Smoothing ![image](https://hackmd.io/_uploads/rk7shAaRgg.png) - 展示使用不同大小(如 $m=3, 5, 9, 15, 35$)的方框均值濾波器(Box Kernel)對影像進行平滑處理的結果。 ![image](https://hackmd.io/_uploads/Hktph06All.png) - a. 來自哈伯太空望遠鏡的原始影像。 - b. 使用 $15 \times 15$ 均值遮罩濾波後的影像。 - c. 對 b. 進行閾值處理 (thresholding) 後的結果。 ### 3.5.3 Order-Statistics Filters - 這類濾波器是**非線性 (nonlinear)** 空間濾波器。 - 它們的響應基於濾波器所包圍影像區域中的像素**排序 (ordering / ranking)**。 - 然後用排序結果所決定的值來取代中心像素的值。 #### 中值濾波器 (Median Filter) - 是一種非線性操作 (nonlinear operation)。 - 對於**脈衝雜訊 (impulse noise)**(即椒鹽雜訊)特別有效。 - 濾波器通常**不會**產生新的像素值(輸出值總是來自鄰域中的某個原始值)。 - 其他流行的順序統計濾波器還包括**最大值 (max) 濾波器**和**最小值 (min) 濾波器**。 ![image](https://hackmd.io/_uploads/r1SnAA6Rll.png) - a. 一張被**椒鹽雜訊 (salt-and-pepper noise)** 污染的電路板 X 光影像。 - b. 使用 $3 \times 3$ **均值遮罩**降噪的結果(雜訊被模糊化)。 - c. 使用 $3 \times 3$ **中值濾波器**降噪的結果(雜訊被有效去除)。 ## 3.6 Sharpening Spatial Filters ### 3.6.1 Objective - 銳利化的主要目的是突顯影像中的精細細節。 - 或是增強那些已經變得模糊的細節。 ### 3.6.2 Basis: Derivatives - 影像銳利化是透過**微分**來達成的。 #### 一階導數 (First Derivative) - 在灰階恆定的平坦區域,其值必須為零。 - 在灰階階躍 (step) 或斜坡 (ramp) 的起始點,其值必須不為零。 - 在灰階斜坡上,其值必須不為零。 - 1D 離散定義:$\frac{\partial f}{\partial x} = f(x+1)-f(x)$。 #### 二階導數 (Second Derivative) - 在灰階恆定的平坦區域,其值必須為零。 - 在灰階階躍或斜坡的起始點和結束點,其值必須不為零。 - 在斜率恆定的灰階斜坡上,其值必須為零。 - 1D 離散定義:$\frac{\partial^{2}f}{{\partial x}^{2}} = f(x+1)+f(x-1)-2f(x)$。 #### 關鍵特性#### - 二階導數在突顯精細細節(細線、孤立點)方面比一階導數更有效。 (必考圖!!!) ![image](https://hackmd.io/_uploads/ryHfWyRAxl.png) ### 3.6.3 二階導數:The Laplacian #### 概念 (Concept) - 這是一種基於二階導數的銳利化方法。 - 最簡單的**等向性 (isotropic)**(旋轉不變性)導數運算子是**拉普拉斯 (Laplacian)**。 - 拉普拉斯是一個**線性運算子 (linear operator)**。 #### 2D Definition - $\nabla^{2}f = \frac{\partial^{2}f}{{\partial x}^{2}} + \frac{\partial^{2}f}{\partial y^{2}}$。 #### 離散形式 (Discrete Form):** - x 方向二階導數:$\frac{\partial^{2}f}{\partial^{2}x^{2}} = f(x+1,y)+f(x-1,y)-2f(x,y)$。 - y 方向二階導數:$\frac{d^{2}f}{d^{2}y^{2}}=f(x,y+1)+f(x,y-1)-2f(x,y)$。 - 將兩者相加,得到 2D 拉普拉斯的離散實作: - $\nabla^{2}f = [f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)] - 4f(x,y)$。 #### 拉普拉斯遮罩 (Laplacian Masks):** - 用於實作上述 $\nabla^{2}f$ 的濾波器遮罩: - a. $\begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix}$ - b. $\begin{bmatrix} 1 & 1 & 1 \\ 1 & -8 & 1 \\ 1 & 1 & 1 \end{bmatrix}$ (包含對角線) - c. $\begin{bmatrix} 0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0 \end{bmatrix}$ (另一種常見形式) - d. $\begin{bmatrix} -1 & -1 & -1 \\ -1 & 8 & -1 \\ -1 & -1 & -1 \end{bmatrix}$ (另一種常見形式) #### Enhancement Formula - 拉普拉斯銳利化是將拉普拉斯影像(二階導數的結果)加回(或減去)原始影像。 - $g(x,y)=f(x,y)+c[\nabla^{2}f(x,y)]$ - $c$ 的值(+1 或 -1)取決於所使用的遮罩中心是正或負。 - 如果使用遮罩 a. 或 b.(中心為負),$c$ = -1,使公式變為 $f(x,y) - \nabla^{2}f(x,y)$。 - 如果使用遮罩 c. 或 d.(中心為正),$c$ = +1,使公式變為 $f(x,y) + \nabla^{2}f(x,y)$。 ![image](https://hackmd.io/_uploads/HyChzkA0ex.png) ### 3.6.4 Unsharp Masking and High-Boost Filtering (看圖比較懂) #### Concept - 這是出版業行之有年的銳利化技術。 - 過程是從原始影像 $f(x,y)$ 中減去一個**模糊版本** $\overline{f}(x,y)$。 #### Steps 1. **模糊 (Blur):** 模糊原始影像,得到 $\overline{f}(x,y)$。 2. **計算遮罩 (Mask):** 從原始影像中減去模糊影像,得到「非銳利遮罩」 $g_{mask}(x,y)$。 - $g_{mask}(x,y)=f(x,y)-\overline{f}(x,y)$。 3. **加回 (Add):** 將遮罩(或其加權版本)加回原始影像。 - $g(x,y)=f(x,y)+k \cdot g_{mask}(x,y)$。 ![image](https://hackmd.io/_uploads/H1foQ1R0gg.png) #### Types - 當 $k=1$ 時,此過程稱為**非銳利遮罩 (Unsharp Masking)**。 - 當 $k>1$ 時(例如 $k=4.5$),此過程稱為**高提升濾波 (High-Boost Filtering)**。 ![image](https://hackmd.io/_uploads/S18h7100gl.png) ### 3.6.5 一階導數:The Gradient #### Concept - 梯度 (Gradient) 是一個指向灰階變化率最快方向的 2D 向量。 - $\nabla f=grad(f)=[\begin{matrix}g_{x}\\ g_{y}\end{matrix}]=[\begin{matrix}\frac{\partial f}{\partial x}\\ \frac{\partial f}{\partial y}\end{matrix}]$。 #### Magnitude - 梯度的**大小 (magnitude)**(即向量的長度) $M(x,y)$ 表示了在 (x, y) 點的灰階變化強度,常用於邊緣偵測。 - $M(x,y)=mag(\nabla f)=\sqrt{{g_{x}}^{2}+{g_{y}}^{2}}$。 - 為了簡化計算,常用絕對值總和來近似: - $M(x,y)\approx|g_{x}|+|g_{y}|$。 #### Operators - **Roberts 交叉梯度 (Roberts Operators):** - $g_{x}=(z_{9}-z_{5})$ - $g_{y}=(z_{8}-z_{6})$ - 對應的遮罩為 $\begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix}$ 和 $\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}$。 - **Sobel 運算子 (Sobel Operators):** - 這是一種常用的 3x3 運算子。 - $g_{x}=(z_{7}+2z_{8}+z_{9})-(z_{1}+2z_{2}+z_{3})$。 - $g_{y}=(z_{3}+2z_{6}+z_{9})-(z_{1}+2z_{4}+z_{7})$。 - 對應的遮罩為: - $g_x$: $\begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix}$ - $g_y$: $\begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix}$ - Sobel 運算子在計算導數的同時也進行了平滑(例如 $z_8$ 的權重為 2),因此對雜訊的抗干擾能力較強。 ![image](https://hackmd.io/_uploads/BkxeBJRCee.png) - Sobel 梯度影像,它成功地突顯了鏡片的邊緣和缺陷。 ## 3.7 Frequency Domain Filter ### 3.7.1 Filters - **低通濾波器 (Lowpass filter):** - **(Passband):** 允許低頻通過。 - **(Stopband):** 阻擋高頻。 - **(Effect):** 平滑、模糊。 - **高通濾波器 (Highpass filter):** - **(Stopband):** 阻擋低頻。 - **(Passband):** 允許高頻通過。 - **(Effect):** 銳利化、邊緣偵測。 - **帶斥濾波器 (Bandreject filter):** - **(Stopband):** 阻擋特定範圍的中頻。 - **(Passband):** 允許低頻和高頻通過。 - **帶通濾波器 (Bandpass filter):** - **(Passband):** 僅允許特定範圍的中頻通過。 - **(Stopband):** 阻擋低頻和高頻。 ![image](https://hackmd.io/_uploads/S1RZ81A0gl.png) ### 3.7.2 Spatial Domain (計算) - 在空間域(即影像本身),這些濾波器核 (kernel) 之間有著密切的數學關係。 - 我們可以使用**單位脈衝 (unit impulse)** $\delta(x,y)$(一個中心為1、其餘為0的影像,代表原始影像)和**低通核 (lowpass kernel)** $lp(x,y)$(例如均值核或高斯核)來建構其他濾波器。 - **高通核 (Highpass Kernel):** - $hp(x,y) = \delta(x,y) - lp(x,y)$ - **(說明):** 這正是**非銳利遮罩 (Unsharp Masking)** 的核心概念。 - `高通影像 (細節)` = `原始影像` - `低通影像 (模糊版本)`。 - **帶斥核 (Bandreject Kernel):** - $br(x,y) = lp_1(x,y) + hp_2(x,y)$ - (一個帶斥濾波器可以由一個低通核和一個高通核組合而成)。 - **帶通核 (Bandpass Kernel):** - $bp(x,y) = \delta(x,y) - br(x,y)$ - (一個帶通濾波器可以從原始影像中減去一個帶斥濾波器的結果得到)。 - 通常不會只使用單一種增強技術。為了達到最佳的影像效果,往往會將本章中提到的多種方法結合起來使用。 ![image](https://hackmd.io/_uploads/HJj1_k00lx.png) # Chapter 4 *** 挺抽象,可以YT找影片看 *** ## 4.1 Background ### 4.1.1 傅立葉級數 (Fourier Series) - 任何週期性函數 (Periodic functions) 都可以表示為不同頻率的正弦 (sines) 和/或餘弦 (cosines) 的總和。 ### 4.1.2 傅立葉轉換 (Fourier Transform): - 非週期性函數 (Non-periodic functions) 可以表示為正弦和/或餘弦乘以一個權重函數的積分。 - 任何以此方式表示的函數都可以通過反向過程 (inverse process) 重建回來。 ![image](https://hackmd.io/_uploads/BJJ6stlk-l.png) ## 4.2 Preliminary Concepts ### 4.2.1 Complex Numbers #### 定義: $C = R + jI$ - $R$ 是實部 (Real part),$I$ 是虛部 (Imaginary part)。 - $j = \sqrt{-1}$ - **共軛複數 (Conjugate):** $C^* = R - jI$ #### 極座標表示 (Polar Coordinates) - $C = |C|(cos~\theta + j~sin~\theta)$ - **尤拉公式 (Euler's formula):** $e^{j\theta} = cos~\theta + j~sin~\theta$ - 因此,極座標可寫為: $C = |C|e^{j\theta}$ #### 幅度 (Magnitude) - $|C| = \sqrt{R^2 + I^2}$ #### 相位角 (Angle) - $\theta = arctan(I/R)$ ### 4.2.2 傅立葉級數 (Fourier Series) #### 函數 $f(t)$ - $f(t) = \sum_{n=-\infty}^{\infty} c_n e^{j\frac{2\pi n}{T}t}$ #### 係數 $c_n$ - $c_n = \frac{1}{T}\int_{-T/2}^{T/2} f(t) e^{-j\frac{2\pi n}{T}t} dt$ ### 4.2.3 脈衝及其篩選特性 (Impulses and Their Sifting Property) #### 連續脈衝 (Continuous Impulse) / 狄拉克δ函數 (Dirac Delta) - $\delta(t) = \begin{cases} \infty & \text{if } t=0 \\ 0 & \text{if } t \ne 0 \end{cases}$ - 且滿足 $\int_{-\infty}^{\infty} \delta(t) dt = 1$ - **篩選特性 (Sifting Property):** - $\int_{-\infty}^{\infty} f(t)\delta(t) dt = f(0)$ - $\int_{-\infty}^{\infty} f(t)\delta(t-t_0) dt = f(t_0)$ - #### 離散脈衝 (Discrete Impulse) - $\delta(x) = \begin{cases} 1 & \text{if } x=0 \\ 0 & \text{if } x \ne 0 \end{cases}$ - $\sum_{x=-\infty}^{\infty} \delta(x) = 1$ - **篩選特性 (Sifting Property):** - $\sum_{x=-\infty}^{\infty} f(x)\delta(x) = f(0)$ - $\sum_{x=-\infty}^{\infty} f(x)\delta(x-x_0) = f(x_0)$ ![image](https://hackmd.io/_uploads/B11eCKeybx.png) #### 脈衝串 (Impulse Train) - 是一系列相隔 $\Delta T$ 的週期性脈衝的總和。 - $S_{\Delta T}(t) = \sum_{n=-\infty}^{\infty} \delta(t-n\Delta T)$ ![image](https://hackmd.io/_uploads/HJbJCFlkWx.png) ### 4.2.4 單一連續變數的傅立葉轉換 (Fourier Transform of One Continuous Variable) #### 傅立葉轉換 (Forward Transform) - $F(\mu) = \int_{-\infty}^{\infty} f(t) e^{-j2\pi\mu t} dt$ #### 反傅立葉轉換 (Inverse Transform) - $f(t) = \int_{-\infty}^{\infty} F(\mu) e^{j2\pi\mu t} d\mu$ - 轉換後的變數 $\mu$ 是頻率,因此 $F(\mu)$ 被稱為在**頻率域 (frequency domain)**。 #### 範例 (方波轉換) - 一個寬度為 $W$、高度為 $A$ 的方波函數。 - 其傅立葉轉換為一個 **sinc 函數**: $F(\mu) = AW \frac{sin(\pi\mu W)}{(\pi\mu W)}$ - $sinc(m) = \frac{sin(\pi m)}{(\pi m)}$ ![image](https://hackmd.io/_uploads/Sk5kk9g1bx.png) #### 傅立葉頻譜 (Fourier Spectrum) - $|F(\mu)| = AW |\frac{sin(\pi\mu W)}{(\pi\mu W)}|$ ![image](https://hackmd.io/_uploads/HkBdy9gkZe.png) #### 脈衝的轉換 - $\mathfrak{S}\{\delta(t)\} = 1$ (原點的脈衝在頻域中是一個常數) - $\mathfrak{S}\{\delta(t-t_0)\} = e^{-j2\pi\mu t_0}$ #### 脈衝串的轉換 - 脈衝串的傅立葉轉換**也是一個脈衝串**。 - $\mathfrak{S}\{s_{\Delta T}(t)\} = S(\mu) = \frac{1}{\Delta T}\sum_{n=-\infty}^{\infty} \delta(\mu-\frac{n}{\Delta T})$ ### 4.2.5 摺積 (Convolution) #### 定義 - $f(t) * h(t) = \int_{-\infty}^{\infty} f(\tau)h(t-\tau) d\tau$ #### 摺積定理 (Convolution Theorem) - 空間域的摺積 (spatial domain convolution) 等同於頻率域的乘積 (frequency domain multiplication)。 - $f(t) * h(t) \Leftrightarrow H(\mu)F(\mu)$ #### 定理的另一半 - 空間域的乘積等同於頻率域的摺積。 - $f(t)h(t) \Leftrightarrow H(\mu) * F(\mu)$ ## 4.3 取樣與取樣函數的傅立葉轉換 (Sampling and the Fourier Transform of Sampled Functions) ### 4.3.1 取樣 (Sampling) #### 取樣(採樣)過程 - 模型化為一個連續函數 $f(t)$ 與一個脈衝串 $S_{\Delta T}(t)$ 相乘。 #### 取樣後的函數 - - $\tilde{f}(t) = f(t)S_{\Delta T}(t) = \sum_{n=-\infty}^{\infty} f(t)\delta(t-n\Delta T)$ #### 每個取樣點 $f_k$ 的值 - 透過積分和脈衝的篩選特性得到的: - $f_k = \int_{-\infty}^{\infty} f(t)\delta(t-k\Delta T)dt = f(k\Delta T)$ ![image](https://hackmd.io/_uploads/BytXPqxyZe.png) ### 4.3.2 取樣函數的傅立葉轉換 (The Fourier Transform of Sampled Functions) - 取樣後函數 $\tilde{f}(t)$ 的傅立葉轉換為 $\tilde{F}(\mu)$。 #### 摺積定理 (空間域的乘積等於頻率域的摺積) - $\tilde{F}(\mu) = \mathfrak{S}\{f(t)s_{\Delta T}(t)\} = F(\mu) * S(\mu)$ - 其中 $F(\mu)$ 是 $f(t)$ 的轉換,$S(\mu)$ 是脈衝串的轉換。 - $\tilde{F}(\mu) = \frac{1}{\Delta T}\sum_{n=-\infty}^{\infty} F(\mu-\frac{n}{\Delta T})$ - 這個結果表明,一個取樣函數的傅立葉轉換,會是原始函數 $F(\mu)$ 的**無限、週期性重複**,重複的週期為 $1/\Delta T$。 ### 4.3.3 取樣定理 (The Sampling Theorem) #### 頻寬限制函數 (Band-limited function) - 如果一個函數 $f(t)$ 的傅立葉轉換 $F(\mu)$ 在一個有限的頻率範圍 $[-\mu_{max}, \mu_{max}]$ 之外為零,則稱其為頻寬限制函數。 #### 恢復 (Reconstruction) - 為了能從取樣後的數據 $\tilde{F}(\mu)$ 完美地恢復 $F(\mu)$,週期性的 $F(\mu)$ 副本之間必須沒有重疊。 #### 取樣定理 (Nyquist-Shannon) - 恢復的條件是取樣率 $(1/\Delta T)$ 必須**大於**原始訊號最高頻率的兩倍。 - $\frac{1}{\Delta T} > 2\mu_{max}$ #### 過取樣 (over-sampling)** - **臨界取樣 (critically-sampled):** $1/\Delta T = 2\mu_{max}$ - **取樣不足 (under-sampling):** $1/\Delta T < 2\mu_{max}$ ![image](https://hackmd.io/_uploads/B1x6d5gJWe.png) ### 4.3.4 混疊 (Aliasing) - 當發生**取樣不足**時 ($1/\Delta T < 2\mu_{max}$),在頻率域中,$F(\mu)$ 的週期性副本會發生重疊 (如 Fig. 4.9c 所示)。 - 這種重疊會導致高頻訊號被誤認為是低頻訊號,從而**汙染**了原始訊號的頻譜。 - 這種現象稱為**頻率混疊 (frequency aliasing)** 或簡稱**混疊 (aliasing)**。 - 由於混疊,我們無法再使用一個理想的低通濾波器來完美地恢復 $F(\mu)$。 - **重點:** 由於沒有一個**有限持續時間**的函數可以是**頻寬完全受限**的,因此在實際應用中,混疊總是存在的。 ![image](https://hackmd.io/_uploads/S1WMt9xy-x.png) ### 4.3.5 從取樣數據重建函數 (Function Reconstruction) #### 理想低通濾波器 (ideal lowpass filter) - $H(\mu)$ 從 $\tilde{F}(\mu)$ 中提取 $F(\mu)$: - $F(\mu) = H(\mu)\tilde{F}(\mu)$ - 在空間域中,這等同於 $f(t) = h(t) * \tilde{f}(t)$。 - 完整的重建公式(惠特克-香農插值公式)顯示 $f(t)$ 可以由其取樣值 $f(n\Delta T)$ 和 sinc 函數的無窮級數來表示。 ## 4.4 單一變數的離散傅立葉轉換 (The Discrete Fourier Transform (DFT) of One Variable) ### 4.4.1 從連續轉換中獲取 DFT - 連續傅立葉轉換 $\tilde{F}(\mu)$ 是週期的,週期為 $1/\Delta T$。 - 我們在 $\tilde{F}(\mu)$ 的一個週期內(例如 0 到 $1/\Delta T$)取 $M$ 個等距樣本。 - 取樣的頻率點為:$\mu = \frac{m}{M\Delta T}$,其中 $m = 0, 1, 2, ..., M-1$。 - 將此 $\mu$ 代入 $\tilde{F}(\mu)$ 的積分式,可導出: #### 離散傅立葉轉換 (DFT) - $F(u) = \sum_{x=0}^{M-1} f(x) e^{-j2\pi ux/M}$ - 其中 $u = 0, 1, 2, ..., M-1$。 #### 反離散傅立葉轉換 (IDFT) - $f(x) = \frac{1}{M} \sum_{u=0}^{M-1} F(u) e^{j2\pi ux/M}$ - 其中 $x = 0, 1, 2, ..., M-1$。 #### 週期性 (Periodicity) - DFT $F(u)$ 和 IDFT $f(x)$ 都是以 $M$ 為週期的無限週期函數。 - $F(u) = F(u + kM)$ - $f(x) = f(x + kM)$ #### 循環摺積 (Circular Convolution) - 由於 DFT 的週期性,離散域中的摺積是**循環**的。 - $f(x) * h(x) = \sum_{m=0}^{M-1} f(m)h(x-m)$ ### 4.4.2 取樣間隔和頻率間隔的關係 - 假設 $f(x)$ 是由 $M$ 個樣本組成,樣本間隔為 $\Delta T$。 #### 空間域總持續時間 (Duration) - $T = M\Delta T$ #### 頻率域間隔 (Frequency Spacing) - $\Delta u = \frac{1}{M\Delta T} = \frac{1}{T}$ #### 頻率域總範圍 (Frequency Range) - $\Omega = M\Delta u = \frac{1}{\Delta T}$ #### 關係 - 頻率間隔 $\Delta u$ (頻率解析度) 與總持續時間 $T$ 成反比。 - 總頻率範圍 $\Omega$ 與取樣間隔 $\Delta T$ (或取樣率) 成反比。 # Chapter 5 ## 壹、影像復原基礎與降級模型 ### 1. 復原定義與目標 * **影像復原 (Restoration)**:嘗試利用對降級現象的**先驗知識 (a priori knowledge)** 來重建或恢復已被降級的影像。 * **技術方向**:朝向對降級進行建模並應用逆向過程以恢復原始影像。 ### 2. 降級模型 * **空間域降級模型**: $$\mathbf{g(x, y) = h(x, y) \star f(x, y) + \eta(x, y)} \quad \text{(Eq. 5.1-1)}$$ * $f(x, y)$:輸入影像。 * $g(x, y)$:降級影像。 * $\eta(x, y)$:加性噪聲項 (additive noise term)。 * $h(x, y)$:降級函數的空間表示。 * $\star$:空間摺積 (spatial convolution)。 * **頻域降級模型**: $$\mathbf{G(u, v) = H(u, v) F(u, v) + N(u, v)} \quad \text{(Eq. 5.1-2)}$$ ### 3. 系統特性與降級函數 * **線性運算子 (Linear Operator)**:必須同時具備**可加性** (additivity, $H[f_1+f_2] = H[f_1] + H[f_2]$, Eq. 5.5-3) 和**齊次性** (homogeneity, $H[a f_1] = a H[f_1]$, Eq. 5.5-4)。 * **位置/空間不變性 (Position/Space Invariant)**:圖像中任意點的響應只取決於輸入在該點的值,與其位置無關 (Eq. 5.5-5)。 * **脈衝響應/PSF**:如果 $H$ 是線性且位置不變的,則 $h(x, y)$ 稱為脈衝響應 (impulse response),在光學中常稱為**點擴散函數 (PSF)**。 * **降級函數 $H$ 的估計方法**:(1) 觀察 (2) 實驗 (3) 數學建模。 * **盲解摺積 (Blind Deconvolution)**:使用**估計的**降級函數進行影像復原。 * **均勻線性運動模糊**:如果假設恆定運動 $x_0(t)=at/T, y_0(t)=0$,其降級函數 $H(u, v)$ 包含 $\sin(\pi u a / T) / (\pi u a / T)$ 項。 ## 貳、主要噪聲模型與統計特性 噪聲來源於影像採集或傳輸過程。 | 噪聲類型 | PDF 描述 | 平均值 $(\bar{z})$ 與方差 $(\sigma^2)$ | | :--- | :--- | :--- | | **高斯 (Gaussian/Normal)** | 鐘形曲線 (Eq. 5.2-1)。 | 由 $\bar{z}$ 和 $\sigma$ 定義。 | | **瑞利 (Rayleigh)** | PDF (Eq. 5.2-2)。 | $\bar{z} = a + \sqrt{b\pi/4}$ (Eq. 5.2-3), $\sigma^2 = b(4-\pi)/4$ (Eq. 5.2-4)。 | | **愛爾朗/伽馬 (Erlang/Gamma)** | PDF (Eq. 5.2-4)。 | $\bar{z} = b/a$ (Eq. 5.2-6), $\sigma^2 = b/a^2$ (Eq. 5.2-7)。 | | **指數 (Exponential)** | PDF (Eq. 5.2-8)。 | $\bar{z} = 1/a$ (Eq. 5.2-9), $\sigma^2 = 1/a^2$ (Eq. 5.2-10)。 | | **均勻 (Uniform)** | PDF 在 $[a, b]$ 之間恆定 (Eq. 5.2-11)。 | $\bar{z} = (a+b)/2$ (Eq. 5.2-12), $\sigma^2 = (b-a)^2/12$ (Eq. 5.2-13)。 | | **衝激 (Impulse/椒鹽噪聲)** | 在 $z=a$ 或 $z=b$ 處有離散機率 $P(z)$ (Eq. 5.2-14)。 | ## 參、僅噪聲存在的空間域濾波 當只有噪聲時 $g(x, y) = f(x, y) + \eta(x, y)$ (Eq. 5.3-1)。 ### 1. 均值濾波器 * **算術均值**:鄰域像素的平均值 (Eq. 5.3-3)。 * **幾何均值**:模糊程度比算術均值小。 * **諧波均值**:適用於**椒鹽噪聲 (Salt noise)**,但對胡椒噪聲 (Pepper noise) 失敗。 * **逆諧波均值 (Contraharmonic Mean)** (階數 $Q$) (Eq. 5.3-6): * $\mathbf{Q>0}$:消除**胡椒噪聲**。 * $\mathbf{Q<0}$:消除**椒鹽噪聲**。 * 使用前必須知道噪聲是暗 (胡椒) 還是亮 (椒鹽)。 ### 2. 順序統計濾波器 基於對鄰域像素的**排序 (ranking)**。 * **中值濾波器 (Median Filter)**:**非線性濾波**,對**衝激噪聲** (椒鹽) 非常有效 (Eq. 5.3-7)。重複應用會使影像模糊。 * **最大值濾波器 (Max Filter)**:減少**胡椒噪聲**。 * **最小值濾波器 (Min Filter)**:減少**椒鹽噪聲**。 * **中點濾波器 (Midpoint Filter)**:最適用於**隨機分佈噪聲**,如高斯或均勻噪聲 (Eq. 5.3-10)。 * **Alpha-trimmed Mean Filter**:刪除 $d/2$ 個最低和最高值後,對剩餘 $mn-d$ 像素求平均 (Eq. 5.3-11)。 ### 3. 自適應濾波器 * **自適應局部降噪濾波器** (Eq. 5.3-12): * $\hat{f} \approx g - \frac{\sigma_\eta^2}{\sigma_L^2} [g - m_L]$。 * 若噪聲方差 $\mathbf{\sigma_\eta^2 = 0}$,返回 $g(x, y)$。 * 若 $\mathbf{\sigma_L^2 = \sigma_\eta^2}$ (局部方差等於噪聲方差),返回算術均值。 * **自適應中值濾波器**:旨在**移除衝激噪聲**、提供平滑、**減少失真**並**保持銳利度和細節**。它會判斷中心點是否為衝激。 ## 肆、已知降級函數下的頻域復原 ### 1. 逆濾波 (Inverse Filtering) * **公式**:$\hat{F}(u, v) = G(u, v) / H(u, v)$。 * **主要缺陷**:未明確處理噪聲 $N(u, v)$。當 $H(u, v)$ 接近零時,噪聲比 $N(u, v)/H(u, v)$ 會**支配**估計結果,導致不穩定。 * **解決方法**:將濾波限制在接近原點(低頻)的範圍,對結果進行低通濾波。 ### 2. 維納濾波 (Wiener Filtering / 最小均方誤差, MSE) * **目標**:最小化 $\mathbf{f}$ 與 $\mathbf{\hat{f}}$ 之間的均方誤差 (MSE) (Eq. 5.8-4)。 * **實務近似公式** (假設噪聲和原始影像功率譜之比為常數 $K$): $$\mathbf{\hat{F}(u, v) = \left[ \frac{1}{H(u, v)} \frac{|H(u, v)|^2}{|H(u, v)|^2 + K} \right] G(u, v)} \quad \text{(Eq. 5.8-6)}$$ * $K$ 是一個必須**互動調整**才能獲得最佳值的指定常數。 ### 3. 約束最小平方法濾波 (Constrained Least Squares Filtering) * **先決條件**:只需知道噪聲的**均值**和**方差**。 * **原理**:最小化平滑度量 (如使用拉普拉斯函數 $P(u, v)$ 的傅立葉轉換) 並受到噪聲歐幾里德向量範數約束 (Eq. 5.9-3)。 * **頻域解**:涉及參數 $\gamma$,該參數必須調整以滿足約束條件。 ### 4. 幾何均值濾波 (Geometric Mean Filter) * 是維納濾波器的一種推廣。 * $\alpha=1$:**逆濾波器**。 * $\alpha=0, \beta=1$:**維納濾波器**。 * $\alpha=1/2, \beta=1$:**頻譜均衡濾波器 (Spectrum equalization filter)**。 ## 伍、投影影像重建 (Computed Tomography, CT) ### 1. 投影與 Radon 轉換 * **CT 掃描儀世代**:從 G1 發展至 G7 (G5: EBCT 消除機械運動;G6: 螺旋 CT;G7: 多層 CT)。 * **射線和 (Raysum)**:$f(x, y)$ 沿直線 $x \cos \theta + y \sin \theta = \rho$ 的積分 (Eq. 5.11-3)。 * **Radon 轉換**:用 $g(\rho, \theta)$ 表示所有 $\rho$ 和 $\theta$ 值下的射線和。 ### 2. 傅立葉切片定理 (Fourier-Slice Theorem) * **定理**:投影 $g(\rho, \theta)$ 相對於 $\rho$ 的 **1-D 傅立葉轉換** $G(\omega, \theta)$,等於影像 $f(x, y)$ 的 **2-D 傅立葉轉換** $F(u, v)$ 在一條穿過原點、角度為 $\theta$ 的切片上的值。 $$\mathbf{G(\omega, \theta) = F(\omega \cos \theta, \omega \sin \theta)} \quad \text{(Eq. 5.11-11)}$$ ### 3. 濾波反投影 (Filtered Backprojections) * **重建核心**:2-D 逆傅立葉轉換推導中包含一個 $|\omega|$ 項。 * **Ramp 濾波器**:$|\omega|$ 是一個 ramp 濾波器。由於其幅度延伸至 $+\infty$,**不可積分**,因此逆傅立葉轉換未定義。 * **實際處理**:需對 ramp 濾波器進行**窗口化 (windowing)** 處理,使其在定義的頻率區間外變為零 (例如使用 Hamming 或 Hann 窗口)。 * **最終重建**:重建的圖像 $f(x, y)$ 是所有投影角度的反投影結果的總和 (Eq. 5.11-18)。 * **扇形射束 (Fan-Beam Geometry)**:扇形射束投影 $p(\alpha, \beta)$ 可以轉換為對應的平行射束投影 $g(\rho, \theta)$ 進行處理 (Eq. 5.11-31)。 ```