무작위 일관성 샘플링 RANSAC

PCL 공식 웹사이트 참조: Random Sample Consensus 모델 사용 방법 — PCL

1. RANSAC 소개

RANSAC ( RA ndom  SAMple Consensus , Random Sampling Consensus) 알고리즘은 "outliers"를 포함하는 데이터 집합에서 수학적 모델  매개변수를 올바르게 추정하기 위한 반복 알고리즘 입니다 . "이상값"은 일반적으로 일치의 불일치 및 추정 곡선의 이상값과 같은 데이터의 노이즈를 나타냅니다. 따라서 RANSAC은 "이상점" 탐지 알고리즘이기도 합니다. RANSAC 알고리즘은 하나의 확률에서만 결과를 낼 수 있는 불확실한 알고리즘이며 이 확률은 반복 횟수가 증가할수록 증가합니다.

  • 기본 가정: 데이터는 "내부 점"과 "외부 점"으로 구성됩니다. "inliers"는 모델의 매개변수를 구성하는 데이터이고 "outliers"는 모델에 적합하지 않은 데이터입니다. 또 다른 필요한 가정은 RANSAC이 데이터에서 선택된 모델 매개변수를 최적으로 추정할 수 있다는 것입니다.

2. 알고리즘의 기본 개념과 과정

2.1 RANSAC 알고리즘 프로세스

RANSAC은 반복적으로 데이터 세트를 선택하여 모델을 추정하고 더 나은 모델을 추정할 때까지 반복합니다.
구체적인 구현 단계는 다음 단계로 나눌 수 있습니다.

  1. 모델을 추정할 수 있는 가장 작은 데이터 세트 선택;(직선 피팅의 경우 2포인트, Homography 매트릭스 계산의 경우 4포인트)
  2. 이 데이터 세트를 사용하여 데이터 모델을 계산하십시오.
  3. 이 모델에 모든 데이터를 가져와 "inliers"의 수를 계산; (일정 오차 범위 내에서 현재 반복 롤아웃 모델에 적합한 데이터를 축적)
  4. 현재 모델과 이전에 출시된 최상의 모델 간의 "내부 포인트" 수를 비교하고 "내부 포인트" 수가 가장 많은 모델 매개변수 및 "내부 포인트" 수를 기록합니다.
  5. 반복이 종료되거나 현재 모델이 충분할 때까지("내부 점의 수가 특정 수보다 큼") 1-4단계를 반복합니다.

2.2 RANSAC 알고리즘의 장점과 단점

  • RANSAC의 한 가지 장점은 모델 매개변수의 강력한 추정을 가능하게 한다는 것입니다. 즉, 데이터 세트에 많은 수의 이상값이 있는 경우에도 높은 정확도로 매개변수를 추정할 수 있습니다.
  • RANSAC의 단점은 이러한 매개변수를 계산하는 데 걸리는 시간에 상한선이 없다는 것입니다. 제한된 반복 횟수로 계산을 수행하면 얻은 솔루션이 최적이 아닐 수 있으며 데이터에 잘 맞는 솔루션이 아닐 수도 있습니다. 이러한 방식으로 RANSAC은 트레이드오프를 제공하며 더 많은 반복을 계산함으로써 합리적인 모델을 생성할 확률이 높아집니다. RANSAC의 또 다른 단점은 문제별 임계값이 필요하다는 것입니다.
  • RANSAC은 특정 데이터 세트에 대해 하나의 모델만 추정할 수 있습니다. 2개(또는 그 이상)의 모델이 있는 모델 접근 방식에 대해 RANSAC은 모델을 찾지 못할 수 있습니다.

3. PCL에서 RANSAC 사용의 참고 예

3.1 선형 및 구형 모델 피팅

참고예 : Random Sample Consensus model — PCL 사용법

///核心代码注释
 std::vector<int> inliers;

  // created RandomSampleConsensus object and compute the appropriated model
  pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr
    model_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ> (cloud));//球模型
  pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr
    model_p (new pcl::SampleConsensusModelPlane<pcl::PointXYZ> (cloud));//线模型
  if(pcl::console::find_argument (argc, argv, "-f") >= 0)//判断主函数输入参数
  {
    
    //输入参数-f时为线模型model_p
    pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_p);//设置RANSAC模型
    ransac.setDistanceThreshold (.01);//设置阈值
    ransac.computeModel();//迭代计算
    ransac.getInliers(inliers);//获取内点inliners
  }
  else if (pcl::console::find_argument (argc, argv, "-sf") >= 0 )
  {
    
    
    pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_s);
    ransac.setDistanceThreshold (.01);
    ransac.computeModel();
    ransac.getInliers(inliers);
  }


3.2 2-2 포인트 클라우드 수집 장비 자동 보정

참조 자료: PCL_ "항목에서 마스터까지 포인트 클라우드 라이브러리 PCL" 루틴에서 2-2 포인트 클라우드 획득 장비의 자동 보정

Supongo que te gusta

Origin blog.csdn.net/weixin_43949950/article/details/126407831
Recomendado
Clasificación