尺度空間理論


1. 特征的不變性

何謂特征?

每個物體,我們總可以用一些詞語或部件來描述它,比如人臉的特征:兩個眼睛、一個鼻子和一個嘴巴。對於圖像而言,我們需要計算機去理解圖像,描述圖像就需要計算機去取得圖像的特征,對圖像比較全面的描述即一個二維矩陣,矩陣內的每個值代表圖像的亮度。有時候我們需要讓計算機更簡化的來描述一個圖像,抓住一些顯著特征,這些特征要具有一些良好的性質,比如局部不變性。局部不變性一般包括兩個方面:尺度不變性與旋轉不變性。

- 尺度不變性:人類在識別一個物體時,不管這個物體或遠或近,都能對它進行正確的辨認,這就是所謂的尺度不變性。尺度空間理論經常與生物視覺關聯,有人也稱圖像局部不變性特征為基於生物視覺的不變性方法。

- 旋轉不變性:當這個物體發生旋轉時,我們照樣可以正確地辨認它,這就是所謂的旋轉不變性。

2. 局部不變特征

全局特征:從整個圖像中抽取的特征。較多的運用在圖像檢索領域,如圖像顏色直方圖。

局部特征:從圖像的局部區域中抽取的特征(這個局部區域往往是圖像中的一個像素及它周圍的鄰域)。

一種好的局部特征應該具有下面的特性:

  1. 可重復性:同一個物體在不同時間,不同角度拍到圖像中,檢測到的特征對應的越多越好。
  2. 獨特性:特征在該物體上表現為獨特性,能與場景下其他物體區分。
  3. 局部性:特征往往是物體某個局部的特點,這樣才可以避免遮擋時不能匹配的問題。
  4. 數量性:檢測到的特征數目一定要多,密集度最好能在一定程度上反映圖像的內容。
  5. 准確性:得到的特征應該能被精確定位,能夠精確到像素。
  6. 高效性:特征檢測算法運算要快。

為了研究圖像的尺度不變特征,我們需要先從圖像的尺度空間理論開始。

3. 圖像尺度空間理論

當用一個機器視覺系統分析未知場景時,計算機沒有辦法預先知識圖像中物體尺度,因此,我們需要同時考慮圖像在多尺度下的描述,獲知感興趣物體的最佳尺度。

所以在很多時候,我們會在將圖像構建為一系列不同尺度的圖像集,在不同的尺度中去檢測我們感興趣的特征。比如:在Harr特征檢測人臉的時候,因為我們並不知道圖像中人臉的尺寸,所以需要生成一個不同大小的圖像組成的金字塔,掃描其中每一幅圖像來尋找可能的人臉。

3.1 金字塔分辨率

圖像金字塔化的一般步驟:首先,圖像經過一個低通濾波器進行平滑(這個步驟會使圖像變模糊,好像模仿人的視覺中遠處的物體沒有近處的清晰的原理),然后,對這個平滑后的圖像進行抽樣(一般抽樣比例在水平和豎直方向上都為1/2),從而得到一系列的縮小的圖像。

   

假設高斯金字塔的第 $l$ 層圖像為$G_l$,則有:

$$G_l(i,j)=\sum^{2}_{m=-2}\sum_{n=-2}^2\omega(m,n)G_{l-1}(2i+m,2j+n)$$

$$(1\le l \le N,0 \le i \le R_l,0 \le j \le C_l)$$

式中,$N$為高斯金字塔頂層 撥動號;$R_l$和$G_l$分別為高斯金字塔第$l$層的行數和列數;$\omega(m,n)$是一個二維可分離的$5 \times 5$窗口函數,表達式為:

$$\omega=\frac{1}{256} \begin{bmatrix}
1 & 4 & 6 & 4 & 1\\
4 & 16 & 24 & 16 & 4\\
6 & 24 &36 & 24 & 6\\
4 & 16 & 24 & 16 & 4\\
1 & 4 & 6 & 4 & 1 \\
\end{bmatrix} =\frac{1}{16}\begin{bmatrix}
1 & 4 & 6 & 4 &1 \end{bmatrix}\times\frac{1}{16}\begin{bmatrix}
1 \\ 4 \\ 6 \\ 4 \\1 \end{bmatrix}
$$

寫成上面的形式是為了說明,二維窗口的卷積算子,可以寫成兩個方向上的1維卷積核(二項核)的乘積。上面卷積形式的公式實際上完成了2個步驟:1)高斯模糊;2)降維。

按上述步驟生成的$G_0,G_1,\dots ,G_N$就構成了圖像的高斯金字塔,其中$G_0$為金字塔的底層(與原圖像相同),$G_N$為金字塔的頂層。可見高斯金字塔的當前層圖像是對其前一層圖像先進行高斯低通濾波,然后做隔行和隔列的降采樣(去除偶數行與偶數列)而生成的。當前層圖像的大小依次為前一層圖像大小的1/4。

下面是用OpenCV中的圖像金字塔相關函數寫的一個生成圖像金字塔的示例程序。程序中,不但生成了圖像金字塔,而且生成了圖像的拉普拉斯金字塔(接下來的內容)。

enum pyrType { PYR_GUASS, PYR_LAPLACE };
void genPyr(const Mat& imgSrc, vector<Mat>& outPutArray, int TYPE, int level)
{
    outPutArray.assign(level + 1, Mat());
    outPutArray[0] = imgSrc.clone(); // the 0 level is the image. 
    for (int i = 0; i != level; i++)
    {
        pyrDown(outPutArray[i], outPutArray[i + 1]);
    }
    if (PYR_GUASS == TYPE)
    {
        return;
    }
    for (int i = 0; i != level; i++)
    {
        Mat UpSampleImg;
        pyrUp(outPutArray[i + 1], UpSampleImg, outPutArray[i].size());
        outPutArray[i] -= UpSampleImg;
    }
}

3.2 圖像的拉普拉斯金字塔

將$G_l$進行內插(這里內插用的不是雙線性而是用的與降維時相同的濾波核)得到放大圖像$G_l^{\ast}$,使$G_l^{\ast}$的尺寸與$G_{l-1}$的尺寸相同,表示為:

$$
G_l^{\ast}(i,j)=4\sum_{m=-2}^2\sum_{n=-2}^2\omega(m,n)G_l(\frac{i+m}{2},\frac{j+n}{2}) \\
(0 \le l \le N,0 \le i \le R_l,0 \le j \le G_l)
$$

上面的系數4,是因為每次能參與加權的項,的權值和為4/256,這個與我們用的$\omega$的值有關。

式中,

$$
G_l(\frac{i+m}{2},\frac{j+n}{2})=\begin{cases}
G_l(\frac{i+m}{2},\frac{j+n}{2}), & 當\frac{i+m}{2},\frac{j+n}{2}為整數時 \\
0, & 其他
\end{cases}
$$

$$
\begin{cases}
LP_l=G_l-G_{l+1}^{\ast}, & 當0 \le l \le N時 \\
LP_N=G_N, & 當l=N時
\end{cases}
$$

式中,$N$為拉普拉斯金字塔頂層號,$LP_l$是拉普拉斯金字塔分解的第$l$層圖像。

由$LP_0,LP_1, \dots,LP_l,\dots,LP_N$構成的金字塔即為拉普拉斯金字塔。它的每一層圖像是高斯金字塔本層圖像與其高一級的圖像經內插放大后圖像的差,此過程相當於帶通濾波,因此拉普拉斯金字塔又稱為帶通金字塔分解。

下圖為小貓圖像的拉普拉斯金字塔圖像:

image image image image

3.3 為什么用高斯核

圖像的金字塔化能高效地(計算效率也較高)對圖像進行多尺度的表達,但它缺乏堅實的理論基礎,不能分析圖像中物體的各種尺度(雖然我們有小貓的金字塔圖像,我們還是不知道原圖像內小貓的大小)。

信號的尺度空間剛提出是就是通過一系列單參數、寬度遞增的高斯濾波器將原始信號濾波得到到組低頻信號。那么一個很明顯的疑問是:除了高斯濾波之外,其他帶有參數t的低通濾波器是否也可以用來生成一個尺度空間。

后來Koenerink、Lindeberg[Scale-space theory in computer vision]、Florack等人用精確的數學形式通過不同的途徑都證明了高斯核是實現尺度變換的唯一變換核。

雖然很多研究者從可分性、旋轉不變性、因果性等特性推出高斯濾波器是建立線性尺度空間的最優濾波器。然后在數字圖像處理中,需要對核函數進行采樣,離散的高斯函數並不滿足連續高斯函數的的一些優良的性質。所以后來出現了一些非線性的濾波器組來建立尺度空間,如B樣條核函數。

使用高斯濾波器對圖像進行尺度空間金塔塔圖的構建,讓這個尺度空間具有下面的性質:

1)加權平均和有限孔徑效應

信號在尺度t上的表達可以看成是原信號在空間上的一系列加權平均,權重就是具有不同尺度參數的高斯核。

信號在尺度t上的表達也對應於用一個無方向性的孔徑函數(特征長度為$\sigma=\sqrt{t}$)來觀測信號的結果。這時候信號中特征長度小於$\sigma$的精細結構會被抑制[理解為一維信號上小於$\sigma$的波動會被平滑掉。]。

2)層疊平滑

也叫高斯核族的半群(Semi-Group)性質:兩個高斯核的卷積等同於另外一個不同核參數的高斯核卷積。

$$g(\mu,\sigma_1)\ast g(\mu,\sigma_2)=g(\mu,\sqrt{\sigma_1^2+\sigma_2^2})$$

這個性質的意思就是說不同的高斯核對圖像的平滑是連續的。

3)局部極值遞性

這個特征可以從人眼的視覺原理去理解,人在看一件物體時,離得越遠,物體的細節看到的越少,細節特征是在減少的。

高斯核對圖像進行濾波具有壓制局部細節的性質。

4)尺度伸縮不變性。

這里只是一個公式推導的問題,對原來的信號加一個變換函數,對變換后的信號再進行高斯核的尺度空間生成,新的信號的極值點等特征是不變的。

Young對經生理學的研究中發現,哺乳動物的視網膜和視覺皮層的感受區域可以很好地用4階以內的高斯微分來建模。

3.4 尺度的選擇[經驗之談]

一般我們采集到的圖像中,我們並不知道我們感興趣的目標在圖像中的尺度,在這樣的情況下,我們對圖像進行分析時就無法選擇合適的參數,比如邊緣檢測,可能由於參數不當,而造成過多的局部細節。

如下圖所示:紅色圓圈內的斑點的大小(直徑)比例對應着兩幅圖像之間尺度比例(scale ratio)。如果對兩幅圖像采用相同的固定尺度的LoG檢測器檢測,很難將這兩個斑點檢測出來。LoG檢測器相當於一個匹配濾波器,只有當LoG的尺度與圖片中斑點結構尺度相當時才會有較強的響應。如果用與左圖中斑點結構相當大小尺度LoG算子,在中的大斑點的對應的LoG響應很小不能被檢測出來,反之亦然。因此固定尺度的LoG斑點檢測器不具有尺度不變性。使用尺度空間進行多尺度檢測可以將兩幅圖像中不同尺度的斑點檢測出來。但是由於斑點結構是在一定尺度范圍之內存在的,比如用5~8尺度的LoG可能都能檢測出來右邊圖像中的斑點結構,所以在尺度空間中進行斑點檢測會有重復檢測的缺點。

 image

在實際操作中,我們需要定義一個特征響應函數,在不同的尺度空間上尋找一個極值點。比如小貓的金字塔圖像分析時,我們定義了一個大小為[w,h]的小貓的模板,用這個模板去與金字塔系列圖像匹配,一定有匹配度最佳(即特征響應最強)。

需要注意的是,圖像結構往往是在粗糙的尺度上被檢測到,此時位置信息未必是最准確的,因此通常圖像的尺度分析包含兩個階段:首先在粗尺度上進行特征(結構)檢測,然后再在細尺度上進行精確定位。

 

參考資料:

[1] opencv教程:圖像金字塔

[2] 計算機視覺——算法與應用 3.5節 金字塔與小波

[3] 現代數字圖像 1.1節 圖像多分辨率真金字塔

[4] OpenCV的5種圖像內插方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM