利用python實現激光雷達LAS數據濾波的7種方式,使用laspy讀寫

激光雷達(LiDAR)數據在實際應用中可能受到噪聲和不完美的測量影響,因此數據去噪和濾波方法變得至關重要,以提高數據質量和準確性。以下是一些常用的激光雷達數據去噪與濾波方法。
原始數據如下:
在這里插入圖片描述

1. 移動平均濾波(Moving Average Filter):

移動平均濾波是一種簡單的濾波方法,通過計算數據點周圍一定范圍內數據的平均值來平滑數據。這種方法適用于去除高頻噪聲,但可能會導致邊緣信息模糊。

代碼:

import laspy
import numpy as np
from scipy.signal import medfilt
from skimage.metrics import structural_similarity as ssim# 讀取LAS文件
in_file_path = 'F:/激光雷達/武漢地調中心/1500N點云.las'
out_file_path_ma = 'F:/激光雷達/武漢地調中心/output_moving_average.las'in_las = laspy.file.File(in_file_path, mode='r')# 提取點云數據
x = in_las.x
y = in_las.y
z = in_las.z# 應用移動平均濾波
window_size = 5
filtered_z_ma = np.convolve(z, np.ones(window_size)/window_size, mode='same')# 創建新的LAS文件并保存濾波后數據
out_las_ma = laspy.file.File(out_file_path_ma, mode='w', header=in_las.header)
out_las_ma.x = x
out_las_ma.y = y
out_las_ma.z = filtered_z_ma
out_las_ma.close()

2. 中值濾波(Median Filter):

中值濾波是一種非線性濾波方法,將數據點周圍的值按大小排序,然后取中間值作為濾波結果。中值濾波能夠有效去除脈沖噪聲和異常值,但可能會降低數據的細節。

代碼:

import laspy
import numpy as np
from scipy.signal import medfilt
from skimage.metrics import structural_similarity as ssim# 讀取LAS文件
in_file_path = 'F:/激光雷達/武漢地調中心/1500N點云.las'
out_file_path_med = 'F:/激光雷達/武漢地調中心/output_median.las'in_las = laspy.file.File(in_file_path, mode='r')# 提取點云數據
x = in_las.x
y = in_las.y
z = in_las.z# 應用中值濾波
window_size_med = 3
filtered_z_med = medfilt(z, kernel_size=window_size_med)# 創建新的LAS文件并保存濾波后數據
out_las_med = laspy.file.File(out_file_path_med, mode='w', header=in_las.header)
out_las_med.x = x
out_las_med.y = y
out_las_med.z = filtered_z_med
out_las_med.close()

3. 加權移動平均濾波(Weighted Moving Average Filter):

加權移動平均濾波將不同位置的數據點賦予不同的權重,根據權重計算加權平均值。這種方法可以根據數據分布的特點更好地平衡平滑和保留細節。

代碼:

import laspy
import numpy as np
from scipy.signal import medfilt
from skimage.metrics import structural_similarity as ssim# 讀取LAS文件
in_file_path = 'F:/激光雷達/武漢地調中心/1500N點云.las'
out_file_path_weighted_ma = 'F:/激光雷達/武漢地調中心/output_weighted_moving_average.las'in_las = laspy.file.File(in_file_path, mode='r')# 提取點云數據
x = in_las.x
y = in_las.y
z = in_las.z# 應用加權移動平均濾波
window_size = 5
weights = np.arange(1, window_size + 1).astype(float)  # 轉換為浮點數類型
weights /= np.sum(weights)
filtered_z_weighted_ma = np.convolve(z, weights, mode='same')# 創建新的LAS文件并保存濾波后數據
out_las_weighted_ma = laspy.file.File(out_file_path_weighted_ma, mode='w', header=in_las.header)
out_las_weighted_ma.x = x
out_las_weighted_ma.y = y
out_las_weighted_ma.z = filtered_z_weighted_ma
out_las_weighted_ma.close()

4. 高斯濾波(Gaussian Filter):

高斯濾波基于高斯函數對數據進行平滑處理。它可以保留細節的同時有效地去除噪聲,適用于光滑信號。

代碼:

import laspy
import numpy as np
from scipy.ndimage import gaussian_filter1d
from skimage.metrics import structural_similarity as ssim# 讀取LAS文件
in_file_path = 'F:/激光雷達/武漢地調中心/1500N點云.las'
out_file_path_gaussian = 'F:/激光雷達/武漢地調中心/output_gaussian.las'in_las = laspy.file.File(in_file_path, mode='r')# 提取點云數據
x = in_las.x
y = in_las.y
z = in_las.z# 應用高斯濾波
sigma = 1.0  # 高斯核標準差
filtered_z_gaussian = gaussian_filter1d(z, sigma=sigma)# 創建新的LAS文件并保存濾波后數據
out_las_gaussian = laspy.file.File(out_file_path_gaussian, mode='w', header=in_las.header)
out_las_gaussian.x = x
out_las_gaussian.y = y
out_las_gaussian.z = filtered_z_gaussian
out_las_gaussian.close()

5. 波形去除濾波(Waveform Removal Filter):

這種濾波方法主要用于去除激光雷達回波中的地面信號,以便更好地檢測障礙物。該方法需要先對地面進行建模,然后將地面信號從數據中減去。

代碼:

import laspy
import numpy as np
from scipy.signal import detrend
from skimage.metrics import structural_similarity as ssim# 讀取LAS文件
in_file_path = 'F:/激光雷達/武漢地調中心/1500N點云.las'
out_file_path_waveform_removal = 'F:/激光雷達/武漢地調中心/output_waveform_removal.las'in_las = laspy.file.File(in_file_path, mode='r')# 提取點云數據
x = in_las.x
y = in_las.y
z = in_las.z# 應用波形去除濾波
filtered_z_waveform_removal = detrend(z)# 創建新的LAS文件并保存濾波后數據
out_las_waveform_removal = laspy.file.File(out_file_path_waveform_removal, mode='w', header=in_las.header)
out_las_waveform_removal.x = x
out_las_waveform_removal.y = y
out_las_waveform_removal.z = filtered_z_waveform_removal
out_las_waveform_removal.close()

6. 自適應濾波(Adaptive Filtering):

自適應濾波方法根據數據點的局部特征動態調整濾波參數。例如,自適應中值濾波根據數據分布的變化調整濾波窗口的大小,以平衡噪聲去除和細節保留。

代碼:

import laspy
import numpy as np
from scipy.signal import wiener
from skimage.metrics import structural_similarity as ssim# 讀取LAS文件
in_file_path = 'F:/激光雷達/武漢地調中心/1500N點云.las'
out_file_path_adaptive = 'F:/激光雷達/武漢地調中心/output_adaptive.las'in_las = laspy.file.File(in_file_path, mode='r')# 提取點云數據
x = in_las.x
y = in_las.y
z = in_las.z# 應用自適應濾波
try:filtered_z_adaptive = wiener(z)
except (ValueError, ZeroDivisionError):# 處理除以零或無效值的情況filtered_z_adaptive = z  # 可以選擇保持原始數據,或者使用其他濾波方法來代替# 創建新的LAS文件并保存濾波后數據
out_las_adaptive = laspy.file.File(out_file_path_adaptive, mode='w', header=in_las.header)
out_las_adaptive.x = x
out_las_adaptive.y = y
out_las_adaptive.z = filtered_z_adaptive
out_las_adaptive.close()

7. 小波變換濾波(Wavelet Transform Filter):

小波變換濾波可以將信號分解成不同頻率的子信號,然后根據需要去除高頻噪聲,再將信號重構回去。這種方法在處理包含多尺度信息的數據時非常有用。

代碼:

import laspy
import numpy as np
import pywt
from skimage.metrics import structural_similarity as ssim# 讀取LAS文件
in_file_path = 'F:/激光雷達/武漢地調中心/1500N點云.las'
out_file_path_wavelet = 'F:/激光雷達/武漢地調中心/output_wavelet.las'in_las = laspy.file.File(in_file_path, mode='r')# 提取點云數據
x = in_las.x
y = in_las.y
z = in_las.z# 應用小波變換濾波
wavelet_name = 'db4'  # 小波基函數的名稱
level = 2  # 分解的級別
coeffs = pywt.wavedec(z, wavelet_name, level=level)
coeffs[1:] = [pywt.threshold(coeff, value=0.5, mode='soft') for coeff in coeffs[1:]]  # 對細節系數進行軟閾值處理
filtered_z_wavelet = pywt.waverec(coeffs, wavelet_name)# 創建新的LAS文件并保存濾波后數據
out_las_wavelet = laspy.file.File(out_file_path_wavelet, mode='w', header=in_las.header)
out_las_wavelet.x = x
out_las_wavelet.y = y
out_las_wavelet.z = filtered_z_wavelet
out_las_wavelet.close()

對比結果發現,誤差指標顯示,自適應濾波(Adaptive Filtering)和小波變換濾波(Wavelet Transform Filter)處理效果較好,其中后者最佳。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36715.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kubernetes中PV和PVC

目錄 一、PV、PVC簡介 二、PV、PVC關系 三、創建靜態PV 1.配置nfs存儲 2.定義PV 3.定義PVC 4.測試訪問 四、 搭建 StorageClass nfs-client-provisioner ,實現 NFS 的動態 PV 創建 1. 配置nfs服務 2.創建 Service Account 3.使用 Deployment 來創建 NFS P…

Figma中文社區來啦,云端協作設計你準備好了嗎?

Figma是改變產品設計協作方式的重要工具,但由于沒有中文社區,對國內設計師的約束較大。而擁有全中文UI 界面、功能齊全的即時設計資源廣場,恰好彌補了Figma的這一短板,它也將取代Figma成為設計師新寵。 1、UI組件集 Figma中文社區替代即時設計資源廣場,擁有海量豐富的UI設計組…

【BEV Review】論文 Delving into the Devils of Bird’s-eye-view 2022-9 筆記

背景 一般來說,自動駕駛車輛的視覺傳感器(比如攝像頭)安裝在車身上方或者車內后視鏡上。無論哪個位置,攝像頭所得到的都是真實世界在透視視圖(Perspective View)下的投影(世界坐標系到圖像坐標系…

ssm柚子云電子商城java圖書購物電子商務管理jsp源代碼

本項目為前幾天收費幫學妹做的一個項目,Java EE JSP項目,在工作環境中基本使用不到,但是很多學校把這個當作編程入門的項目來做,故分享出本項目供初學者參考。 一、項目描述 ssm柚子云電子商城 系統有2權限:前臺、后…

SpringBoot筆記:SpringBoot 集成 Dataway 多數據源配置(二)

文章目錄 前言核心代碼和配置yml 配置注入多數據源常用Spi實現swagger 配置自定義 Udf指定數據源進行查詢 前言 之前簡單介紹了一下 Dataway 使用,本文繼續介紹一下它的多數據源配置和使用。 核心代碼和配置 yml 配置 # springboot多環境配置 #端口,…

JavaScript應用:五子棋游戲實戰開發

🏆作者簡介,黑夜開發者,全棧領域新星創作者?,CSDN博客專家,阿里云社區專家博主,2023年6月csdn上海賽道top4。 🏆數年電商行業從業經驗,歷任核心研發工程師,項目技術負責…

面試熱題(螺旋矩陣)

給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素 一看到這個大家有沒有想到 就是一個螺旋形狀,那這道題我們應該怎么解決? 我們先來仔細的看,它這種螺旋形狀的遍歷是先【右-下-左-上】…

Docker中Tomcat部署步驟

第一次訪問沒有東西。

為什么我不推薦任何人用C語言作為編程啟蒙第一課?

前言 寫了20多年的代碼,之前做過阿里的高級架構師,在技術這條路上跌跌撞撞了很多,我今天分享一些我個人的自學方法給各位。為什么我會說:不推薦任何人用C語言作為編程啟蒙第一課? 這里有很多同學要站出來說了&#x…

實現CP指令

一、文件的打開創建 #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags); flags: O_RDONLY 只讀 O_WRONLY 只寫 O_RDWR 可讀可寫 int open(const char *pathname, int flags, mode_t mode); 如果 …

VsCode美化 - VsCode自定義 - VsCode自定義背景圖

VsCode美化 - VsCode自定義 - VsCode自定義背景圖&#xff1a;添加二次元老婆圖到VsCode 前言 作為一個二刺螈&#xff0c;VsCode用久了&#xff0c;總覺得少了些什么。是啊&#xff0c;高效的代碼生產工具中怎么能沒有老婆呢&#xff1f; 那就安裝一個VsCode插件把老婆添加…

章節7:Burp Intruder模塊

章節7&#xff1a;Burp Intruder模塊 參考資料 https://portswigger.net/burp/documentation/desktop/tools/intruder 01 Intruder模塊作用與原理 原理 http://xxx.xx.com/bbs/index.php?namewuyanzu&mottogo 對請求參數進行修改&#xff0c;分析響應內容&#xff0…

Linux 內核第一版 (v0.01) 開源代碼解讀

探索Linux v0.01的內部結構&#xff0c;Linux內核經常被認為是一個龐大的開源軟件。在撰寫本文時&#xff0c;最新版本是v6.5-rc5&#xff0c;包含36M行代碼。不用說&#xff0c;Linux是幾十年來許多貢獻者辛勤工作的成果。 Linux 內核首個開源版本 (v0.01) 的體積非常小&…

四、Dubbo擴展點加載機制

四、Dubbo擴展點加載機制 4.1 加載機制概述 Dubbo良好的擴展性與框架中針對不同場景使用合適設計模式、加載機制密不可分 Dubbo幾乎所有功能組件都是基于擴展機制&#xff08;SPI&#xff09;實現的 Dubbo SPI 沒有直接使用 Java SPI&#xff0c;在它思想上進行改進&#xff…

競賽項目 深度學習的視頻多目標跟蹤實現

文章目錄 1 前言2 先上成果3 多目標跟蹤的兩種方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟蹤過程4.1 存在的問題4.2 基于軌跡預測的跟蹤方式 5 訓練代碼6 最后 1 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 基于深度學習的視頻多目標跟蹤實現 …

全網最牛,Appium自動化測試框架-關鍵字驅動+數據驅動實戰(二)

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 util 包 util 包…

數據可視化工具LightningChart .NET正式發布v10.5.1——擁有全新的3D新功能

LightningChart.NET完全由GPU加速&#xff0c;并且性能經過優化&#xff0c;可用于實時顯示海量數據-超過10億個數據點。 LightningChart包括廣泛的2D&#xff0c;高級3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D餅/甜甜圈&#xff0c;地理地圖和GIS圖表以及適用于科學…

網絡安全專業術語英文縮寫對照表

因在閱讀文獻過程中經常遇到各種專業縮寫&#xff0c;所以把各種縮寫總結了一下。 因能力有限&#xff0c;錯誤在所難免&#xff0c;歡迎進行糾錯與補充&#xff1a;https://github.com/piaolin/CSAbbr 滲透相關 縮寫全稱解釋備注XSSCross Site Script Attack跨站腳本攻擊為…

ResNet創新點總結

ResNet&#xff08;Residual Networks&#xff09;是深度學習中的一個重要架構&#xff0c;其創新點主要體現在解決了深層神經網絡訓練中的梯度消失和梯度爆炸問題&#xff0c;從而使得可以構建更深的神經網絡。以下是 ResNet 的創新點總結&#xff1a; ??1. 殘差連接&#x…

nlohmann json:通過items遍歷object/array

//官方的例子 #include <iostream> #include <nlohmann/json.hpp>using json = nlohmann::json;int main() {// create JSON valuesjson j_object = {{"one", 1}, {"two", 2}};json j_array = {1, 2, 4, 8, 16};// example for an objectfor (…