統計濾波

2021-02-21 芯視tof
1.原理介紹

StatisticalOutlierRemoval濾波器主要可以用來剔除離群點,或者測量誤差導致的粗差點
濾波思想為:對每一個點的鄰域進行一個統計分析,計算它到所有臨近點的平均距離。假設得到的結果是一個高斯分布,其形狀是由均值和標準差決定,那麼平均距離在標準範圍(由全局距離平均值和方差定義)之外的點,可以被定義為離群點並從數據中去除。

2.源碼剖析
std::vector<int> nn_indices (mean_k_);std::vector<float> nn_dists (mean_k_);std::vector<float> distances (indices_->size ());indices.resize (indices_->size ());removed_indices_->resize (indices_->size ());int oii = 0, rii = 0;  

第一步:計算每個點到所有K鄰域點的平均距離。
int valid_distances = 0;for (int iii = 0; iii < static_cast<int> (indices_->size ()); ++iii)  {  if (!pcl_isfinite (input_->points[(*indices_)[iii]].x) ||      !pcl_isfinite (input_->points[(*indices_)[iii]].y) ||      !pcl_isfinite (input_->points[(*indices_)[iii]].z))  {    distances[iii] = 0.0;    continue;  }
if (searcher_->nearestKSearch ((*indices_)[iii], mean_k_ + 1, nn_indices, nn_dists) == 0) { distances[iii] = 0.0; PCL_WARN ("[pcl::%s::applyFilter] Searching for the closest %d neighbors failed.\n", getClassName ().c_str (), mean_k_); continue; }
double dist_sum = 0.0; for (int k = 1; k < mean_k_ + 1; ++k) dist_sum += sqrt (nn_dists[k]); distances[iii] = static_cast<float> (dist_sum / mean_k_); valid_distances++;}

第二步:計算整個點集距離容器的平均值和標準差。
//Estimate the mean and the standard deviation of the distance vectordouble sum = 0, sq_sum = 0;for (size_t i = 0; i < distances.size (); ++i){  sum += distances[i];  sq_sum += distances[i] * distances[i];}double mean = sum / static_cast<double>(valid_distances);  //距離平均值double variance = (sq_sum - sum * sum / static_cast<double>(valid_distances)) / (static_cast<double>(valid_distances) - 1);  //方差double stddev = sqrt (variance);  //標準差//getMeanStd (distances, mean, stddev);
double distance_threshold = mean + std_mul_ * stddev;

第三步:依次將距離閾值與每個點的distances[iii]比較 ,超出閾值的點被標記為離群點,並將其移除。
    for (int iii = 0; iii < static_cast<int> (indices_->size ()); ++iii)    {            if ((!negative_ && distances[iii] > distance_threshold) || (negative_ && distances[iii] <= distance_threshold))    {      if (extract_removed_indices_)        (*removed_indices_)[rii++] = (*indices_)[iii];      continue;    }
indices[oii++] = (*indices_)[iii]; }
indices.resize (oii); removed_indices_->resize (rii);}

3.示例代碼
#include <pcl/io/pcd_io.h>  //文件輸入輸出#include <pcl/point_types.h>  //點類型相關定義#include <pcl/visualization/cloud_viewer.h>  //點雲可視化相關定義#include <pcl/filters/statistical_outlier_removal.h>  //濾波相關#include <pcl/common/common.h>  
#include <iostream>#include <vector>
using namespace std;
int main(){ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); pcl::PCDReader r; r.read<pcl::PointXYZ>("data\\table_scene_lms400.pcd", *cloud); cout << "there are " << cloud->points.size() << " points before filtering." << endl;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filter(new pcl::PointCloud<pcl::PointXYZ>); pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor; sor.setInputCloud(cloud); sor.setMeanK(50); sor.setStddevMulThresh(1.0); sor.setNegative(false); sor.filter(*cloud_filter);
pcl::PCDWriter w; w.writeASCII<pcl::PointXYZ>("data\\table_scene_lms400_filter.pcd", *cloud_filter); cout << "there are " << cloud_filter->points.size() << " points after filtering." << endl;
system("pause"); return 0;}

4.示例代碼結果

統計濾波前

統計濾波後

相關焦點

  • 卡爾曼與卡爾曼濾波
    卡爾曼濾波(Kalman filtering)一種利用線性系統狀態方程,通過系統輸入輸出觀測數據,對系統狀態進行最優估計的算法。由於觀測數據中包括系統中的噪聲和幹擾的影響,所以最優估計也可看作是濾波過程。數據濾波是去除噪聲還原真實數據的一種數據處理技術, Kalman濾波在測量方差已知的情況下能夠從一系列存在測量噪聲的數據中,估計動態系統的狀態.
  • 基於MATLAB圖像處理的中值濾波、均值濾波以及高斯濾波的實現與對比
    基於MATLAB圖像處理的中值濾波、均值濾波以及高斯濾波的實現與對比
  • 卡爾曼濾波應用實例
    打開APP 卡爾曼濾波應用實例 發表於 2017-10-30 09:27:47
  • 卡爾曼濾波是怎麼回事?
    小編準時送知識到~每天三分鐘,就學一點點~----濾波關於濾波,一位自知乎大神這樣說:一位專業課的教授給我們上課的時候,曾談到:filtering is weighting(濾波即加權)。濾波的作用就是給不同的信號分量不同的權重。
  • MATLAB中的非線性空間濾波基礎
    IPT中常用於生成非線性空間濾波的一個工具是函數ordfilt2,它可以生成統計排序( order-statistic )濾波器(也稱為排序濾波器,rank filter )。它們都是非線性空間濾波器,其響應基於對圖像鄰域中所包含的像素進行排序,然後使用排序結果確定的值來替代鄰域中的中心像素的值。
  • 濾波電感的選擇_濾波電感的作用
    打開APP 濾波電感的選擇_濾波電感的作用 佚名 發表於 2019-11-07 15:02:39   濾波電感的選擇   濾波電感,該如何進行選擇呢?
  • 卡爾曼濾波及其衍生算法在SOC估計中的應用
    卡爾曼濾波作為一種去除幹擾數據,獲得優質估計結果的優秀算法,在許多領域得到應用。無人機定位、實驗數據處理以及動力電池的SOC、SOH等,需要作出參數估計的領域都有應用。本文意在初步的表述我可以理解到的卡爾曼濾波及其衍生算法的物理意義和算法間的區別。
  • 電容濾波電路&電感濾波電路作用原理
    無源濾波的主要形式有電容濾波、電感濾波和複式濾波(包括倒L型、LC濾波、LCπ型濾波和RCπ型濾波等)。有源濾波的主要形式是有源RC濾波,也被稱作電子濾波器。直流電中的脈動成分的大小用脈動係數來表示,此值越大,則濾波器的濾波效果越差。
  • 直流電源為什麼要濾波?濾波的作用是什麼?
    直流電源為什麼要濾波?濾波的作用是什麼?   濾波   濾波(Wave filtering)是將信號中特定波段頻率濾除的操作,是抑制和防止幹擾的一項重要措施。濾波分為經典濾波和現代濾波。   濾波是將信號中特定波段頻率濾除的操作,是抑制和防止幹擾的一項重要措施。是根據觀察某一隨機過程的結果,對另一與之有關的隨機過程進行估計的概率理論與方法。
  • 論文推薦 | 鄺英才,呂志平,王方超,李林陽,楊凱淳:GNSS/聲學聯合定位的自適應濾波算法
    (10)而對狀態不符值統計量的構造形式進行分析可以發現,該統計量不適宜在本文聯合模型中作為自適應選權濾波的判別依據。自適應因子函數選擇兩段函數為例,其中,經多次仿真試算,將閾值常數c值取為1,共設計了4種方案:方案1:常規卡爾曼濾波算法解算海底應答器坐標。方案2:利用狀態不符值統計量進行異常判斷,單因子自適應濾波算法解算海底應答器坐標。方案3:利用預測殘差統計量進行異常判斷,單因子自適應濾波算法解算海底應答器坐標。
  • 如何選擇濾波電阻和濾波電容的數值
    打開APP 如何選擇濾波電阻和濾波電容的數值 電工之家 發表於 2019-09-07 09:12:38   根據波特率合理選擇濾波電阻和濾波電容的數值。
  • 圖像與濾波
    上圖中,藍線是原始的波形,綠線是低通濾波lowpass後的波形。可以看到,綠線的波動比藍線小很多,非常平滑。下面是高通濾波的例子。上圖中,綠線進行低通濾波和高通濾波後,得到兩根黑色的曲線,它們的波形跟原始的黃線和紅線是完全一致的。
  • 使用Matlab圖像處理(三)——圖像濾波原理
    假設我們有一個8*8的圖像,我們需要用均值濾波來對其進行處理。比如我們相對圖像的(1,1)元素進行濾波,我們就將均值濾波模板的中間放到(1,1)處,然後把以(1,1)為圓心,1為半徑的像素分別乘以模板中對應位置的係數,求和之後球去個平均數即為(1,1)處濾波後的像素值。
  • 濾波電容原理
    濾波電容是指安裝在整流電路兩端用以降低交流脈動波紋係數提升高效平滑直流輸出的一種儲能器件。由於濾波電路要求儲能電容有較大電容量。所以,絕大多數濾波電路使用電解電容。電解電容由於其使用電解質作為電極(負極)而得名。   電解電容的一端為正極,另一端為負極,不能接反。正極端連接在整流輸出電路的正端,負極連接在電路的負端。在所有需要將交流電轉換為直流電的電路中,設置濾波電容會使電子電路的工作性能更加穩定,同時也降低了交變脈動波紋對電子電路的幹擾。
  • 【數字圖像處理系列五】圖像濾波之空間濾波:圖像平滑降噪和圖像銳化
    ,圖像濾波分為空間域濾波和頻率域濾波,頻率域濾波我們將在下一節重點說明。圖像空間濾波對於圖像處理主要體現在兩個方面:(1) 平滑圖像,達到降低圖像噪音的效果(平滑空間濾波)(2) 銳化圖像,主要目的是突出灰度的過渡部分,即突出圖像的邊緣(銳化空間濾波)先上圖,感受一下空間濾波對圖像處理的效果(原圖、經過拉普拉斯處理後的圖像):
  • 基於MATLAB的中值濾波算法實現
    在實時圖像採集中,不可避免的會引入噪聲,尤其是幹擾噪聲和椒鹽噪聲,噪聲的存在嚴重影響邊緣檢測的效果,中值濾波是一種基於排序統計理論的非線性平滑計數
  • 濾波電容的作用是什麼?
    其中濾波,是電容器非常常見的作用之一。那麼你是否知道什麼是濾波電容呢?還有濾波電容的作用是什麼? 濾波電容 電容是兩個彼此靠近又相互絕緣的導體。 濾波電容是指安裝在整流電路兩端用以降低交流脈動波紋係數提升高效平滑直流輸出的一種儲能器件。由於濾波電路要求儲能電容有較大電容量。所以,絕大多數濾波電路使用電解電容。電解電容由於其使用電解質作為電極(負極)而得名。
  • 電源線濾波器的濾波電路級數與截止頻率、濾波效果之間的關係
    電子設計師中普遍存在一種誤解,這就是認為電源線濾波器的濾波電路級數越多,濾波效果越好。因此,當電磁兼容試驗沒有通過時,他們會在電源線上再串聯上一個濾波器。有時,串聯一個濾波器後能夠改善濾波效果;但有時電磁超標的情況並沒有得到改善。
  • 電容濾波的原理及作用
    因為電容的充、放電功能,起到高充低補作用,減小了原電壓的波動幅度,用於此處的電解電容按功能稱作【濾波】電容。 另外強調一下:電容器的結構是,兩塊互相靠近、中間絕緣的金屬板,工作時中間絕緣是不能導電的,所謂電容器能通交流、阻直流,只是現象不是本質,也給了很多人的困惑不解。 電容濾波的原理及作用 常用的濾波電路有無源濾波和有源濾波兩大類。
  • 整流濾波電路實驗
    將470uF的濾波電容換成100uF,然後單擊仿真電源開關進行動態分析。用示波器的顯示曲線測量輸出電壓的峰值和脈動電壓的峰-峰值,並記錄測量結果。7. 12.在EWB平臺上建立如圖2所示的全波整流電容濾波電路,示波器按圖2設置。13.單擊仿真電源開關,激活整流濾波電路進行動態分析。在坐標紙上畫出波形曲線圖,並記錄輸出電壓峰值和脈動電壓峰-峰值。