?機器視覺算法與應用讀書筆記(算法)
1.數據結構
2.圖像增強
1. 灰度值變換
2. 輻射標定
3. 圖像平滑
1. 時域去噪法
2. 空間域去噪法
- 均值濾波器
遞歸線性濾波器:將上次計算得到的值帶入到下次的值中
缺點:噪聲並不能被全部消除 高斯濾波器
高斯濾波器4. 傅裏葉變換
將函數h(x)從空間域轉變到頻率域
是一種可逆變換3. 幾何變換
1. 仿射變換
二維to二維之間的變換
對圖像中的物體的尺寸進行修正(平移和旋轉角度修正)
一般有一個2x2的線性部分和一個平移部分2. 投影變換
高維to二維之間的變換
仿射變換(特殊的投影變換)
需要八個參數(4個點)3. 圖像變換
1. 最臨近插值:
轉化後坐標的x位於四個像素點中心店之間,是一個非整數的的位置,對非整數位置取整,以找到與此坐標相鄰的四個像素點的中心位置中最近的一個,然後將輸入圖像裏的這個最鄰近點位置的像素的灰度值視為輸出圖像內相應像素點的灰度值。
容易導致鋸齒狀外觀2. 雙線性插值:
首先,分別計算轉換後的坐標到四個相鄰近像素中心點的垂直方向和水平方向的距離根據距離值(0-1之間)計算不同灰度值所占的權重後得到雙線性插值的結果。
4. 極坐標變換:
通常被用來 矯正圖像中的圓形物體或被包含在圓環中物體。
4. 圖像分割:
1. 閾值分割
一個好的閾值對應著 直方圖中兩個峰之間的最小值。
But 灰度直方圖的隨機波動,所以需要魯棒的方法選定的話,必須對直方圖進行平滑處理即將直方圖與一個一維高斯濾波器進行卷積來完成平滑處理。為了給高斯濾波器選定合適的 值,一個好的策略是逐漸增大 並平滑直方圖,直到可以從平滑後的直方圖中得到唯一的最大值和他們之間的一個唯一的最小值。動態閾值分割:
使用均值、高斯或中值濾波器,進行平滑處理就可以計算出以當前像素為中心的窗口內的平均灰度值(背景值)。
將圖像與局部背景進行的比較被稱為動態閾值分割
對亮物體的動態閾值分割處理:
圖像值-背景值
對暗物體的閾值分割:
背景值-圖像值
平滑濾波器的尺寸決定了能被分割出來的物體的尺寸。(濾波器的大小應該大於被提取物體的大小)
動態閾值分割 可以用來檢測異常:
待測物體值-圖像物體值>某一閾值
前提:待測物的圖像和參考圖像必須精確對準,異常檢測:偏差模型法
用n幅訓練影像的平均值用來模型化參考圖像,用n幅訓練影像的標準差來模型化參考圖像允許的偏差。(當偏差太小時不適用,此時應添加一個絕對的閾值)
2. 提取連通區域
如何定義像素連通:
- 兩個像素有共同的邊緣
將對角線也包括進來
前後景必須使用不同的連通定義
在用行程表示法描述的區域上計算連通區域,可以使用深度優先搜索3. 亞像素精度閾值分割
提取到的不可能是面,應該是亞像素精度的輪廓,表示圖像中兩個區域之間的邊界。
表示這兩個邊界,必須將圖像的離散表示轉換為一個連續的函數5. 特征提取
1.區域特征
1. 基於矩的特征
面積是被稱為區域的矩的廣義特征中的一個特例。
\[ m_{p,q} = \sum_{(r,c)\in r} r^pc^q \]
\(m_{0,0}\)就是區域的面積
當\(p+q\ge1\)時。矩除以面積得到歸一化的矩
歸一化的矩是由圖像的位置決定的。通常,使特征不隨圖像中區域的位置變化而變化是很有用的。這些中心矩是在\((p+q\ge2)\)時由下式實現的:
\[\mu_{p,q}=\frac{1}{a}\sum(r-n_{1,0})^p(c-n_{0,1})^q\]
二階中心距\((p+q=2)\)尤其值得關註,它可以用來定義區域的方位和區域的範圍。2. 基於外接幾何基元(矩形,圓)
可以計算寬度、高度、寬高比
計算任一方位的外接圓的方法是基於首先計算區域的凸包
基於此區域的凸包,能夠定義另一個有用的特性:凸性
凸性被定義為某區域的面積和該區域凸包的面積的比值,用來測量區域的緊湊程度
區域的輪廓長度2.灰度值特征
在一個參考區域測出的平均值和標準差也能被用來建立一個線性灰度值變換,此變換可以補償亮度的變化。
6.形態學
1.區域形態學
所有的區域形態學處理能根據六個非常簡單的操作來定義:並集,交集,差集,補集,平移和轉置。
膨脹、腐蝕、開操作、閉操作
膨脹和腐蝕也被稱為最大值濾波和最小值濾波
形態學梯度算子:
膨脹-腐蝕2.灰度值形態學
7.邊緣提取
1. 在一維和二維中的邊緣定義
一維
\[|f^{\prime}|\gg 0\]
通常有很多彼此相連的點都滿足此條件,因為背景灰度值到前景灰度值過度是光滑的。因此為了獲得唯一的邊緣位置,我們必須加入額外的要求,即一維導數的絕對值\(|f‘(x)|\)是局部最大值。這就是非最大抑制
\[ f^{\prime\prime}=0 \]
\[ f^{\prime}f^{\prime\prime\prime} < 0 \]
\[ f^{\prime}>0是正邊緣 \]
\[ f^{\prime}<0是負邊緣 \]二維
\[ \bigtriangledown f = \bigtriangledown f(r,c) = (\frac{\vartheta{f(r,c)}}{\vartheta{r}},\frac{\vartheta{f(r,c)}}{\vartheta{c}})=(f_r ,f_c) \]
\[ ||\triangledown||_2=\sqrt{f_r^2+f_c^2} \]
等價於一維中的一階導數的絕對值\(|f^{\prime}(x)|\)
梯度方向:
\[ \phi=-arctan(f_r/f_c) \]
註意\(\phi\)沿從橫軸開始的算數正方向(逆時針方向)增大
拉普拉斯算子:
\[\triangle f = \triangle f(r,c) = (\frac{\vartheta^2{f(r,c)}}{\vartheta{r^2}},\frac{\vartheta^2{f(r,c)}}{\vartheta{c^2}})=(f_{rr} ,f_{cc})\]
邊緣能通過拉普拉斯算子過零計算得到:
\[\triangle f(r,c)=0\]
只有在筆直的邊緣是局部梯度最大和拉普拉斯算子返回一值,梯度量值局部最大來定義的邊緣總落在聯想拐角內,拉普拉斯算子過零來定義的邊緣總落在理想拐角外2. 一維邊緣提取
速度快常被用來確定一個物體的位置和尺寸
第一個問題:如何計算離散一維灰度值剖面的導數?
一階倒數
\[ f‘_{i}=\frac{1}{2}(f_{i+1}-f_{i-1}) \]
二階導數
\[ f‘’_{i}=\frac{1}{2}(f_{i+1}-2f_i+f_{i-1}) \]
即以下的卷積掩碼:
\[ \frac{1}{2}[1,0,-1]和\frac{1}{2}[1,-2,1] \]
計算斜線、圓或橢圓上的剖面時,生成若幹條垂直於我們獲取灰度值破面的那條線。而線上的點通常不落在像素的中心上,此時需要進行插值處理。
因為噪聲容易導致過多的二階倒數為零,所以使用二階導數不容易提取出明顯的邊緣。
為了抑制噪聲,可以在灰度值剖面的那條直線的垂線方向上對多個灰度值進行適當的的平均,但是當被檢測物體具有非常多的紋理,或者無法選取足夠多的像素進行平均時,無法被抑制。
此時我們對灰度值剖面進行平滑處理,這樣我們在剖面上提取邊緣時需要兩個卷積,此時可將這兩個卷積合成一個卷積——邊緣濾波器
canny準則(怎麽樣算好的邊緣探測器):- 對一個邊緣點的錯檢和漏檢的可能性都要低
- 提取出來的邊緣盡可能的靠緊真正的邊緣
對每個真正的邊緣都只返回唯一的邊緣(提取出來的邊緣位置之間的距離最大化)
canny認為最好的邊緣濾波器是高斯濾波器的一階導數。
Deriche 提出了改進了Canny的算法提出了能以遞歸方式實現的兩個濾波器:
\[ d‘_{\alpha}(x) = -{\alpha}^2xe^{-\alpha|x|} \]
\[ e‘_\alpha(x)=-2\alpha sin(\alpha x)e^{-\alpha|x|} \]
對應的平滑濾波器:
\[ d_\alpha (x)=\frac{1}{4}\alpha(\alpha|x|+1)e^{-\alpha|x|} \]
\[ e_\alpha(x)=\frac{1}{2}\alpha[sin(\alpha|x|)+cos(\alpha|x|)]e^{-\alpha|x|} \]
亞像元邊緣提取
用邊緣幅度最大值周圍的三個點來擬合拋物線,然後計算此拋物線的最大值3.二維邊緣提取
\[ f{r;i,j}=\frac{1}{2}(f{i+1,j}-f_{i-1,j}) \]
\[
f_{c;i,j}=\frac{1}{2}(f_{i+1,j}-f_{i-1,j})
\]
\[
\left[
\begin{matrix}
1 & 0 & -1 \ a & 0 & -a \ 1 & 0 & -1
\end{matrix}\right]\tag{1}
\]
註意在卷積時濾波器掩碼被鏡像:
\[
\left[
\begin{matrix}
1 & a & 1 \ 0 & 0 & 0 \ -1 & a & -1
\end{matrix}\right]\tag{1}
\]
當\(a=1時\),我們得到\(Prewitt\)濾波器,垂直與到導數方向上濾波
當\(a=\sqrt{2}\)時,我們得到了\(Frei\)濾波器
當\(a=2時\),我們得到了\(Sobel\)濾波器,垂直與導數的方向上近似於高斯平滑濾波。
當\(a=2.435101\)時,我們得到了\(Ando\)濾波
因為2-範數耗時太大,所以經常用
1-範數(4連通):
\[
||\triangledown{f}||_1 = |f_r|+|f_c|
\]
或者最大範數(8連通):
\[||\triangledown{f}||_{\infty}=\max(|f_r|,|f_c|)\]
由於\(3×3\)魯棒性不好
所以使用Canny二維形式:
\[
g_r=\sqrt{2\pi}{\sigma}g‘_{\sigma}(r)g_{\sigma}(c)
\]
和
\[
g_c=\sqrt{2\pi}{\sigma}g‘_{\sigma}(c)g_{\sigma}(r)
\]
邊緣檢測之Canny算子
非極大值抑制
8. 幾何基元的分割與擬合
1.直線擬合
直線的表示方法:黑塞範式
\[
{\alpha}r+{\beta}c+{\gamma}=0
\]
\[
{\alpha}^2+{\beta}^2=1
\]
擬合直線即使點到直線的距離最小化:
\[
{\varepsilon}^2 = \sum_{i=1}^n({\alpha}r_i+{\beta}c_i+{\gamma})^2-\lambda({\alpha}^2+{\beta}^2-1)n
\]
以此方法得到的\((\alpha,\beta)\),它既是直線的法向量,也是從點集的橢圓參數得到的短軸
為了降低遠離點的影響可以加入權重。
那麽最小化的過程就變成了:
\[
{\varepsilon}^2 ={\omega}_i \sum_{i=1}^n({\alpha}r_i+{\beta}c_i+{\gamma})^2-\lambda({\alpha}^2+{\beta}^2-1)n
\]
確定權重的方法:多次叠代法。
權重函數:
Huber法:
\[
\omega(\sigma)=(x)=\left\{
\begin{aligned}
1 && |\sigma|\leqslant r \r/|\sigma|&& |\sigma|> r
\end{aligned}
\right.
\]
Tukey法:
\[
\omega(\sigma)=(x)=\left\{
\begin{aligned}
\lbrack1-(\sigma/r)^2\rbrack^2 && |\sigma|\leqslant r \0&& |\sigma|> r
\end{aligned}
\right.
\]
其中\(r\)是削波函數,手動設置,一般為\(r=2{\sigma}_\delta\)
\[
{\sigma}_\delta=\frac{media|\sigma_i|}{0.6745}
\]
\(RANSAC算法\)
相繼丟棄離群值,通過隨機選擇的最少數量的點來構造一個解。
2. 圓擬合
\[
{\varepsilon}^2 = \sum_{i=1}^n(\sqrt{(r_i-\alpha)^2(c_i-\beta)^2}-\rho
\]
也可以加入權重,和使用\(RANSAC算法\)
3. 橢圓擬合
橢圓的隱式方程:
\[
{\alpha}r^2+{\beta}rc+{\gamma}c^2+{\delta}r+{\zeta}c
+\eta=0
\]
\[
{\beta}^2-4{\alpha}{\gamma}=-1
\]
4.將輪廓分割為直線、圓和橢圓
直線擬合:
Rammer算法對輪廓進行遞歸細分,直到得到的全部線段到各自對應的輪廓段的最大距離小於用戶設置的閾值
實際應用:
先以亞像素準確度提取邊緣,然後用Rammer算法以多邊形對提取後的邊緣進行逼近。
將輪廓分割為直線和圓的算法分為兩類:
1.將那些與明確實體相對應的輪廓上的斷點識別出來
2、一開始將輪廓分割成直線,第二步檢查過度分割線段能否被合並成圓或者橢圓。
9.攝像機標定
10.立體重構
11.模板匹配
模板匹配
應用場合:
1.完整性檢測2.物體識別3.確定目標物體的位姿
1. 基於灰度值的模板匹配
2.使用圖形金字塔進行匹配
3.基於灰度值的亞像素精度匹配
4.帶旋轉與縮放的模板匹配
對搜索空間離散化:創建多個方向的模板
更大的模板使用更小的步幅,更小的模板使用更大的步幅
5.可靠地模板匹配算法
圖像的邊緣很少收光線變化的影響,但是邊緣提取時存在如何選擇合適的閾值的問題,這就是為什麽需要匹配算法足夠可靠地能夠處理遮擋和混亂的情況。
邊緣匹配策略:
1、我們可以在匹配中使用原始的邊緣點,或者增加每個點的一些特性。
2、將邊緣分割為多個幾何基元,然後在圖像中匹配這些分割得到的幾何基元
3、基於邊緣的分割,我們可以得到邊緣的突變點然後匹配這些突變點。
邊緣匹配算法的類別:
1、基於模板邊緣與圖像邊緣的距離
2、基於相似度量
幾何哈希法
?機器視覺算法與應用讀書筆記(算法)