近日遇到乙個需求,要從點雲資料中提取空間平面。看了看計算機圖形學中關於直線檢測的霍夫變換的原理,自己寫了乙個用於三維空間點中進行平面檢測的霍夫變換演算法。
先說從最簡單的,xy平面影象中,提取直線的霍夫變換開始。
假如xy平面上存在一條直線,用方程y=kx+b來表示。那麼在kb平面上就可以用乙個點(k,b)來對應xy平面上的這條直線。這個變換可以反過來,已知xy平面上有乙個點(x0,y0),所有過該點的直線都肯定滿足:y0=k·x0+b。改寫一下就是:b= x0·k + y0,在kb平面上是一條直線。
假如xy平面上存在一系列的點p1,p2,...構成一條直線,那麼對每乙個點都進行霍夫變換,最終會在kb平面上得到乙個直線族,直線族相交於一點(k0,b0),就是所要尋找的直線y=k0·x+b0。
上述演算法原理上可行,但是實際中有兩個嚴重問題:1 平行與y軸的直線斜率k不存在;2 k、b的取值範圍都是(-∞,+∞),程式設計中不可能接受這麼大的平面。
因此直線檢測的霍夫變換用的是法線式直線方程:p=x·cosθ+y·sinθ。θ是法線角度,p是直線到原點距離。很明顯的,θ∈(0,π), p∈(-max(|p1,p2,...|),max(|p1,p2,...|)),在給定一堆點座標的前提下,這兩個引數都是有界的。
最終,為了檢測出直角座標x-y中由點所構成的直線,將p-θ平面分割為許多小格。根據直角座標中每個點的座標(x,y),在θ∈ (0,π)範圍內內以小格的步長計算各個p值,所得值落在某個小格內,便使該小格的累加記數器加1。當直角座標中全部的點都變換後,對小格進行檢驗,計數值最大的小格,其(θ,p)值對應於直角座標中所求直線。
理解直線檢測的原理之後,就可以推廣到三維空間平面檢測。關鍵在於尋找合適的平面方程形式,讓方程引數取值範圍有明確的邊界。參考法線式直線方程,這裡我選擇用點法式平面方程:xsinθcosφ+ysinθsinφ+zcosθ=r。其中r為原點到平面距離,θ為平面法向量天頂角,φ為平面法向量方位角,上述概念不清楚的話可以去參考球座標系。
對於給定的一系列xyz空間點(p1,p2,...),很明顯,θ∈(0,π),φ∈(-π,+π),r∈(0,max(|p1,p2,...|)),我們可以確定乙個有界三維霍夫空間(θ,φ,r),把該空間細分為許多小格仔。對於每乙個空間點座標(x0,y0,z0),按照θ∈(0,π),φ∈(-π,+π)的取值範圍去遍歷計算r = x0·sinθcosφ+y0·sinθsinφ+z0·cosθ,所得值落在某個小格內,便使該小格的累加記數器加1。完成全部霍夫變換後,取計數值最大的小格,對應的(θ,φ,r)值就可以得到xyz空間內的平面。
近日遇到乙個需求,要從點雲資料中提取空間平面。看了看計算機圖形學中關於直線檢測的霍夫變換的原理,自己寫了乙個用於三維空間點中進行平面檢測的霍夫變換演算法。
先說從最簡單的,xy平面影象中,提取直線的霍夫變換開始。
假如xy平面上存在一條直線,用方程y=kx+b來表示。那麼在kb平面上就可以用乙個點(k,b)來對應xy平面上的這條直線。這個變換可以反過來,已知xy平面上有乙個點(x0,y0),所有過該點的直線都肯定滿足:y0=k·x0+b。改寫一下就是:b= x0·k + y0,在kb平面上是一條直線。
假如xy平面上存在一系列的點p1,p2,...構成一條直線,那麼對每乙個點都進行霍夫變換,最終會在kb平面上得到乙個直線族,直線族相交於一點(k0,b0),就是所要尋找的直線y=k0·x+b0。
上述演算法原理上可行,但是實際中有兩個嚴重問題:1 平行與y軸的直線斜率k不存在;2 k、b的取值範圍都是(-∞,+∞),程式設計中不可能接受這麼大的平面。
因此直線檢測的霍夫變換用的是法線式直線方程:p=x·cosθ+y·sinθ。θ是法線角度,p是直線到原點距離。很明顯的,θ∈(0,π), p∈(-max(|p1,p2,...|),max(|p1,p2,...|)),在給定一堆點座標的前提下,這兩個引數都是有界的。
最終,為了檢測出直角座標x-y中由點所構成的直線,將p-θ平面分割為許多小格。根據直角座標中每個點的座標(x,y),在θ∈ (0,π)範圍內內以小格的步長計算各個p值,所得值落在某個小格內,便使該小格的累加記數器加1。當直角座標中全部的點都變換後,對小格進行檢驗,計數值最大的小格,其(θ,p)值對應於直角座標中所求直線。
理解直線檢測的原理之後,就可以推廣到三維空間平面檢測。關鍵在於尋找合適的平面方程形式,讓方程引數取值範圍有明確的邊界。參考法線式直線方程,這裡我選擇用點法式平面方程:xsinθcosφ+ysinθsinφ+zcosθ=r。其中r為原點到平面距離,θ為平面法向量天頂角,φ為平面法向量方位角,上述概念不清楚的話可以去參考球座標系。
對於給定的一系列xyz空間點(p1,p2,...),很明顯,θ∈(0,π),φ∈(-π,+π),r∈(0,max(|p1,p2,...|)),我們可以確定乙個有界三維霍夫空間(θ,φ,r),把該空間細分為許多小格仔。對於每乙個空間點座標(x0,y0,z0),按照θ∈(0,π),φ∈(-π,+π)的取值範圍去遍歷計算r = x0·sinθcosφ+y0·sinθsinφ+z0·cosθ,所得值落在某個小格內,便使該小格的累加記數器加1。完成全部霍夫變換後,取計數值最大的小格,對應的(θ,φ,r)值就可以得到xyz空間內的平面。
遙感變化檢測
遙感變化檢測 利用多時相的遙感資料,採用多種影象處理和模式識別方法提取變化資訊,並定量分析和確定地表變化的特徵與過程。它涉及變化的型別 分布狀況與變化量,即需要確定變化前 後的地面型別 界線 及變化趨勢,進而分析這些動態變化的特點與原因。遙感變化檢測的影響因素 1.遙感系統因素的影響 時間 空間 光...
Opencv之霍夫變化 直線 圓檢測
程式 include stdafx.h 本節講述 影象處理之 霍夫變化直線 include include include using namespace std using namespace cv mat src,dst,dst1,dst2,dst3,dst4,dst6,dst5,gray sr...
變化檢測演算法合集
變化檢測是從不同時期的遙感資料中定量分析和確定地表變化的特徵與過程 遙感變化檢測是乙個確定和評價各種地表現象隨時間發生變化的過程 遙感變化檢測是遙感瞬時視場中地表特徵隨時間發生的變化引起兩個時期影像像元光譜響應的變化。民用 主要用於資源和環境監測中的土地利用和覆蓋變化 森林和植被變化 城市擴充套件等...