天天看點

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

本節書摘來自異步社群出版社《數字圖像處理與機器視覺——visual c++與matlab實作》一書中的第0章,第0.3節,作者: 張铮 , 王豔平 , 薛桂香,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

數字圖像處理與機器視覺——visual c++與matlab實作

數字圖像是由一組具有一定空間位置關系的像素組成,因而具有一些度量和拓撲性質。了解像素間的關系是學習圖像處理的必要準備,主要包括相鄰像素,鄰接性、連通性,區域、邊界等概念,以及今後要用到的一些常見距離度量方法。另外0.3.3小節還将簡單介紹幾種基本的圖像操作。

為了解上述這些概念,需要首先了解相鄰像素的概念。依據标準的不同,我們可以關注像素p的4鄰域和8鄰域,如圖0.6所示。

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

1.鄰接性(adjacency)

定義v是用于決定鄰接性的灰階值集合,它是一種相似性的度量,用于确定所需判斷鄰接性的像素之間的相似程度。比如在二值圖像中,如果我們認為隻有灰階值為1的像素是相似的,則v={1},當然相似性的規定具有主觀标準,是以也可以認為v={0,1},此時鄰接性完全由位置決定;而對于灰階圖像,這個集合中則很可能包含更多的元素。此外,定義對角鄰域n__d_(_p)為8-鄰域中不屬于4-鄰域的部分(圖0.10(c)),那麼:

4鄰接(4-neighbor):如果q∈n4(p),則稱具有v中數值的兩個像素p和q是4鄰接的。

8鄰接(8-neighbor):如果q∈n8(p),則稱具有v中數值的兩個像素p和q是8鄰接的。

舉例來說,圖0.7(a),(b)分别是像素和q、q 1、q 2的4鄰接和8鄰接示意圖。而對于兩個圖像子集s 1和s 2,如果s 1中的某些像素和s 2中的某些像素相鄰,則稱這兩個子集是鄰接的。

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

2.連通性

為了定義像素的連通性,首先需要定義像素p到像素q的通路(path)。這也是建立在鄰接性的基礎上的。

像素p到像素q的通路(path)指的是一個特定的像素序列 ({x_0}, {y_0}), ({x_1}, {y_1}), …, ({x_n}, {y_n}),其中 (({x_0}, {y_0}) = ({x_p}, {y_p}),({x_n},{y_n}) = ({x_q}, {y_q})。并且像素 ({x_i}, {y_i}) 和 ({x_{i-1}}, {y_{i-1}}) 在滿足1leqslantileqslantn時是鄰接的。在上面的定義中,n是通路的長度,若 ({x_0},{y_0}) = ({x_n},{y_n}),則這條通路是閉合通路。相對應于鄰接的概念,在這裡有4通路和8通路。這個定義和圖論中的通路定義基本相同,隻是由于鄰接概念的加入而變得更加複雜。

像素的連通性(contiguous):令s代表一幅圖像中的像素子集。如果在s中全部像素之間存在一個通路,則可以稱2個像素p和q在s中是連通的。此外,對于s中的任何像素p,s中連通到該像素的像素集叫做s的連通分量。如果s中僅有一個連通分量,則集合s叫做連通集。

3.區域和邊界

區域的定義建立在連通集的基礎上的。令r是圖像中的一個像素子集,如果r同時是連通集,則稱r為一個區域(region)。

邊界(boundary)的概念是相對于區域而言的。一個區域的邊界(或邊緣、輪廓)是區域中所有包含一個或多個不在區域r中的鄰接像素的像素所組成的集合。顯然,如果區域r是整幅圖像,那麼邊界就由圖像的首行、首列、末行和末列定義。因而,通常情況下,區域指一幅圖像的子集,并包括區域的邊緣。而區域的邊緣(edge)則由具有某些導數值的像素組成,是一個像素及其直接鄰域的局部性質,是一個有大小和方向屬性的矢量。

邊界和邊緣是不同的。邊界是和區域有關的全局概念,而邊緣表示圖像函數的局部性質。

基于上一小節提到的相關知識,我們來了解距離度量的概念。假設對于像素p({x_p}, {y_p}),q({x_q}, {y_q}),r({x_r}, {y_r})而言,有函數d滿足如下3個條件,則函數d可被稱為距離函數或度量。

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

常見的幾種距離函數有:

(i)歐氏距離

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

即距離等于r的像素形成以p為圓心的圓。

(ii)d4距離(街區距離)

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

即距離等于r的像素形成以p為中心的菱形。

(iii)d 8距離(棋盤距離)

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

即距離等于r的像素形成以p為中心的方形。

距離度量參數可以用于對圖像特征進行比較、分類或者進行某些像素級操作。最常用的距離度量是歐氏距離,然而在形态學中,也可能使用街區距離和棋盤距離。

在後續章節中,将涉及各種各樣的圖像操作,這裡以幾種最為典型和常用的圖像操作為例着重說明。按照處理圖像的數量分類,可以分為對單幅圖像操作(如濾波)和對多幅圖像操作(如求和、求差和邏輯運算等);按照參與操作的像素範圍的不同,可以分為點運算和鄰域運算;而根據操作的數學性質,又可以分為線性操作和非線性操作。

1.點運算和鄰域運算

點運算指的是對圖像中的每一個像素逐個進行同樣的灰階變換運算。設r和s分别是輸入圖像f(x,y)和輸出圖像g(x,y)在任一點(x, y)的灰階值,則點運算可以使用下式定義:

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

如果将點運算擴充,對圖像中每一個小範圍(鄰域)内的像素進行灰階變換運算,即稱為鄰域運算或鄰域濾波。這可以使用下式定義:

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

我們将分别在第3章和第5章介紹點運算和鄰域運算。

2.線性和非線性操作

令h是一種算子,其輸入輸出都是圖像。若對于任意兩幅(或兩組)圖像f 1和f 2及任意兩個标量a和b都有如下關系成立:

《數字圖像處理與機器視覺——Visual C++與Matlab實作》——0.3 數字圖像處理的預備知識

則稱h為線性算子。即對兩幅圖像的線性組合應用該算子與分别應用該算子後的圖像在進行同樣的線性組合所得到的結果相同,也就是說算子h滿足線性性質。同樣,不符合上述定義的算子即為非線性算子,對應的是非線性圖像操作。舉例來說,濾波中的平均平滑,高斯平滑,梯度銳化等都是線性運算,而中值濾波(詳見第5章“空間域圖像增強”)則是非線性的。

線性操作由于其穩定性的特點在圖像進行中占有非常重要的地位。盡管非線性算子常常也能夠提供較好的性能,但它的不可預測性使其在一些如軍事圖像處理和醫學圖像處理等嚴格的應用領域中難以獲得廣泛的應用。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀