《數字圖像處理》讀書筆記,整理書中的瑣碎細小的概念,逐漸將其消化理解。筆記內容大部分摘錄自書中內容,並加上一部分解釋內容,便於理解。
像素間的基本關系
4鄰域、對角鄰域、8鄰域
4鄰域 (4-neighbors)
坐標 \((x,y)\) 上的像素 \(p\) 在水平和垂直方向上的4個相鄰像素,其坐標分別為 \((x+1,y),(x-1,y),(x,y+1),(x,y-1)\) ,這組像素中的每個像素距離 \(p\) 一個單位距離,稱為像素 \(p\) 的4鄰域,用 \(N_4(p)\) 表示。
對角鄰域 (diagonal neighbors)
坐標 \((x,y)\) 上的像素 \(p\) 在兩個對角方向上的4個相鄰像素,其坐標分別為 \((x+1,y+1),(x+1,y-1),(x-1,y-1),(x-1,y+1)\),這組像素稱為像素 \(p\) 的對角鄰域,用 \(N_D(p)\) 表示。
8鄰域 (8-neighbors)
坐標 \((x,y)\) 上的像素 \(p\) 的4鄰域和對角鄰域合起來稱為8鄰域,用 \(N_8(p)\) 表示。
鄰接性、連通性、區域和邊界
相鄰像素的鄰接性需根據這些像素的灰度值確定,即兩個像素 \(p\) 和 \(q\) 可能在空間位置上相鄰,但其像素值不在鄰接性定義的灰度值像素值集合內,因此這兩個像素不是鄰接的。
令 \(V\) 是定義鄰接性的像素值集合,考慮二值圖像(像素的灰度值只有0和1兩種數值的圖像)時,如果將具有1值的像素設定為鄰接像素,則 \(V=\{1\}\)。在其他灰度級數更大(例如256級灰度)的圖像中,集合 \(V\) 一般含有更多的灰度值,即 \(V\) 可能是0-255整數集合的任意一個子集。
4鄰接
考慮一個像素 \(p\),如果像素 \(q\) 在集合 \(N_4(p)\) 中,則具有 \(V\) 中數值的兩個像素 \(p\) 和 \(q\) 是4鄰接的。
8鄰接
考慮一個像素 \(p\),如果像素 \(q\) 在集合 \(N_8(p)\) 中,則具有 \(V\) 中數值的兩個像素 \(p\) 和 \(q\) 是8鄰接的。
m鄰接(混合鄰接)
考慮一個像素 \(p\),如果
-
像素 \(q\) 在集合 \(N_4(p)\) 中,或者
-
像素 \(q\) 在集合 \(N_D(p)\) 中,且集合 \(N_4(p){\cap}N_D(p)\) 沒有來自 \(V\) 中數值的像素。
則具有 \(V\) 中數值的兩個像素 \(p\) 和 \(q\) 是8鄰接的。
混合鄰接是8鄰接的改進,目的是消除8鄰接帶來的對角相鄰像素之間可能產生的多余的斜向路徑。
通路
從具有坐標 \((x,y)\) 的像素 \(p\) 到具有坐標 \((s,t)\) 的像素 \(q\) 之間的通路是由不同像素組成的一個序列,序列中像素的坐標值分別為
其中 \((x_0,y_0)=(x,y),(x_n,y_n)=(s,t)\),並且在序列中左右相鄰的兩個像素之間都是鄰接的。\(n\) 是通路的長度(通路中的像素個數-1)。如果一條通路有 \((x_0,y_0)=(x_n,y_n)\),則這條通路是閉合通路。可根據不同的鄰接類型(4鄰接、8鄰接、m鄰接)定義不同的通路類型(4通路、8通路、m通路)。
連通
令 \(S\) 是圖像中的一個像素子集(圖像中像素點組成的集合)。如果兩個像素 \(p\) 和 \(q\) 之間存在一條完全由 \(S\) 中的像素構成的通路(像素 \(p\) 和 \(q\) 均在 \(S\) 中),那么稱像素 \(p\) 和 \(q\) 在 \(S\) 中連通。這條通路的所有像素點均取自 \(S\) 中,但無需取遍 \(S\) 的全部元素。
對於 \(S\) 中的任意一個像素 \(p\),在 \(S\) 中與像素 \(p\) 連通的像素構成的像素集合稱為 \(S\) 的連通分量。如果S僅有一個連通分量,則 \(S\) 稱為連通集(\(S\) 中的所有像素互相都連通)。
區域
令 \(R\) 是圖像中的一個像素子集,如果 \(R\) 是一個連通集,則稱 \(R\) 為圖像的一個區域。兩個區域 \(R_i\) 和 \(R_j\),如果將他們合並后能夠形成一個連通集,則稱區域 \(R_i\) 和 \(R_j\) 為鄰接區域。不鄰接的區域稱為不鄰接區域。當考慮區域之間的是否鄰接時,一般使用4鄰接或8鄰接。為了使得這些區域鄰接的定義有意義,必須指定區域之間鄰接的類型。也就是說,有些區域之間使用4鄰接方式是不鄰接的,而使用8鄰接方式則是鄰接的,所以在判斷區域之間是否鄰接之前需要指定鄰接類型。
邊界
假設一幅圖像中含有 \(K\) 個不鄰接的區域 \(R_k,k=1,2,...,K\),且這些區域都不接觸圖像的邊界。令 \(R_u\) 表示這 \(K\) 個區域的並集,\((R_u)^c\) 表示 \(R_u\) 的補集,那么 \(R_u\) 稱中的所有像素點為圖像的前景,\((R_u)^c\) 中的所有像素點為圖像的背景。
區域 \(R\) 的邊界(也叫邊框或者輪廓)是區域 \(R\) 中與 \(R\) 的補集鄰接的像素點組成的集合。也就是說,一個區域的邊界是區域中與至少一個背景區域像素鄰接的像素點組成的集合。在定義區域的邊界時同樣要指定鄰接的類型。一般來說,為了處理拐角點的情況,通常使用8鄰接方式定義區域和其背景之間的邊界。
上述邊界的定義有時稱為區域的內邊界,即邊界像素是在區域內部。與內邊界相區分的是外邊界,即邊界像素在背景區域內。外邊界的定義與內邊界的定義類似,只是邊界像素取自背景區域,條件變為與至少一個區域像素鄰接。內外邊界的區別在設計邊界跟蹤算法時很重要,這類算法為了保證結果是閉合通路,通常制定為遵循外邊界。因為有些區域內部無法形成一個閉合通路(例如一條寬度為1個像素的線段構成的區域),因此需要從背景區域中找到該區域的邊界,使得圍繞這個區域的邊界能夠形成一個閉合通路。
如果區域 \(R\) 是整幅圖像,其邊界定義為圖像的第一行、第一列、最后一行和最后一列的像素構成的集合。如此定義的原因是一幅圖像超出邊界以外是沒有鄰接像素點的。正常情況下,區域指的是一幅圖像的子集,並且區域邊界上任何與圖像邊界重合的像素點都隱含為區域邊界的一部分。
邊緣
邊緣在討論區域和邊界時常常出現,然而邊緣和邊界之間有一個關鍵的不同點。有限區域的邊界形成一個閉合通路,因此這是一個“全局”概念。而邊緣由導數值超過某一預設閾值的像素點構成。因此邊緣是一個“局部”概念,它基於一個點處灰度級的不連續性度量。邊界考慮全局,即邊界內的像素點是否能形成一個閉合通路,而邊緣考慮局部,即鄰接像素點上的灰度級不連續是否能夠超過某個閾值。
可以將邊緣點連接稱邊緣線段,並且有時使用計算邊界的方式連接這些邊緣線段,但並不總是這樣。邊界和邊緣相同的一個例外情況是二值圖像。二值圖像中像素的灰度值只有0和1兩種,根據使用連通類型和邊緣算子,能夠實現在二值區域中提取的邊緣和區域邊界是完全一樣的。在概念上考慮邊緣為灰度不連續、邊界為閉合通路是十分有用的。
距離
圖像中的像素按照空間位置排布,因此也有着相應的距離度量方式。
對於坐標分別為 \((x,y),(s,t),(v,w)\) 的像素 \(p,q,z\),如果有
- \(D(p,q){\geq}0,[D(p,q)=0\) 當且僅當 \(p=q]\)
- \(D(p,q)=D(q,p)\) 且
- \(D(p,z){\leq}D(p,q)+D(q,z)\)
則 \(D\) 是距離函數或度量標准。
像素 \(p\) 和 \(q\) 之間的歐氏距離度量定義如下:
在歐式距離度量下,到像素點 \((x,y)\) 的距離小於等於某一特定值 \(r\) 的像素都在以 \((x,y)\) 為中心、半徑為 \(r\) 的圓盤區域內。
像素 \(p\) 和 \(q\) 之間的 \(D_4\) 距離度量(城市街區距離)定義如下:
在 \(D_4\) 距離度量下,到像素點 \((x,y)\) 的距離小於等於某一特定值 \(r\) 的像素形成一個以 \((x,y)\) 為中心的菱形區域。例如 \(D_4=1\) 的像素是 \((x,y)\) 的4鄰域。
像素 \(p\) 和 \(q\) 之間的 \(D_8\) 距離度量(棋盤距離)定義如下:
在 \(D_8\) 距離度量下,到像素點 \((x,y)\) 的距離小於等於某一特定值 \(r\) 的像素形成一個以 \((x,y)\) 為中心的方形區域。例如 \(D_8=1\) 的像素是 \((x,y)\) 的8鄰域。
注意,像素 \(p\) 和 \(q\) 之間的 \(D_4\) 和 \(D_8\) 距離度量和任何可能存在與這些像素點之間的通路無關,因為這兩種距離度量方式只考慮像素點的坐標。如果考慮m鄰接,則 \(D_m\) 距離定義為兩像素點間最短的m通路長度。在 \(D_m\) 距離度量下,兩個像素之間的距離依賴於通路上像素的灰度值以及它們相鄰像素的灰度值。在 \(D_m\) 距離度量下,這些像素的灰度值的不同可能會產生不同的距離值。