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) #
-
由下往上畫 (Bottom-Up): 一般習慣是從左上角開始畫到右下角。但 BMP 預設是從圖片的「左下角」開始記錄,一路記錄到「右上角」,也就是像素是從下到上、從左到右儲存的
-
顏色是 BGR,不是 RGB: 常聽到的顏色排列是紅、綠、藍 (RGB),但 BMP 要反過來,它的順序是藍、綠、紅 (BGR)。
-
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 色彩系統
三大元素詳解 #
- 色相 (Hue)
- 定義: 顏色的種類(例如紅、黃、藍)。
- 數值: 用角度表示,範圍是 0° 到 360°。
- 舉例: 0° 對應紅色,120° 對應綠色,240° 對應藍色。
- 飽和度 (Saturation)
- 定義: 顏色的純度或鮮豔度(或彩度)
- 數值: 範圍是 0% 到 100%。
- 舉例: 100% 是最純的顏色;數值越低,顏色越黯淡,0% 時會變成灰階。
- 明度 (Value)
- 定義: 顏色的明暗程度。
- 數值: 範圍是 0% 到 100%。
- 舉例: 100% 代表該顏色最亮的狀態;0% 則是純黑色。
為什麼要用 HSV? #
- 更直觀的調色: 當你想要把一個紅色「變暗一點」或「變灰一點」,在 RGB 模式下很難抓準數值;但在 HSV 模式下,只要單獨調整明度 (V) 或飽和度 (S) 即可。
YUV #
什麼是 YUV? #
YUV 是一種將「亮度」與「色度」分離的色彩編碼系統。
-
Y (Luma, 亮度):代表影像的明亮程度(黑白影像)。
-
U (Chroma Blue, 色度):藍色色差訊號(U = 藍色 - 亮度)。
-
V (Chroma Red, 色度):紅色色差訊號(V = 紅色 - 亮度)。
為什麼需要 YUV? #
-
相容性歷史:當彩色電視問世時,為了讓舊有的黑白電視也能收看訊號,廣播系統保留了 Y 頻道(黑白),並額外疊加了 U 和 V 訊號給彩色電視使用。
-
節省頻寬/空間:人類視覺對「亮度」的敏感度遠高於「色彩細節」。因此,我們可以降低 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 個色彩(意思是,第二排不存色彩,直接「往上借用」第一排的色彩)

雜訊 #
雜訊 #
高斯雜訊 (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\) 時影像變暗。
-
應用:校正顯示器亮度、調整照片曝光不足或過度。

對比拉伸 (Contrast Stretching) #
-
原理:分段線性變換。將原本窄小的灰階範圍(例如 50-100)拉伸到完整的範圍(0-255)。
-
效果:使影像黑白更分明,細節更清晰。

灰度切片 (Gray-level Slicing) #
-
原理:將特定範圍的灰階值(如 150-200)設為高亮度,其餘設為低亮度(或保持不變)。
-
應用:從背景中突顯出特定強度的目標物體(如 X 光片中的骨骼)。


直方圖等化 (Histogram Equalization) #
-
原理:透過機率密度函數 (PDF) 與累積分佈函數 (CDF),將影像像素值重新分佈,使其直方圖趨於均勻。
-
效果:自動最大化影像的全局對比度,特別適用於背景與前景過於接近的影像。

浮水印 #
浮水印 #
分成:
- 可見式浮水印
- 隱藏式浮水印
什麼是數位浮水印? #
數位浮水印是一種將特定資訊(如版權聲明、作者標識、序號等)隱藏嵌入到數位媒體(影像、音訊、影片)中的技術。
-
目的:主要用於保護智慧財產權、驗證數位內容的真實性與完整性,以及追蹤資料的非法散佈。
-
提取方式:當發生版權爭議時,可以透過特定的演算法將隱藏的浮水印提取出來,作為合法的證明。
浮水印技術的三大核心要求 #
這三個特性通常是互相牽制的(Trade-off):
-
隱蔽性 (Imperceptibility / Invisibility):嵌入浮水印後,不能嚴重影響原始影像的視覺品質,肉眼應該看不出差異。
-
強健性 (Robustness):當影像遭到各種影像處理攻擊(如 JPEG 壓縮、裁切、縮放、加入雜訊、濾波等)後,浮水印仍能存活並被成功提取。
-
容量 (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,混疊/鋸齒):如果直接粗暴地丟棄像素,影像中原本細密的紋理(高頻細節)會因為採樣不足而失真,產生水波紋般的「摩爾紋」。
-
正確做法:在丟棄像素之前,必須先用**低通濾波器(如高斯濾波)**把影像稍微弄模糊,濾掉過於尖銳的高頻細節後,再進行降採樣,這樣縮小後的圖片才會自然。

Up-sampling (升採樣 / 影像放大) #
-
概念:增加影像的空間解析度(例如把小圖放大成桌布)。
-
運作原理:這其實是一個「無中生有」的過程。電腦會先建立一個更大的空白網格,然後把原本的像素放進去。接下來的問題是:「那些多出來的空白格子,要填入什麼顏色?」
-
核心關鍵:為了解決空白格子的顏色問題,我們就需要用到**「插值 (Interpolation)」**演算法來「猜」出合理的數值。
其中一個方法就是把像素點複製成更多份

雙線性插值 (Bilinear Interpolation) #
這是最常見且速度與品質平衡得很好的放大演算法。
-
運作原理:當電腦要決定一個新像素的顏色時,它會去尋找距離這個新位置最近的 4 個原始像素(2x2 的田字格)。
-
計算方式:顧名思義,它會在兩個方向(水平和垂直)分別進行「線性」的加權平均計算。
-
先在水平方向上,根據距離遠近,算出上下兩條線的中間值。
-
再於垂直方向上,把剛剛算出的兩個值再做一次加權平均。距離新像素越近的原始像素,對最終顏色的影響力(權重)就越大。
-
-
效果與優缺點:
-
優點:運算速度快,比起最簡陋的「最近鄰插值(直接拷貝最近的像素,會充滿馬賽克)」,雙線性的過渡非常平滑。
-
缺點:因為是不斷取平均值,所以影像放得太大時,邊緣會顯得比較模糊、缺乏銳利感。
-
雙三次插值 (Bicubic Interpolation) #
這是專業影像處理軟體(如 Photoshop)在放大圖片時的預設標準演算法。
-
運作原理:雙線性只參考 4 個鄰居,而雙三次插值會參考最近的 16 個原始像素(4x4 的網格)!
-
計算方式:它不再只是畫直線做簡單的加權平均,而是利用數學上的「三次多項式曲線(Cubic Polynomial)」來擬合這 16 個點的數值變化趨勢。電腦不只看周圍的顏色,還會計算顏色變化的「斜率(梯度)」。
-
效果與優缺點:
-
優點:放大後的影像品質極佳!它能夠非常聰明地保留物體的銳利邊緣,同時讓色彩的漸層過渡非常滑順,不會有雙線性那種糊成一團的感覺。
-
缺點:計算量相當大(因為要算三次函數和 16 個點),處理高解析度影片時較耗費硬體資源。

-