【小林的OpenCV基礎課 番外】霍夫變換原理
同樣是一篇講解原理的番外,這一篇主要講解CV中常用的霍夫變換的數學原理。
霍夫變換的由來
「霍夫變換於1962年由Paul Hough首次提出,最初的Hough變換是設計用來檢測直線和曲線,起初的方法要求知道物體邊界線的解析方程,但不需要有關區域位置的先驗知識。後於1972年由Richard Duda & Peter Hart推廣使用。」
其實,霍夫變換的中心思想就是通過坐標變換來檢測直線,後來經過改進,就可以檢測橢圓等。
霍夫線變換
坐標系的角度:
說起直線,我們會想到笛卡爾坐標系(即x-y坐標系)下的直線方程,細分之則有點斜式、截距式等, 是我們最熟悉的一種。但直線垂直於x軸時斜率 不存在,這給我們帶來許多不便之處。
這時極坐標就carry全場了,它與笛卡爾坐標系的轉換關係: ,變形可得 , 為原點到直線的距離,也常用 表示,示意圖如下:
由此極坐標下,直線可用 表示。這就啟發我們,同一直線上的點具有相同的 :
統計學的角度:
內容出自:Opencv學習筆記-----霍夫變換直線檢測及原理理解 - CSDN博客
如上圖,假定在一個8*8的平面像素中有一條直線,並且從左上角 像素點開始分別計算 為0°、45°、90°、135°、180°時的 ,圖中可以看出 分別為 ,並給這5個值分別記一票,同理計算像素點 點 為0°、45°、90°、135°、180°時的 ,再給計算出來的5個 值分別記一票,此時就會發現 的這個值已經記了兩票了,以此類推,遍歷完整個8*8的像素空間的時候 就記了5票, 別的 值的票數均小於5票,所以得到該直線在這個8*8的像素坐標中的極坐標方程為 ,到此該直線方程就求出來了。
霍夫圓變換
霍夫圓變換使用的演算法叫霍夫梯度法,對應的函數為HoughCircles,這個函數實際上是對常規找圓演算法的一種改進,這裡不展開講,想學習這個原理的同學請參考找圓演算法((HoughCircles)總結與優化 - CSDN博客
最後的最後
如果喜歡小林的專欄,就收藏了吧!してください!
推薦閱讀:
※Learning to Segment Every Thing論文導讀
※【小林的OpenCV基礎課 10】Canny邊緣檢測
※Rocket Training: 一種提升輕量網路性能的訓練方法
※Focal Loss for Dense Object Detection解讀
※3D卷積神經網路Note01