1 什么是去噪
1.1 噪聲
噪聲:也稱為孤立點/離群點/異常點,是指點云數據中的不相關或不希望存在的干擾信號或誤差。噪聲來源:環境光線的明亮程度、測量設備精度及系統誤差、物體材料及表面的紋理和人為抖動等因素影響。
1.2 噪聲來源
環境光線的明亮程度、測量設備精度及系統誤差、物體材料及表面的紋理和人為抖動等因素。
1.3 點云去噪
在點云數據中,通過適當的濾波和處理方法,去除無用或噪聲點,以提高數據質量和準確性的過程。
2 常見的去噪算法
2.1 統計濾波
1 原理
去除明顯分布稀疏的離群點。根據給定均值與方差,可剔除方差之外的點,即方差之外的點是正確點。
2 舉例
一點云中有50個點,每個點的鄰近點個數設置為8,則50個點(8領域)的平均值計算如下:
則算出50個點的平均值,設置距離閾值σ,若平均值在閾值之外的視為離群點,在點云數據中去除。
3 核心代碼
—--統計濾波
//創建濾波器。對每個點分析的臨近點的個數設置為50,并將標準差的倍數設置為1,這意味著如果一個點的距
離超出了平均距離一個標準差以上,則該點被標記為離群點,并將它移除,存儲起來
pcl::Statistical0utlierRemowalSor;
sor.setInputCloud(cloud);//設置待波波的點云
sor.setMeamK(50);//設置在進行統計時考慮查詢點鄰近點數
Sor. setStddevMu1Thresh(1);//設置判斷是否為高群點的閾值,里邊的數字表示標準差的倍數,1個標準差以上就是離群點。
//即。當判斷點的k近鄰平均距高(mean distance)大于全局的1倍標準差+平均距離(global distances meanm and standard),則為離群點。
2.2 直通濾波
1 原理
根據點云的屬性(屬性比如x,y,z,顏色值等),在點的屬性上設置范圍,對點進行濾波,保留范圍內的或保留范圍外的,則去除離群點。
2 舉例
在一個點云數據中,取z軸0~1范圍內的點云進行保存。
3 核心代碼
//創建濾波器對象
pcl::PassThroughpass;
pass.setInputCloud(c1oud);
pass.setFi1terFie1dName("z");//濾波字段名被設置為z軸方向
pass.setFi1terLimits(0.0,1.0);//設置在過濾方向上的過濾范圍
//pass.setKeepOrganized(true);//保持有序點云結構,該功能用于有序點云才有意義。
pass.setNegative(true);//設置保留范圍內的點還是過濾掉范圍內的點,標志為false時保留范圍內的點
2.3 半徑濾波
1 原理
設定濾波半徑,計算每個點在其半徑范圍內的其他點的個數。半徑范圍內其他點個數少于某一設定的閾值的點將被濾除。
2 舉例設置半徑為d,分別考察黃藍綠三點,若點個數的閾值為1,則黃色點將被濾除;若閾值為2,則黃色點和綠色點都將被濾除。
3 核心代碼
ror.setInputC1oud(c1oud_in);//輸入點云
ror.setRadiusSearch(0.1);//設置半徑為0.1m范圍內找臨近點
ror.setMinNeighborsInRadius(10);//設置查詢點的鄰域點集數小于10刪除
ror.fi1ter(*cloud_radius);//執行濾波
2.4 條件濾波
1 原理
根據點云數據的某些屬性或特征進行篩選,可以一次刪除滿足對輸入的點云設定的一個或多個條件指標的所有的數據點,如點的法線方向、點的強度值、點的顏色等屬性來篩選點云數據。
條件濾波和直通濾波的區別:
條件濾波基于點的任何屬性或特征進行篩選,而直通濾波只能基于軸向范圍進行篩選。
2.5 中值濾波
1 原理
是常用的非線性濾波方法,用于去除圖像或信號中的噪聲。它通過將像素值替換為其鄰域窗口內的中值來實現去噪的效果。
2 步驟
- 定義一個固定大小的鄰域窗口,通常是一個正方形或矩形窗口。
- 將窗口內的像素值按照從小到大的順序進行排序。
- 取排序后的像素值的中間值作為中心像素的新值,用于替換原始像素值。
- 對圖像中的每個像素都應用上述步驟,以完成中值濾波。
- 如下圖3×3的內核(也可看做窗口,或者模版):
2.6 均值濾波
1 原理
是一種常用的線性濾波方法,通過計算鄰域窗口內像素值的平均值來實現去噪的效果。但會破壞圖像細節,使圖像變得模糊。
2 舉例
3×3的內核(也可看做窗口,或者模版)中,包含了9個點及對應像素值。在對該區域進行濾波過程為:對P1~P9九個像素的灰度值求平均,代替中間P5的灰度值。
中值濾波和均值濾波的區別
- 中值濾波能夠更好地處理脈沖噪聲或孤立的離群點,因為它選擇中值作為替代值,而不受異常值的影響。
- 中值濾波去除脈沖噪聲或孤立的離群點,均值濾波能夠平滑信號或圖像。
- 相比之下中值濾波運行速度更快
2.7 投影濾波
1 原理
將點投影到一個參數化模型上,這個參數化模型可以是平面、圓球、圓柱、錐形等進行投影濾波。
2 投影模型
3 核心代碼
//本例使用axtby+ez+d=O的平面模型創建一個系數為a=b=d=0,c=1的平面,也就是X-Y平面。z軸相關的點全部投影在X-Y面上
pcl::Ptrcoefficients(newpcl::ModelCoefficients());
coefficients->values.resize(4);
coefficients->values[0]=coefficients->values[1]=O;
coefficients->values[2]=1.0;
coefficients->values[3]=0;
2.8 高斯濾波
1 原理
用于平滑圖像并減少圖像中的噪聲。基于高斯函數的數學原理,通過在圖像上應用高斯核來實現平滑效果。
2 步驟
1)確定高斯核的大小和標準差:高斯核的大小是指核的尺寸,通常是一個奇數,例如3x3、5x5、7x7等。標準差決定了高斯函數的形狀,控制了濾波的平滑程度。標準差越大,平滑效果越明顯。
2)生成高斯核:根據確定的高斯核大小和標準差,生成一個二維的高斯權值矩陣。高斯權值矩陣中的每個元素表示了相應位置上的權重值,這些權重值是根據高斯函數計算得出的。
3)對圖像進行卷積:將生成的高斯核應用于原始圖像。對于圖像中的每個像素,將高斯核與其周圍的像素進行卷積操作。卷積操作即將高斯核的每個元素與對應位置的像素值相乘,并將結果進行求和。
4)更新像素值:將卷積操作得到的結果作為濾波后的像素值,用于更新原始圖像中對應位置的像素值。這樣就完成了一次高斯濾波操作。
5)對整個圖像重復濾波操作:重復步驟3和步驟4,對整個圖像進行濾波操作,直到所有像素都被更新為濾波后的值。
3 卷積原理
卷積操作中,高斯核與圖像中的每個像素以及其周圍的鄰域像素進行加權求和。卷積的結果是通過將每個像素的值乘以對應位置的高斯核權重,并將所有結果相加得到的。假定中心點的坐標是(0,0),那么取距離它最近的8個點坐標,為了計算,需要設定σ的值。假定σ=1.5,則模糊半徑為1的高斯模板如下:
這個時候我們我們還要確保這九個點加起來為1(高斯模板的特性),這9個點的權重總和等于0.4787147,因此上面9個值還要分別除以0.4787147,得到最終的高斯模板。
假設現有9個像素點,灰度值(0-255)的高斯濾波計算如下:
通常創建KD樹,可以用于加速搜索濾波器的卷積操作。
4 KD-Tree
依次搜尋每個點云數據周圍的k個鄰域點,并計算出采樣點到其k個鄰域點的平均歐式距離。原始點云數據經過KD-Tree 搜索后的數據集為,定義di為已經得到的點pi到其k個鄰域點的平均距離,σ為di的標準差。
- σ值越大,權值分布越平緩。因此鄰域各點值對輸出值的影響越大,最終結果造成圖像越模糊;
- 核大小固定,σ值越小,權值分布越突起。因此鄰域各點值對輸出值的影響越小,圖像變化越小。假如中心點權值為1,其他點權值為0,最終結果是圖像沒有任何變化;
- σ固定時,核越大圖像越模糊;
- σ固定時,核越小圖像變化越小。
5 核心代碼
//—————基于高斯核函數的卷積濾波實現-—---------
pcl::CaussianKernelkernel;//濾波器類輸入+輸出
kernel.setSigma(4);//高斯函數的標準方差,決定函數的寬度
kernel.setThresho1dRelativeToSigma(4)://設置相對Sigma參數的距離閾值
kernel.setThreshold(0.05);//設置距離閾值,若點間距高大于閾值則不予考慮
court<<"Kernelmade”<::Ptrtree(newpcl:KdTree);
tree->setInputCloud(cloud);
court<>convolution;
convolution.setKernel(kernel);//設置卷積核
convolution.setInputCloud(cloud);
convolution.setNumberOfThreads(8);//卷積操作的線程數量為8
convolution.setSearchMethod(tree);//搜索方法為tree
convolution.setRadiusSearch(0.01);//積操作的半徑搜索參數為0.01
cout<" ConvolutionStart"<
3 深度學習的去噪算法
1)自編碼器(Autoencoder):自編碼器是一種無監督學習的神經網絡模型,可以用于圖像和信號的去噪。它通過將輸入信號壓縮到低維編碼空間,然后再將其解碼回原始信號空間,從而學習到信號的有用特征,并去除噪聲。
2)基于卷積神經網絡(CNN)的去噪算法:CNN在圖像處理領域廣泛應用,可以用于圖像去噪。通過在網絡中使用卷積層、池化層和反卷積層等結構,CNN可以學習到圖像的局部特征,并對噪聲進行去除。
3)基于生成對抗網絡(GAN)的去噪算法:GAN是一種由生成器和判別器組成的對抗性模型。在圖像去噪中,生成器負責將噪聲圖像轉換為清晰圖像,而判別器則用于判斷生成器輸出的圖像是否真實。通過不斷迭代訓練,生成器可以生成更加清晰的圖像,從而實現去噪效果。
4)基于變分自編碼器(VAE)的去噪算法:VAE是一種生成模型,可以學習到輸入數據的潛在表示。在去噪中,VAE可以學習到噪聲數據的潛在分布,并生成去噪后的圖像或信號。
5)基于深度殘差網絡(DnCNN)的去噪算法:DnCNN是一種專門設計用于圖像去噪的深度殘差網絡。它通過堆疊多個卷積層和殘差連接來學習到圖像中的噪聲特征,并去除噪聲。
-
神經網絡
+關注
關注
42文章
4771瀏覽量
100719 -
算法
+關注
關注
23文章
4607瀏覽量
92840 -
深度學習
+關注
關注
73文章
5500瀏覽量
121113 -
點云數據
+關注
關注
0文章
13瀏覽量
1508
原文標題:匯總!三維點云去噪算法,涉及深度學習等
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論