Corner-case 資料閉環
阿新 • • 發佈:2022-04-21
程式處理點雲
流行的開源庫主要有 PCL 和 Open3D
open3d的點雲基本操作: 視覺化、降取樣、法向量、裁剪和繪製點雲
點雲三維座標和顏色是分開的,分別是points和colors
Python點雲資料處理(三)濾波與RANSAC分割
並依據 RANSAC 在ROS中實現對地面點雲的分割 分割出地面點雲以減少對障礙物聚類的影響。 引入PCL點雲庫,PCL點雲庫中有標準的RANSAC演算法介面,我們可以通過呼叫它實現更加快速,穩定濾除地面點雲。 地面應是多數點通過的,因此在上述點雲圖像中隨機選取三個點確定一個平面,設定一個tolerance, 計算其他所有點距該平面的距離。 若距離小於tolerance的點認為是inliners點,否則為outliners點, inliners中點數量最多對應的平面認為是best fit。
程式碼實現
import open3d as o3d pcd = o3d.io.read_point_cloud("../test_data/fragment.pcd") plane_model, inliers = pcd.segment_plane(distance_threshold=0.01, ransac_n=3, num_iterations=1000) # 模型引數 [a, b, c, d] = plane_model print(f"Plane equation: {a:.2f}x + {b:.2f}y + {c:.2f}z + {d:.2f} = 0") #顯示 inlier_cloud = pcd.select_by_index(inliers) inlier_cloud.paint_uniform_color([1.0, 0, 0]) # inliers為紅色 outlier_cloud = pcd.select_by_index(inliers, invert=True) o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud], zoom=0.8, front=[-0.4999, -0.1659, -0.8499], lookat=[2.1813, 2.0619, 2.0999], up=[0.1204, -0.9852, 0.1215])
C++ PCL常用函式
PCL常用函式 1. 刪除無效點(nan點) ——pcl::removeNaNFromPointCloud 2. 判斷單個點是否是無效點 ——pcl::isFinite 3. 求點的極值 ——pcl::getMinMax3D 4. 點雲與點雲ptr型別互相轉換 inliers_ptr cloud_ptr 5. 點雲拷貝 ——pcl::copyPointCloud 6. 點雲的插入與刪除 ——insert、push_back和erase 7. 指定點雲的顏色顯示 ——PointCloudColorHandlerCustom 8. PointCloud和PCLPointCloud2型別互相轉換——toPCLPointCloud2和fromPCLPointCloud2 9. 提取已知索引之外的點雲 —— pcl::ExtractIndices 10. 計算質心 ——pcl::compute3DCentroid 11. 計算兩個向量之間的夾角 ——pcl::getAngle3D
讀寫
點雲
# 讀取檔案
pcd = o3d.io.read_point_cloud(path) # path為檔案路徑
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud],width=600,height=600)
# 儲存檔案
o3d.io.write_point_cloud(path, pcd) # path為檔案路徑
o3d.io.write_point_cloud(path, inlier_cloud)
o3d.io.write_point_cloud(path, outlier_cloud)
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud],width=600,height=600)
圖片
img = o3d.io.read_image("y7.png")
o3d.io.write_image("天使.jpg", img)
o3d.visualization.draw_geometries()
print(img)
pcl_viewer in_pcd_road.pcd
地面點雲剔除方法
deep_cluster(深度影象的快速分割)
基於角度和高度的地面點剔除演算法
地面平面擬合(Ground Plane Fitting)
點雲分割,分離出障礙物點雲
GLFW 是配合 OpenGL 使用的輕量級工具程式庫,
縮寫自 Graphics Library Framework(圖形庫框架
前視窗DISPLAY環境變數的值。echo $DISPLAY 返回值是空。
解決:把DISPLAY的值改成 :0.0 即可 export DISPLAY=:0.0
Docker預設是不提供對GUI的支援的
Bounding Boxes邊界框
點雲如何實現聚類,並使用PCL庫函式實現點雲聚類,
下面就需要使用邊界框將點雲框出來 :查詢聚類點雲各維度的最小值最大值,作為邊界框的引數
基於深度圖的點雲聚類方法
基於深度圖的點雲聚類方法
1.掃描線補償 車輛左側的黑色車輛就造成了點雲缺失
2.地面點移除
3.深度圖生成 深度圖指的是將點雲的資料轉為平面資料形式進行顯示,每個畫素可以儲存該點的距離、intensity等值,
這種形式與kdtree或者octree不同的是,深度圖有利於快速查詢得到某一點的相鄰點,
並且這些點是具有一定順序關係的,而不是依靠距離度量來查詢相鄰
地面點障礙物快速分割聚類
4.鄰域搜尋與閾值設計
嘗試用聚類演算法進行點雲分割
點雲聚類方法可以被大致總結為四種類型,
基於3D歐式空間的方法,
使用超柵格或者超點來聚類點雲的方法,
在深度圖上的改進單通道連通域標記方法,
和在深度圖上的的改進兩通道連通域標記方法
模型
01.語義分割
模型之DeepLabv3+
語義分割(Semantic Segmentation)和例項分割(Instance Segmentation)
資料 Cityscapes
Cityscapes資料集,即城市景觀資料集,這是一個新的大規模資料集,其中包含一組不同的立體視訊序列,記錄在50個不同城市的街道場景中,
除了一組較大的20000弱註釋幀外,還包含5000幀的高質量畫素級註釋
Cityscapes資料集包含2975張圖片。包含了街景圖片和對應的標籤。大小為113MB
全部有二十個類:
person, bird, cat, cow, dog, horse, sheep, aeroplane, bicycle, boat, bus, car, motorbike, train,
bottle, chair, dining table, potted plant, sofa, tv / monitor
Overlap 閾值
02.目標檢測
Object detector--- proposals 進行 計算 IoUs ,設定閾值
其他
華為智慧汽車解決方案 HI (HUAWEI Intelligent Automotive Solution)
參考:
https://blog.csdn.net/QLeelq/article/details/121999763?spm=1001.2014.3001.5502
【點雲處理技術之PCL】隨機取樣一致演算法(Random sample consensus,RANSAC)https://blog.csdn.net/QLeelq/article/details/122079778?spm=1001.2014.3001.5502
https://github.com/AbangLZU/plane_fit_ground_filter
https://www.cityscapes-dataset.com/
CODA: A Real-World Road Corner Case Dataset for Object Detection in Autonomous Driving
https://github.com/AbangLZU