十大濾波演算法
㈠ 點雲濾波相關
復制於:https://zhuanlan.hu.com/p/102748557
介紹
主要方法
直通濾波(PassThrough 濾波)
VoxelGrid濾波器對點雲進行下采樣
均勻采樣
增采樣
statisticalOutlierRemoval濾波器移除離群點
使用參數化模型投影點雲
ConditionalRemoval
RadiusOutlinerRemoval 移除離群點
從一個點雲中提取索引 根據點雲索引提取對應的點雲
介紹
點雲濾波,顧名思義,就是濾掉雜訊。原始採集的點雲數據往往包含大量散列點、孤立點,在獲取點雲數據時 ,由於設備精度,操作者經驗環境因素帶來的影響,以及電磁波的衍射性,被測物體表面性質變化和數據拼接配准操作過程的影響,點雲數據中講不可避免的出現一些雜訊。在點雲處理流程中濾波處理作為預處理的第一步,對後續的影響比較大,只有在濾波預處理中將雜訊點 ,離群點,孔洞,數據壓縮等按照後續處理定製,才能夠更好的進行配准,特徵提取,曲面重建,可視化等後續應用處理。其類似於信號處理中的濾波,
點雲濾波方法主要有:
1. 直通濾波器pcl::PassThrough<pcl::PointXYZ> pass
2. 體素格濾波器pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
3. 統計濾波器 pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
4. 半徑濾波器 pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;
5. 雙邊濾波 pcl::BilateralFilter<pcl::PointXYZ> bf;
該類的實現利用的並非XYZ欄位的數據進行,而是利用強度數據進行雙邊濾波演算法的實現,所以在使用該類時點雲的類型必須有強度欄位,否則無法進行雙邊濾波處理,雙邊濾波演算法是通過取臨近采樣點和加權平均來修正當前采樣點的位置,從而達到濾波效果,同時也會有選擇剔除與當前采樣點「差異」太大的相鄰采樣點,從而保持原特徵的目的 。
6. 高斯濾波 pcl::filters::GaussianKernel< PointInT, PointOutT >
是基於高斯核的卷積濾波實現 高斯濾波相當於一個具有平滑性能的低通濾波器
7. 立方體濾波 pcl::CropBox< PointT>
過濾掉在用戶給定立方體內的點雲數據
8. 封閉曲面濾波 pcl::CropHull< PointT>
過濾在給定三維封閉曲面或二維封閉多邊形內部或外部的點雲數據
9. 空間剪裁:
pcl::Clipper3D<pcl::PointXYZ>
pcl::BoxClipper3D<pcl::PointXYZ>
pcl::CropBox<pcl::PointXYZ>
pcl::CropHull<pcl::PointXYZ> 剪裁並形成封閉曲面
10. 卷積濾波:實現將兩個函數通過數學運算產生第三個函數,可以設定不同的卷積核
pcl::filters::Convolution<PointIn, PointOut>
pcl::filters::ConvolvingKernel<PointInT, PointOutT>
11. 隨機采樣一致濾波
等,
通常組合使用完成任務。
PCL中點雲濾波的方案
點雲數據密度不規則需要平滑
因為遮擋等問題造成離群點需要去除
大量數據需要下采樣
雜訊數據需要去除
對應的方案如下
按照給定的規則限制過濾去除點
通過常用濾波演算法修改點的部分屬性
對數據進行下采樣
去除噪音
直通濾波(PassThrough 濾波)
最簡單的一種濾波器,它的作用是過濾掉在指定維度方向上取值不在給定值域內的點。直通濾波器的實現原理如下:首先,指定一個維度以及該維度下的值域,其次,遍歷點雲中的每個點,判斷該點在指定維度上的取值是否在值域內,刪除取值不在值域內的點,最後,遍歷結束,留下的點即構成濾波後的點雲。直通濾波器簡單高效,適用於消除背景等操作。
#include <pcl/filters/passthrough.h>
如果使用線結構光掃描的方式採集點雲,必然物體沿z向分布較廣,
但x,y向的分布處於有限范圍內。
此時可使用直通濾波器,確定點雲在x或y方向上的范圍,
可較快剪除離群點,達到第一步粗處理的目的。
結果:
VoxelGrid濾波器對點雲進行下采樣
使用體素化網格方法實現下采樣,即減少點的數量 減少點雲數據,並同時保存點雲的形狀特徵,在提高配准,曲面重建,形狀識別等演算法速度中非常實用,PCL是實現的VoxelGrid類通過輸入的點雲數據創建一個三維體素柵格,容納後每個體素內用體素中所有點的重心來近似顯示體素中其他點,這樣該體素內所有點都用一個重心點最終表示,對於所有體素處理後得到的過濾後的點雲,這種方法比用體素中心(注意中心和重心)逼近的方法更慢,但是對於采樣點對應曲面的表示更為准確。
在網格內減少點數量保證重心位置不變
下采樣 同時去除 NAN點
如果使用高解析度相機等設備對點雲進行採集,往往點雲會較為密集。
過多的點雲數量會對後續分割工作帶來困難。
體素格濾波器可以達到向下采樣同時不破壞點雲本身幾何結構的功能。
點雲幾何結構 不僅是宏觀的幾何外形,也包括其微觀的排列方式,
比如橫向相似的尺寸,縱向相同的距離。
隨機下采樣雖然效率比體素濾波器高,但會破壞點雲微觀結構.
使用體素化網格方法實現下采樣,即減少點的數量 減少點雲數據,
並同時保存點雲的形狀特徵,在提高配准,曲面重建,形狀識別等演算法速度中非常實用,
PCL是實現的VoxelGrid類通過輸入的點雲數據創建一個三維體素柵格,
容納後每個體素內用體素中所有點的重心來近似顯示體素中其他點,
這樣該體素內所有點都用一個重心點最終表示,對於所有體素處理後得到的過濾後的點雲,
這種方法比用體素中心(注意中心和重心)逼近的方法更慢,但是對於采樣點對應曲面的表示更為准確。
結果:
結果不太明顯,換一個:
均勻采樣 pcl::UniformSampling
這個類基本上是相同的,但它輸出的點雲索引是選擇的關鍵點,是在計算描述子的常見方式。
原理同體素格 (正方體立體空間內 保留一個點(重心點))
而 均勻采樣:半徑求體內 保留一個點(重心點)
#include <pcl/filters/uniform_sampling.h>//均勻采樣
增采樣 setUpsamplingMethod
增采樣是一種表面重建方法,當你有比你想像的要少的點雲數據時,
增采樣可以幫你恢復原有的表面(S),通過內插你目前擁有的點雲數據,
這是一個復雜的猜想假設的過程。所以構建的結果不會百分之一百准確,
但有時它是一種可選擇的方案。
所以,在你的點雲雲進行下采樣時,一定要保存一份原始數據!
statisticalOutlierRemoval濾波器移除離群點
作用是去除稀疏離群噪點。在採集點雲的過程中,由於測量雜訊的影響,會引入部分離群噪點,它們在點雲空間中分布稀疏。在估算點雲局部特徵(例如計算采樣點處的法向量和曲率變化率)時,這些噪點可能導致錯誤的計算結果,從而使點雲配准等後期處理失敗。統計濾波器的主要思想是假設點雲中所有的點與其最近的k個鄰居點的平均距離滿足高斯分布,那麼,根據均值和方差可確定一個距離閾值,當某個點與其最近k個點的平均距離大於這個閾值時,判定該點為離群點並去除。統計濾波器的實現原理如下:首先,遍歷點雲,計算每個點與其最近的k個鄰居點之間的平均距離;其次,計算所有平均距離的均值μ與標准差σ,則距離閾值dmax可表示為dmax=μ+α×σ,α是一個常數,可稱為比例系數,它取決於鄰居點的數目;最後,再次遍歷點雲,剔除與k個鄰居點的平均距離大於dmax的點。
#include <pcl/filters/statistical_outlier_removal.h>
統計濾波器用於去除明顯離群點(離群點往往由測量雜訊引入)。
其特徵是在空間中分布稀疏,可以理解為:每個點都表達一定信息量,
某個區域點越密集則可能信息量越大。雜訊信息屬於無用信息,信息量較小。
所以離群點表達的信息可以忽略不計。考慮到離群點的特徵,
則可以定義某處點雲小於某個密度,既點雲無效。計算每個點到其最近的k(設定)個點平均距離
。則點雲中所有點的距離應構成高斯分布。給定均值與方差,可剔除n個∑之外的點
激光掃描通常會產生密度不均勻的點雲數據集,另外測量中的誤差也會產生稀疏的離群點,
此時,估計局部點雲特徵(例如采樣點處法向量或曲率變化率)時運算復雜,
這會導致錯誤的數值,反過來就會導致點雲配准等後期的處理失敗。
解決辦法:對每個點的鄰域進行一個統計分析,並修剪掉一些不符合標準的點。
具體方法為在輸入數據中對點到臨近點的距離分布的計算,對每一個點,
計算它到所有臨近點的平均距離(假設得到的結果是一個高斯分布,
其形狀是由均值和標准差決定),那麼平均距離在標准范圍之外的點,
可以被定義為離群點並從數據中去除。
使用參數化模型投影點雲
使用參數化模型投影點雲
如何將點投影到一個參數化模型上(平面或者球體等),
參數化模型通過一組參數來設定,對於平面來說使用其等式形式。
在PCL中有特定存儲常見模型系數的數據結構。
投影前的Z軸都不為0 ,投影之後,列印的結果表明,xy的值都沒有改變,z都變為0。所以該投影濾波類就是輸入點雲和投影模型,輸出為投影到模型上之後的點雲。
ConditionalRemoval 或 RadiusOutlinerRemoval 移除離群點
ConditionalRemoval 濾波器的理解
可以一次刪除滿足對輸入的點雲設定的一個或多個條件指標的所有的數據點
刪除點雲中不符合用戶指定的一個或者多個條件的數據點
RadiusOutlierRemoval移除離群點
一個比較簡單常用的方法就是根據空間點半徑范圍臨近點數量來濾波,對應的類名是 RadiusOutlinerRemoval,這個很容易理解,它的濾波思想非常直接,就是在點雲數據中,設定每個點一定半徑范圍內周圍至少有足夠多的近鄰,不滿足就會被刪除。比如你指定了一個半徑d,然後指定該半徑內至少有1個鄰居,那麼下圖中只有黃色的點將從點雲中刪除。如果指定了半徑內至少有2個鄰居,那麼黃色和綠色的點都將從點雲中刪除。
球半徑濾波器與統計濾波器相比更加簡單粗暴。
以某點為中心畫一個球計算落在該球內的點的數量,當數量大於給定值時,
則保留該點,數量小於給定值則剔除該點。
此演算法運行速度快,依序迭代留下的點一定是最密集的,
但是球的半徑和球內點的數目都需要人工指定。
㈡ 數字濾波器的演算法到底有幾種,八種嗎,怎麼還有Wiener,卡爾曼等演算法,還有分布式演算法
數字濾波器的演算法到底有幾種,首先你要弄清楚濾波是什麼意思,就是一個信號,通過一個系統(函數),變成了另外一個新的信號,這個新的信號里含有你想要的信息,但是比濾波之前的信息跟明確。
從這個角度來說,濾波器可以有無窮多種,只要是能夠實現信息過濾提取的,都是可以叫濾波器。
FIR和IIR 的分類是從這個系統本身對一個沖擊信號的響應長度來說的,一般來說,這個系統是能夠用有理多項式表示的系統,談IIR和FIR才有意義。
Wiener,卡爾曼濾波,這個裡面用到了高度復雜的非線性函數,但本質上還是提取你想要的信息。已經不是有理多項式能表述的系統了,這個跟IIR和FIR沒有太多的關系。
分布式演算法的話,那是把同一個事情,交給很多個cpu一起做,這個跟前面說的濾波演算法又是另外一回事了。假定你有一個濾波演算法,輸入是A,輸出是B,中間經過了A1,A2,....,An個步驟,你編程的時候把A1,A2,....,An全實現成一個函數,一個cpu來跑,這就是串列演算法;你也可以搞n台電腦,每台電腦做一個步驟,最後把結果B匯總出來,運算速度比原來快了N倍,那就是分布式演算法。
㈢ 均值濾波怎麼算的
均值濾波是典型的線性濾波演算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素(以目標象素為中心的周圍8個像素,構成一個濾波模板,即去掉目標像素本身),再用模板中的全體像素的平均值來代替原來像素值。均值濾波是典型的線性濾波演算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素(以目標像素為中心的周圍8個像素,構成一個濾波模板,即去掉目標像素本身)。再用模板中的全體像素的平均值來代替原來像素值。均值濾波也稱為線性濾波,其採用的主要方法為鄰域平均法。線性濾波的基本原理是用均值代替原圖像中的各個像素值,即對待處理的當前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當前像素點(x,y),作為處理後圖像在該點上的灰度個g(x,y),即個g(x,y)=1/m ∑f(x,y) m為該模板中包含當前像素在內的像素總個數。均值濾波本身存在著固有的缺陷,即它不能很好地保護圖像細節,在圖像去噪的同時也破壞了圖像的細節部分,從而使圖像變得模糊,不能很好地去除雜訊點。
㈣ 濾波在數學上是如何實現的
在單片機進行數據採集時,會遇到數據的隨機誤差,隨機誤差是由隨機干擾引起的,其特點是在相同條件下測量同一量時,其大小和符號會現無規則的變化而無法預測,但多次測量的結果符合統計規律。為克服隨機干擾引起的誤差,硬體上可採用濾波技術,軟體上可採用軟體演算法實現數字濾波。濾波演算法往往是系統測控演算法的一個重要組成部分,實時性很強。
採用數字濾波演算法克服隨機干擾的誤差具有以下優點:
1、數字濾波無需其他的硬體成本,只用一個計算過程,可靠性高,不存在阻抗匹配問題。尤其是數字濾波可以對頻率很低的信號進行濾波,這是模擬濾波器做不到的。
2、數字濾波使用軟體演算法實現,多輸入通道可共用一個濾波程序,降低系統開支。
3、只要適當改變濾波器的濾波程序或運算,就能方便地改變其濾波特性,這對於濾除低頻干擾和隨機信號會有較大的效果。
4、在單片機系統中常用的濾波演算法有限幅濾波法、中值濾波法、算術平均濾波法、加權平均濾波法、滑動平均濾波等。
(1)限幅濾波演算法
該運算的過程中將兩次相鄰的采樣相減,求出其增量,然後將增量的絕對值,與兩次采樣允許的最大差值A進行比較。A的大小由被測對象的具體情況而定,如果小於或等於允許的最大差值,則本次采樣有效;否則取上次采樣值作為本次數據的樣本。
演算法的程序代碼如下:
#defineA //允許的最大差值
chardata; //上一次的數據
char filter()
{
chardatanew; //新數據變數
datanew=get_data(); //獲得新數據變數
if((datanew-data)>A||(data-datanew>A))
return data;
else
returndatanew;
}
說明:限幅濾波法主要用於處理變化較為緩慢的數據,如溫度、物體的位置等。使用時,關鍵要選取合適的門限制A。通常這可由經驗數據獲得,必要時可通過實驗得到。
(2)中值濾波演算法
該運算的過程是對某一參數連續采樣N次(N一般為奇數),然後把N次采樣的值按從小到大排列,再取中間值作為本次采樣值,整個過程實際上是一個序列排序的過程。
演算法的程序代碼如下:
#define N11 //定義獲得的數據個數
char filter()
{
charvalue_buff[N]; //定義存儲數據的數組
char count,i,j,temp;
for(count=0;count
{
value_buf[count]=get_data();
delay(); //如果採集數據比較慢,那麼就需要延時或中斷
}
for(j=0;j
{
for(value_buff[i]>value_buff[i+1]
{
temp=value_buff[i];
value_buff[i]=value_buff[i+1];
value_buff[i+1]=temp;
}
}
returnvalue_buff[(N-1)/2];
}
說明:中值濾波比較適用於去掉由偶然因素引起的波動和采樣器不穩定而引起的脈動干擾。若被測量值變化比較慢,採用中值濾波法效果會比較好,但如果數據變化比較快,則不宜採用此方法。
(3)算術平均濾波演算法
該演算法的基本原理很簡單,就是連續取N次采樣值後進行算術平均。
演算法的程序代碼如下:
char filter()
{
int sum=0;
for(count=0;count
{
sum+=get_data();
delay():
}
return (char)(sum/N);
}
說明:算術平均濾波演算法適用於對具有隨機干擾的信號進行濾波。這種信號的特點是有一個平均值,信號在某一數值附近上下波動。信號的平均平滑程度完全到決於N值。當N較大時,平滑度高,靈敏度低;當N較小時,平滑度低,但靈敏度高。為了方便求平均值,N一般取4、8、16、32之類的2的整數冪,以便在程序中用移位操作來代替除法。
(4)加權平均濾波演算法
由於前面所說的「算術平均濾波演算法」存在平滑度和靈敏度之間的矛盾。為了協調平滑度和靈敏度之間的關系,可採用加權平均濾波。它的原理是對連續N次采樣值分別乘上不同的加權系數之後再求累加,加權系數一般先小後大,以突出後面若干采樣的效果,加強系統對參數變化趨勢的認識。各個加權系數均小於1的小數,且滿足總和等於1的結束條件。這樣加權運算之後的累加和即為有效采樣值。其中加權平均數字濾波的數學模型是:
式中:D為N個采樣值的加權平均值:XN-i為第N-i次采樣值;N為采樣次數;Ci為加權系數。加權系數Ci體現了各種采樣值在平均值中所佔的比例。一般來說采樣次數越靠後,取的比例越大,這樣可增加新采樣在平均值中所佔的比重。加權平均值濾波法可突出一部分信號抵制另一部分信號,以提高采樣值變化的靈敏度。
樣常式序代碼如下:
char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code數組為加權系數表,存在程序存儲區
char codesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buff[N];
int sum=0;
for(count=0;count
{
value_buff[count]=get_data();
delay();
}
for(count=0;count
sum+=value_buff[count]*jq[count];
return(char)(sum/sum_jq);
}
(5)滑動平均濾波演算法
以上介紹和各種平均濾波演算法有一個共同點,即每獲取一個有效采樣值必須連續進行若干次采樣,當采速度慢時,系統的實時得不到保證。這里介紹的滑動平均濾波演算法只採樣一次,將一次采樣值和過去的若干次采樣值一起求平均,得到的有效采樣值即可投入使用。如果取N個采樣值求平均,存儲區中必須開辟N個數據的暫存區。每新採集一個數據便存入暫存區中,同時去掉一個最老數據,保存這N個數據始終是最新更新的數據。採用環型隊列結構可以方便地實現這種數據存放方式。
程序代碼如下:
char value_buff[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buff[i++]=get_data();
if(i==N)
i=0;
for(count=0;count
sum=value_buff[count];
return (char)(sum/N);
}
(6)低通濾波
將普通硬體RC低通濾波器的微分方程用差分方程來表求,變可以採用軟體演算法來模擬硬體濾波的功能,經推導,低通濾波演算法如下:
Yn=a* Xn+(1-a) *Yn-1
式中 Xn——本次采樣值
Yn-1——上次的濾波輸出值;
,a——濾波系數,其值通常遠小於1;
Yn——本次濾波的輸出值。
由上式可以看出,本次濾波的輸出值主要取決於上次濾波的輸出值(注意不是上次的采樣值,這和加權平均濾波是有本質區別的),本次采樣值對濾波輸出的貢獻是比較小的,但多少有些修正作用,這種演算法便模擬了具體有教大慣性的低通濾波器功能。濾波演算法的截止頻率可用以下式計算:
fL=a/2Pit pi為圓周率3.14…
式中 a——濾波系數;
, t——采樣間隔時間;
例如:當t=0.5s(即每秒2次),a=1/32時;
fL=(1/32)/(2*3.14*0.5)=0.01Hz
當目標參數為變化很慢的物理量時,這是很有效的。另外一方面,它不能濾除高於1/2采樣頻率的干攪信號,本例中采樣頻率為2Hz,故對1Hz以上的干攪信號應採用其他方式濾除,
低通濾波演算法程序於加權平均濾波相似,但加權系數只有兩個:a和1-a。為計算方便,a取一整數,1-a用256-a,來代替,計算結果捨去最低位元組即可,因為只有兩項,a和1-a,均以立即數的形式編入程序中,不另外設表格。雖然采樣值為單元位元組(8位A/D)。為保證運算精度,濾波輸出值用雙位元組表示,其中一個位元組整數,一位元組小數,否則有可能因為每次捨去尾數而使輸出不會變化。
設Yn-1存放在30H(整數)和31H(小數)兩單元中,Yn存放在32H(整數)和33H(小數)中。濾波程序如下:
雖千萬里,吾往矣。
㈤ matlab 圖像演算法中,常見的濾波的運算元有哪些
平滑濾波(模糊)
高斯模糊濾波(模糊圖像)
中值濾波(消除高雜訊點)
拉普拉斯濾波(銳化)
其他還有雙邊濾波等
㈥ 無人駕駛(三)行人跟蹤演算法
姓名:王夢妮
學號:20021210873
學院:電子工程學院
【嵌牛導讀】本文主要介紹了無人駕駛中所需的行人跟蹤演算法
【嵌牛鼻子】無人駕駛 環境感知 計算機視覺 卡爾曼濾波 粒子濾波 均值漂移
【嵌牛提問】無人駕駛中所用到的行人跟蹤演算法有哪些
【嵌牛正文】
行人跟蹤一直是視覺領域的一個難點,實際應用環境復雜、遮擋以及行人姿態變化等外界因素都影響著行人跟蹤演算法的研究。行人跟蹤演算法模型主要分為生成模型和判別模型。
(一)生成式模型
生成式模型是一種通過在線學習行人目標特徵,建立行人跟蹤模型,然後使用模型來搜索誤差最小的目標區域,從而完成對行人的跟蹤。這種演算法在構建模型只考慮了行人本身的特徵,忽略了背景信息,沒有做到有效利用圖像中的全部信息。其中比較經典的演算法主要有卡爾曼濾波,粒子濾波,mean-shift等。
(1)卡爾曼濾波演算法
卡爾曼濾波演算法是一種通過對行人構建狀態方程和觀測方程為基礎,計算最小均方誤差來實現跟蹤的最優線性遞歸濾波演算法,通過遞歸行人的運動狀態來預測行人軌跡的變化。
首先設定初始參數,讀取視頻序列。然後進行背景估計,產生初始化背景圖像。然後依次讀取視頻序列,利用Kahnan濾波演算法,根據上一幀估計的背景和當前幀數據得到當前幀的前景目標。然後對前景目標進行連通計算,檢測出運動目標的軌跡。經典的卡爾曼濾波演算法.只能對線性運動的行人實現跟蹤,之後學者改進了卡爾曼濾波演算法,能夠實現對非線性運動的行人進行跟蹤,計算量小,能實現實時跟蹤,但是跟蹤效果不理想。
(2)粒子濾波
粒子濾波的核心就是貝葉斯推理和重要性采樣。粒子濾波可用於非線性非高斯模型,這是由於貝葉斯推理採用蒙特卡洛法,以某個時間點事件出現的頻率表示其概率。通過一組粒子對整個模型的後驗概率分布進行近似的表示,通過這個表示來估計整個非線性非高斯系統的狀態。重要性採用就是通過粒子的置信度來賦予不同的權重,置信度高的粒子,賦予較大的權重,通過權重的分布形式表示相似程度。
(3)均值漂移(mean-shift)
Mean-shift演算法屬於核密度估計法。不必知道先驗概率,密度函數值由采樣點的特徵空間計算。通過計算當前幀目標區域的像素特徵值概率來描述目標模型,並對候選區域進行統一描述,使用相似的函數表示目標模型與候選模板之間的相似度,然後選擇在具有相似函數值最大的候選模型中,您將獲得關於目標模型的均值漂移向量,該向量表示目標從當前位置移動到下一個位置的向量。通過連續迭代地計算均值偏移矢量,行人跟蹤演算法將最終收斂到行人的實際位置,從而實現行人跟蹤。
(二) 判別式模型
判別模型與生成模型不同,行人跟蹤被視為二分類問題。提取圖像中的行人和背景信息,並用於訓練分類器。通過分類將行人從圖像背景中分離出來,以獲取行人的當前位置。以行人區域為正樣本,背景區域為負樣本,通過機器學習演算法對正樣本和負樣本進行訓練,訓練後的分類器用於在下一幀中找到相似度最高的區域,以完成行人軌跡更新。判別式模型不像生成式模型僅僅利用了行人的信息,還利用了背景信息,因此判別式模型的跟蹤效果普遍優於生成式模型。
(1)基於相關濾波的跟蹤演算法
核相關濾波(KCF)演算法是基於相關濾波的經典跟蹤演算法,具有優良的跟蹤效果和跟蹤速度。這是由於其採用了循環移位的方式來進行樣本生產,用生成的樣本來訓練分類器,通過高斯核函數來計算當前幀行人與下一幀中所有候選目標之間的相似概率圖,找到相似概率圖最大的那個候選目標,就得到了行人的新位置。KCF演算法為了提高跟蹤精度,使用HOG特徵對行人進行描述,同時結合了離散傅里葉變換來降低計算量。
(2)基於深度學習的跟蹤演算法
近年來,深度學習在圖像和語音方面取得了較大的成果,因此有許多科研人員將深度學習與行人跟蹤相結合,取得了比傳統跟蹤演算法更好的性能。DLT就是一個基於深度學習的行人跟蹤演算法,利用深度模型自動編碼器通過離線訓練的方式,在大規模行人數據集上得到一個行人模型,然後在線對行人進行跟蹤來微調模型。首先通過粒子濾波獲取候選行人目標,然後利用自動編碼器進行預測,最終得到行人的預測位置即最大輸出值的候選行人目標位置。2015年提出的MDNet演算法採用了分域訓練的方式。對於每個類別,一個單獨的全連接層用於分類,並且全連接層前面的所有層都是共享,用於特徵提取。2017年提出的HCFT演算法使用深度學習對大量標定數據進行訓練,得到強有力的特徵表達模型,結合基於相關濾波的跟蹤演算法,用於解決在線進行跟蹤過程中行人樣本少、網路訓練不充分的問題。此外,通過深度學習提取特徵,利用數據關聯的方法來實現跟蹤的演算法,其中最為著名的就JPDAF與MHT這兩種方法。
㈦ 常用的數字濾波的方法都有哪些,寫出其中三種數字濾波的演算法
經典濾波的概念,是根據傅里葉分析和變換提出的一個工程概念。根據高等數學理論,任何一個滿足一定條件的信號,都可以被看成是由無限個正弦波疊加而成。換句話說,就是工程信號是不同頻率的正弦波線性疊加而成的,組成信號的不同頻率的正弦波叫做信號的頻率成分或叫做諧波成分。實際上,任何一個電子系統都具有自己的頻帶寬度(對信號最高頻率的限制),頻率特性反映出了電子系統的這個基本特點。而濾波器,則是根據電路參數對電路頻帶寬度的影響而設計出來的工程應用電路 。
現代濾波
現代濾波思想是和經典濾波思想截然不同的。現代濾波是利用信號的隨機性的本質,將信號及其雜訊看成隨機信號,通過利用其統計特徵,估計出信號本身。一旦信號被估計出,得到的信號本身比原來的信噪比高出許多。典型的數字濾波器有Kalman濾波,Wenner濾波,自適應濾波,小波變換(wavelet)等手段[3] 。從本質上講,數字濾波實際上是一種演算法,這種演算法在數字設備上得以實現。這里的數字設備不僅包含計算機,還有嵌入式設備如:DSP,FPGA,ARM等。
㈧ 什麼是濾波演算法
卡爾曼濾波器(Kalman Filter)是一個最優化自回歸數據處理演算法(optimal recursive data processing algorithm)。對於解決很大部分的問題,他是最優,效率最高甚至是最有用的。他的廣泛應用已經超過30年,包括機器人導航,控制,感測器數據融合甚至在軍事方面的雷達系統以及導彈追蹤等等。近年來更被應用於計算機圖像處理,例如頭臉識別,圖像分割,圖像邊緣檢測等等。
最佳線性濾波理論起源於40年代美國科學家Wiener和前蘇聯科學家Kолмогоров等人的研究工作,後人統稱為維納濾波理論。從理論上說,維納濾波的最大缺點是必須用到無限過去的數據,不適用於實時處理。為了克服這一缺點,60年代Kalman把狀態空間模型引入濾波理論,並導出了一套遞推估計演算法,後人稱之為卡爾曼濾波理論。卡爾曼濾波是以最小均方誤差為估計的最佳准則,來尋求一套遞推估計的演算法,其基本思想是:採用信號與雜訊的狀態空間模型,利用前一時刻地估計值和現時刻的觀測值來更新對狀態變數的估計,求出現時刻的估計值。它適合於實時處理和計算機運算。
現設線性時變系統的離散狀態防城和觀測方程為:
X(k) = F(k,k-1)·X(k-1)+T(k,k-1)·U(k-1)
Y(k) = H(k)·X(k)+N(k)
其中
X(k)和Y(k)分別是k時刻的狀態矢量和觀測矢量
F(k,k-1)為狀態轉移矩陣
U(k)為k時刻動態雜訊
T(k,k-1)為系統控制矩陣
H(k)為k時刻觀測矩陣
N(k)為k時刻觀測雜訊
則卡爾曼濾波的演算法流程為:
預估計X(k)^= F(k,k-1)·X(k-1)
計算預估計協方差矩陣
C(k)^=F(k,k-1)×C(k)×F(k,k-1)'+T(k,k-1)×Q(k)×T(k,k-1)'
Q(k) = U(k)×U(k)'
計算卡爾曼增益矩陣
K(k) = C(k)^×H(k)'×[H(k)×C(k)^×H(k)'+R(k)]^(-1)
R(k) = N(k)×N(k)'
更新估計
X(k)~=X(k)^+K(k)×[Y(k)-H(k)×X(k)^]
計算更新後估計協防差矩陣
C(k)~ = [I-K(k)×H(k)]×C(k)^×[I-K(k)×H(k)]'+K(k)×R(k)×K(k)'
X(k+1) = X(k)~
C(k+1) = C(k)~