閒來無事,整理下擬合方面的一些方法(部分內容參考gloomyfish、grooveboy等部落格,在此先行謝過)
直線擬合方法主流方法有最小二乘、hough兩種,其他如halcon上的最小距離也是最小二乘的思想,其他如hough變換和最小二乘結合、混沌粒子群結合等等
1、最小二乘擬合直線
曲線擬合中最基本和最常用的是直線擬合。設x
和y之間的函式關係為:
y=a+bx
式中有兩個待定引數,a代表截距,b代表斜率。對於等精度測量所得到的n組資料(xi
,yi),i=1,2……,n,xi
值被認為是準確的,所有的誤差只聯絡著yi
。下面利用最小二乘法把觀測資料擬合為直線。
用最小二乘法估計引數時,要求觀測值yi
的偏差的加權平方和為最小。對於等精度觀測值的直線擬合來說,可使下式的值最小:
上式分別對a、b求偏導得:
整理後得到方程組
解上述方程組便可求得直線引數a
和b的最佳估計值。
相關係數
r:最小二乘法處理資料除給出a、
b外,常常還給出相關係數
r, r
定義為
2、hough變換擬合直線
霍夫變換是影象變換中的經典手段之一,主要用來從影象中分離出具有某種相同特徵的幾何
形狀(如,直線,圓等)。霍夫變換尋找直線與圓的方法相比與其它方法可以更好的減少噪
聲干擾。經典的霍夫變換常用來檢測直線,圓,橢圓等。
霍夫變換演算法思想:
以直線檢測為例,每個畫素座標點經過變換都變成都直線特質有貢獻的統一度量,乙個簡單
的例子如下:一條直線在影象中是一系列離散點的集合,通過乙個直線的離散極座標公式,
可以表達出直線的離散點幾何等式如下:
x *cos(theta) + y * sin(theta) = r 其中角度theta指r與x軸之間的夾角,r為到直線幾何垂
直距離。任何在直線上點,x, y都可以表達,其中 r, theta是常量。該公式圖形表示如下:
然而在實現的影象處理領域,影象的畫素座標p(x, y)是已知的,而r, theta則是我們要尋找
的變數。如果我們能繪製每個(r, theta)值根據畫素點座標p(x, y)值的話,那麼就從影象笛卡
爾座標系統轉換到極座標霍夫空間系統,這種從點到曲線的變換稱為直線的霍夫變換。變換
通過量化霍夫引數空間為有限個值間隔等分或者累加格仔。當霍夫變換演算法開始,每個畫素
座標點p(x, y)被轉換到(r, theta)的曲線點上面,累加到對應的格仔資料點,當乙個波峰出現
時候,說明有直線存在。同樣的原理,我們可以用來檢測圓,只是對於圓的引數方程變為如
下等式:
(x –a ) ^2 + (y-b) ^ 2 = r^2其中(a, b)為圓的中心點座標,r圓的半徑。這樣霍夫的引數空間就
變成乙個三維引數空間。給定圓半徑轉為二維霍夫引數空間,變換相對簡單,也比較常用。
程式設計思路解析:
1. 讀取一幅帶處理二值影象,最好背景為黑色。
2. 取得源畫素資料
3. 根據直線的霍夫變換公式完成霍夫變換,預覽霍夫空間結果
4.尋找最大霍夫值,設定閾值,反變換到影象rgb值空間(
程式難點之一
)5. 越界處理,顯示霍夫變換處理以後的影象
關鍵**解析:
直線的變換角度為[0 ~ pi]之間,設定等份為180份,為提高實時性,只對roi點做hough變換,matlab中hough變換原理應是對沒一點做hough,對於二值影象儘管此點為0,也會預設最hough變換,嚴重影響速度。
霍夫變換源圖如下:
霍夫變換以後,在霍夫空間顯示如下:(白色表示已經找到直線訊號)
最終反變換回到畫素空間效果如下:
乙個更好的執行監測直線的結果(輸入為二值影象):
直線擬合 matlab基礎直線擬合
本文介紹利用矩陣除法進行最小二乘直線擬合 矩陣除法最小二乘直線擬合的函式檔案,參考matlab2018從入門到精通 中文版 function k,b linefit x,y n length x x reshape x,n,1 生成列向量 y reshape y,n,1 a x,ones n,1 b...
OpenCV直線擬合
摘抄自 opencv 提供的直線擬合函式。函式原型如下 void fitline inputarray points,outputarray line,int disttype,double param,double reps,double aeps disttype 指定擬合函式的型別,可以取 c...
Opencv 擬合直線
最小二乘法是勒讓德 a.m.legendre 於1805年在其著作 計算慧星軌道的新方法 中提出的。最小二乘法就是通過最小化誤差的平方和,使得擬合物件無限接近目標物件。在影象處理中主要用於擬合線,通過求取樣點距離誤差最小的線,可以是直線,曲線,橢圓,圓等。求解方法目前分為多項式和概率 最大似然 估計...