2015-05-31 42 views
8

Tôi cần tìm sự khác biệt về chuyển đổi và xoay giữa hai đám mây điểm 3d. Đối với điều này tôi đang nhìn vào PCL, vì nó có vẻ lý tưởng.Thư viện đám mây điểm, đăng ký mạnh mẽ của hai đám mây điểm

Trên dữ liệu thử nghiệm sạch Tôi có điểm gần nhất làm việc, nhưng cho kết quả lạ (mặc dù tôi có thể đã thực hiện không chính xác ...) Tôi có pcl::estimateRigidTransformation hoạt động, và nó có vẻ tốt hơn, mặc dù tôi cho rằng sẽ tệ hơn dữ liệu.

Câu hỏi của tôi là:

Hai đám mây sẽ là ồn ào, và mặc dù họ nên chứa những điểm giống nhau, sẽ có một số khác biệt. Cách tốt nhất để giải quyết vấn đề này là gì?

Tôi có nên tìm các tính năng tương ứng trong hai đám mây để bắt đầu và THEN sử dụng estimateTransform không? Hoặc tôi nên xem xét một hàm RANSAC để loại bỏ các ngoại lệ? ICP có phải là cách tốt hơn để đi hơn estimateRigidTransform không?

+0

Tôi mới dùng PCL, vì vậy hãy tha thứ cho tôi nếu điều này không hữu ích. Có [Thư viện đăng ký PCL] (http://pointclouds.org/documentation/tutorials/walkthrough.php#registration) mà tôi nghĩ sẽ hữu ích cho mục đích của bạn. – dhanushka

+0

Chỉ cần làm theo một số hướng dẫn đầu tiên về ICP. Và nó bắt đầu vào ứng dụng Bộ lọc nào bạn sử dụng, tôi thực sự thích bộ lọc lưới Voxel nhanh. ICP không phải là cách tốt nhất để làm như vậy. Đầu tiên tìm hiểu các ví dụ và xây dựng của riêng bạn (từ thân cây) pcl ICP. ICP từ ví dụ này chỉ là một hàm làm việc, thay vào đó bạn muốn có một preformer thực (một ICP preformer là một ICP được xây dựng cho ứng dụng của bạn) xây dựng của riêng bạn! –

Trả lời

6

Thiết lập thuật toán đăng ký đám mây điểm mạnh có thể là một nhiệm vụ đầy thử thách với một loạt các tùy chọn khác nhau, hyperparameters và kỹ thuật được đặt chính xác để có được kết quả mạnh mẽ.

Tuy nhiên, Point Cloud Library đi kèm với một tập hợp toàn bộ chức năng được thực hiện trước để giải quyết loại tác vụ này.Điều duy nhất còn lại để làm là hiểu những gì từng khối đang làm và sau đó thiết lập một đường ống gọi là ICP bao gồm các khối xếp chồng lên nhau.

Một ICP đường ống có thể làm theo hai con đường khác nhau:

1. đăng ký Lặp đi lặp lại thuật toán

Con đường dễ dàng bắt đầu ngay lập tức áp dụng một lặp gần nhất Point Algorithm trên Input-Cloud (IC) để toán học với tham chiếu cố định-đám mây (RC) bằng cách sử dụng phương pháp điểm gần nhất. ICP có một giả định lạc quan rằng các đám mây hai điểm là đủ gần (tốt trước khi quay R và dịch T) và việc đăng ký sẽ hội tụ mà không có sự liên kết ban đầu nữa.

Đường dẫn khóa học này có thể bị kẹt ở mức tối thiểu địa phương và do đó thực hiện rất kém vì dễ bị lừa bởi bất kỳ loại không chính xác nào trong dữ liệu đầu vào đã cho.

2. Tính năng dựa trên thuật toán đăng ký

Để khắc phục người này đã làm việc trên đang phát triển tất cả các loại phương pháp và ý tưởng để vượt qua đăng ký biểu diễn xấu. Ngược lại với thuật toán đăng ký lặp lại đơn thuần, việc đăng ký dựa trên tính năng lần đầu tiên sử dụng lốp để tìm tương ứng đòn bẩy cao hơn giữa các đám mây hai điểm để tăng tốc độ xử lý và cải thiện độ chính xác. Các phương thức được capsuled và sau đó nhúng vào pipleline đăng ký để tạo thành một mô hình đăng ký hoàn chỉnh.

Bức tranh sau đây từ PCL documentation cho thấy như vậy một đường ống dẫn Registation:

PCL pairwise registration

Như bạn có thể thấy một đăng ký cặp nên chạy bước tính toán máng khác nhau để thực hiện tốt nhất. Các bước đơn là:

  1. thu thập dữ liệu: Một đám mây đầu vào và một đám mây tham chiếu được đưa vào các thuật toán.

  2. keypoint Ước tính: Một keypoint (interest point) là một điểm bên trong đám mây điểm đó có những đặc điểm sau đây:

    1. nó có một rõ ràng, tốt nhất về mặt toán học có cơ sở, định nghĩa,
    2. nó có vị trí được xác định rõ trong không gian hình ảnh, cấu trúc hình ảnh cục bộ xung quanh điểm quan tâm giàu nội dung thông tin địa phương

    Điểm nổi bật như vậy trong đám mây điểm rất hữu ích vì tổng của chúng đặc trưng cho một đám mây điểm và giúp làm cho các phần khác nhau của nó có thể phân biệt được.

    pcl::NarfKeypoint 
    pcl::ISSKeypoint3D< PointInT, PointOutT, NormalT > 
    pcl::HarrisKeypoint3D< PointInT, PointOutT, NormalT > 
    pcl::HarrisKeypoint6D< PointInT, PointOutT, NormalT > 
    pcl::SIFTKeypoint< PointInT, PointOutT > 
    pcl::SUSANKeypoint< PointInT, PointOutT, NormalT, IntensityT > 
    

    Thông tin chi tiết: PCL Keypoint - Documentation

  3. Mô tả keypoint - mô tả Tính năng: Sau khi phát hiện keypoint chúng ta tiếp tục tính toán một mô tả cho mỗi một trong số họ.Trái ngược với các mô tả toàn cầu mô tả một đối tượng hoặc đám mây điểm hoàn chỉnh, các mô tả địa phương cố gắng giống với hình dạng và ngoại hình chỉ trong một vùng lân cận quanh một điểm và do đó rất phù hợp để biểu diễn nó về mặt khớp. " (Dirk Holz et al.)

    pcl::FPFHEstimation< PointInT, PointNT, PointOutT > 
    pcl::NormalEstimation< PointInT, PointOutT > 
    pcl::NormalEstimationOMP< PointInT, PointOutT > 
    pcl::OURCVFHEstimation< PointInT, PointNT, PointOutT > 
    pcl::PrincipalCurvaturesEstimation< PointInT, PointNT, PointOutT > 
    pcl::IntensitySpinEstimation< PointInT, PointOutT > 
    

    Thông tin chi tiết: PCL Features - Documentation

  4. Correspondence Dự toán: Nhiệm vụ tiếp theo là để tìm sự tương ứng giữa các keypoint tìm thấy trong những đám mây điểm. Thông thường, người ta tận dụng lợi thế của các bộ mô tả tính toán địa phương được tính toán và so khớp từng bộ mô tả với đối tác tương ứng của mình trong đám mây điểm khác. Tuy nhiên do thực tế là hai lần quét từ một cảnh tương tự không nhất thiết phải có cùng số lượng mô tả tính năng vì một đám mây có thể có nhiều dữ liệu hơn, nên chúng ta cần chạy một quá trình từ chối tương ứng riêng biệt.

    pcl::registration::CorrespondenceEstimation< PointSource, PointTarget, Scalar > 
    pcl::registration::CorrespondenceEstimationBackProjection< PointSource, PointTarget, NormalT, Scalar > 
    pcl::registration::CorrespondenceEstimationNormalShooting< PointSource, PointTarget, NormalT, Scalar > 
    
  5. Thư từ chối: Một trong những phương pháp phổ biến nhất để thực hiện từ chối thư là sử dụng RANSAC (Đồng thuận mẫu ngẫu nhiên). Nhưng PCL đi kèm với các thuật toán từ chối hơn là một giá trị nó đem lại cho họ một cái nhìn gần gũi hơn:

    pcl::registration::CorrespondenceRejectorSampleConsensus<PointT> 
    pcl::registration::CorrespondenceRejectorDistance 
    pcl::registration::CorrespondenceRejectorFeatures::FeatureContainer<FeatureT> 
    pcl::registration::CorrespondenceRejectorPoly< SourceT, TargetT > 
    

    Thông tin chi tiết: PCL Module registration - Documentation

  6. Transformation Dự toán: Sau khi thư từ mạnh mẽ giữa hai đám mây điểm được tính toán một Absolute Thuật toán định hướng được sử dụng để tính toán phép biến đổi 6DOF (6 độ tự do) được áp dụng trên đám mây đầu vào để phù hợp với đám mây điểm tham chiếu. Có nhiều cách tiếp cận thuật toán khác nhau để làm như vậy, PCL tuy nhiên bao gồm việc triển khai dựa trên Singular Value Decomposition (SVD). Một ma trận 4x4 được tính toán mô tả phép quay và bản dịch cần thiết để phù hợp với các đám mây điểm.

    pcl::registration::TransformationEstimationSVD< PointSource, PointTarget, Scalar > 
    

    Thông tin chi tiết: PCL Module registration - Documentation

Tiếp tục đọc:

+0

Cảm ơn, đó là một câu trả lời tuyệt vời! –

2

Nếu đám mây của bạn là ồn ào và sự liên kết ban đầu của bạn không phải là rất tốt, quên đi áp dụng ICP ngay từ đầu. Hãy thử lấy các điểm chính trên các đám mây của bạn, và sau đó ước tính các tính năng của các điểm chính này. Bạn có thể kiểm tra các thuật toán điểm/tính năng khác nhau và chọn thuật toán hoạt động tốt hơn cho trường hợp của bạn.

Sau đó, bạn có thể đối sánh các tính năng này và nhận được thư từ. Lọc các thư tín đó trong vòng lặp RANSAC để nhận các nội tuyến mà bạn sẽ sử dụng để lấy một phép biến đổi ban đầu. CorrespondenceRejectorSampleConsensus sẽ giúp bạn trong bước này.

Khi bạn đã áp dụng phép chuyển đổi này, khi đó bạn có thể sử dụng ICP để sàng lọc lần cuối.

Đường ống dẫn dầu là một cái gì đó như:

  1. Detect keypoins trong cả hai đám mây điểm
  2. tính năng Ước tính của các keypoint
  3. tính năng trận đấu và có được sự tương ứng
  4. Hủy bỏ bản sao và áp dụng vòng lặp RANSAC-ish để được inliers
  5. Lấy chuyển đổi ban đầu và áp dụng cho một đám mây điểm
  6. Sau khi bo đám mây thứ ban đầu được căn chỉnh, áp dụng đăng ký ICP cho tinh lọc

LƯU Ý: Đường ống này chỉ hữu ích nếu cả hai đám mây điểm đều có cùng thang điểm. Trong trường hợp khác, bạn cần tính toán hệ số tỷ lệ giữa các đám mây.

+0

Bạn muốn nói gì với cùng một tỷ lệ? Ý bạn là các đám mây điểm phải có cùng kích thước? –

+1

@AramGevorgyan Đôi khi hai đám mây điểm của cùng một cảnh có thể được truy xuất với một thang đo khác.Nếu bạn có được chúng với một máy ảnh RGB-D, họ sẽ có cùng một quy mô tuyệt đối (mét, chân ...). Tuy nhiên, có thể có một số trường hợp bạn có thể truy xuất các đám mây điểm với thang đo khác nhau hoặc tùy ý (ví dụ: Cấu trúc-từ-Chuyển động) và trước tiên bạn cần phải chuyển đổi tất cả các đám mây của bạn sang cùng một tỷ lệ để áp dụng đường ống ở trên. – Finfa811

Các vấn đề liên quan