1. 程式人生 > >計算機視覺之分組和擬合

計算機視覺之分組和擬合

為什麼要有擬合?(對已有影象資訊的整合)
對在低階視覺中利用區域性特徵提取得到的邊緣點可能形成的全域性形狀的擬合。

1.特徵點所屬的擬合模型
2.確定模型樣子
3.確定總的擬合模型個數

Hough transform
確定擬合物件的引數
做法:
用cell表示模型引數的取值,判斷特徵點是否在該引數(cell的座標系表示引數取值)確定的模型上,若在則cell值加1,最終cell中票數最高的cell所表示的引數為擬合模型的引數。
舉個例子,如何根據一堆點來確定直線:
設定合適的步長,取多個p和theta,對於每個點計算是否在在這裡插入圖片描述
若在,則為該引數值加1

四個直線擬合常用方法:
1.最小二乘法
最小化目標函式來求引數
在這裡插入圖片描述


2.上面方法利用的垂直距離,無法計算垂直於x軸的直線,於是有了總體最小二乘法,ax+by+c表示的是點到直線的距離,最小化目標函式求直線的引數:
在這裡插入圖片描述3.M估計
最小二乘法對外點很敏感,外點的存在使得直線擬合出現偏差,因為最小二乘法中殘差是以平方表示,M估計通過改變目標函式,使得一定範圍內的點的殘差以平方表示,超出範圍的點的殘差以常數表示,這樣就避免了外點的對目標函式的影響。
下面sigma表示擬合直線是點的範圍,sigma太大,外點對擬合產生影響,sigma太小,擬合直線不準確。u表示殘差
在這裡插入圖片描述不同sigma對擬合結果的影響:
在這裡插入圖片描述4.最小二乘法(中值)
用所有點計算得到的中值殘差來表示模型的好壞(不用所有點的殘差求和來表示),也拋去了外點的影響
n個待擬合點,從中隨機取出p個,求擬合直線,計算p個點到直線的殘差,取中值作為評估模型好壞的標準
。重複取p個點計算殘差,直到殘差很小或者達到迭代次數。最小殘差對應直線引數就是所擬合直線的引數。

5.RANSAC
上面幾個方法是通過改變目標函式,這個方法是不斷加入點到擬合直線上。
主要思想:取一個子集(越小越好),擬合出一條直線,對其餘的點逐個判斷到擬合直線的距離,小於設定的距離值,則為將該點加入該直線中,並記錄在直線上的點的個數。不斷重複,取子集,擬合直線。最終根據在直線上的點個數小於設定的閾值來剔除部分擬合直線,最終根據更新後的點集來擬合直線,比較殘差,殘差最小直線引數是要求解的。
在這裡插入圖片描述

三個擬合多個直線(曲線)模型:
1.Incremental line fitting
已知邊緣曲線,點是連續分佈:
分為曲線點List 、直線點List 、直線List,對於擬合直線,一旦下一個點不匹配該直線,將該點退回到曲線點List,最終形成多個直線
在這裡插入圖片描述

2.k-means
點是離散的,前提是假設出k條直線(可以是隨機的),為每個點分配所屬的直線(可以根據點到直線距離遠近),分配後的點集再重新擬合直線
在這裡插入圖片描述3.概率模型

尋找好模型之如何折騰已有的訓練資料儘可能找到好的模型(k-fold和分為不同比例訓練集+測試集):
最小化訓練集上的biased和測試集的variance,自由度越高,biased值越小,但variance值越大。
將訓練集分為訓練和驗證,以不同比例不斷劃分訓練集,來尋找最好的模型。
K-fold Cross-Validation:
訓練集劃分為k份,第i做測試,其餘做訓練,尋找最好的模型。

運動分割:
光流法:描述在兩張影象在畫素平面畫素速度大小和方向變化,為了求出在兩個方向的速度大小,提出了三個假設:
1.同一個畫素點的畫素值不變
2.不發生大的偏移
3.鄰域一致性,即鄰域的畫素點也滿足(u,v)
利用假設1可得到,但此時一個方程有u,v兩個未知數,無法求得u,v
在這裡插入圖片描述
利用第三個假設,假設考慮鄰域的25個畫素點
在這裡插入圖片描述希望能求u和v,先判斷是否可解:
計算矩陣的特徵值,若兩個特徵值都很大,則u和v可解。