雙邊濾波演算法
❶ 點雲濾波相關
復制於: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個鄰居,那麼黃色和綠色的點都將從點雲中刪除。
球半徑濾波器與統計濾波器相比更加簡單粗暴。
以某點為中心畫一個球計算落在該球內的點的數量,當數量大於給定值時,
則保留該點,數量小於給定值則剔除該點。
此演算法運行速度快,依序迭代留下的點一定是最密集的,
但是球的半徑和球內點的數目都需要人工指定。
❷ matlab 圖像演算法中,常見的濾波的運算元有哪些
平滑濾波(模糊)
高斯模糊濾波(模糊圖像)
中值濾波(消除高雜訊點)
拉普拉斯濾波(銳化)
其他還有雙邊濾波等