1. 程式人生 > 其它 >Corner-case 資料閉環

Corner-case 資料閉環

程式處理點雲

 流行的開源庫主要有 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