• 大小: 547KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: C/C++
  • 标签: RANSAC  Ziv  

资源简介

这个是很经典的RANSAC算法实现,里面改成了中文注释

资源截图

代码片段和文件信息

#include 
#include “LineParamEstimator.h“

LineParamEstimator::LineParamEstimator(double delta) : m_deltaSquared(delta*delta) {}
/*****************************************************************************/
 /* 
 * Compute the line parameters  [n_xn_ya_xa_y] 
 * 通过输入的两点来确定所在直线,采用法线向量的方式来表示,以兼容平行或垂直的情况 
 * 其中n_xn_y为归一化后,与原点构成的法线向量,a_xa_y为直线上任意一点 
 */  
/*****************************************************************************/ */
void LineParamEstimator::estimate(std::vector &data std::vector ¶meters)
{
parameters.clear();
if(data.size()<2)
return;
double nx = data[1]->y - data[0]->y;
double ny = data[0]->x - data[1]->x;// 原始直线的斜率为K,则法线的斜率为-1/k 
double norm = sqrt(nx*nx + ny*ny);

parameters.push_back(nx/norm);
parameters.push_back(ny/norm);
parameters.push_back(data[0]->x);
parameters.push_back(data[0]->y);
}
/*****************************************************************************/
/* 
 * Compute the line parameters  [n_xn_ya_xa_y] 
 * 使用最小二乘法,从输入点中拟合出确定直线模型的所需参量 
 */  

void LineParamEstimator::leastSquaresEstimate(std::vector &data 
std::vector ¶meters)
{
double meanX meanY nx ny norm;
double covMat11 covMat12 covMat21 covMat22; // The entries of the symmetric covarinace matrix
int i dataSize = data.size();

parameters.clear();
if(data.size()<2)
return;

meanX = meanY = 0.0;
covMat11 = covMat12 = covMat21 = covMat22 = 0;
for(i=0; i meanX +=data[i]->x;
meanY +=data[i]->y;

covMat11 +=data[i]->x * data[i]->x;
covMat12 +=data[i]->x * data[i]->y;
covMat22 +=data[i]->y * data[i]->y;
}

meanX/=dataSize;
meanY/=dataSize;

covMat11 -= dataSize*meanX*meanX;
  covMat12 -= dataSize*meanX*meanY;
covMat22 -= dataSize*meanY*meanY;
covMat21 = covMat12;

if(covMat11<1e-12) {
nx = 1.0;
  ny = 0.0;
}
else {     //lamda1 is the largest eigen-value of the covariance matrix 
           //and is used to compute the eigne-vector corresponding to the smallest
           //eigenvalue which isn‘t computed explicitly.
double lamda1 = (covMat11 + covMat22 + sqrt((covMat11-covMat22)*(covMat11-covMat22) + 4*covMat12*covMat12)) / 2.0;
nx = -covMat12;
ny = lamda1 - covMat22;
norm = sqrt(nx*nx + ny*ny);
nx/=norm;
ny/=norm;
}
parameters.push_back(nx);
parameters.push_back(ny);
parameters.push_back(meanX);
parameters.push_back(meanY);
}
/*****************************************************************************/  
/* 
 * Given the line parameters  [n_xn_ya_xa_y] check if 
 * [n_x n_y] dot [data.x-a_x data.y-a_y] < m_delta 
 * 通过与已知法线的点乘结果,确定待测点与已知直线的匹配程度;结果越小则越符合,为 
 * 零则表明点在直线上 
 */ 
bool LineParamEstimator::agree(std::vector ¶meters Point2D &data)
{
double signedDistance = parameters[0]*(data.x-parameters[2]) + parameters[1]*(data.y-parameters[3]); 
return ((signedDistance*signed

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-05-30 10:51  Ziv Yaniv\
     目录           0  2014-05-29 15:17  Ziv Yaniv\Debug\
     文件       11706  2014-05-29 15:17  Ziv Yaniv\Debug\BuildLog.htm
     文件        2048  2014-05-29 15:16  Ziv Yaniv\Debug\RANSAC.exe.embed.manifest
     文件       93184  2014-05-29 15:17  Ziv Yaniv\Debug\vc90.idb
     文件      135168  2014-05-29 15:17  Ziv Yaniv\Debug\vc90.pdb
     文件        5102  2014-05-30 10:22  Ziv Yaniv\LineParamEstimator.cpp
     文件        2693  2004-05-12 16:15  Ziv Yaniv\LineParamEstimator.h
     文件        1765  2004-05-12 16:17  Ziv Yaniv\ParameterEsitmator.h
     文件          22  2004-05-11 19:13  Ziv Yaniv\Point2D.cpp
     文件         442  2014-05-29 15:17  Ziv Yaniv\Point2D.h
     文件        4725  2004-05-11 20:20  Ziv Yaniv\RANSAC.dsp
     文件         535  2004-05-11 19:34  Ziv Yaniv\RANSAC.dsw
     文件     1854464  2014-05-30 14:32  Ziv Yaniv\RANSAC.ncb
     文件       53760  2004-05-12 17:05  Ziv Yaniv\RANSAC.opt
     文件         246  2004-05-12 16:30  Ziv Yaniv\RANSAC.plg
     文件         877  2014-05-30 10:51  Ziv Yaniv\RANSAC.sln
     文件       18944  2014-05-30 14:32  Ziv Yaniv\RANSAC.suo
     文件        6242  2014-05-29 15:16  Ziv Yaniv\RANSAC.vcproj
     文件        1409  2014-05-30 14:32  Ziv Yaniv\RANSAC.vcproj.ZQL-PC.ZQL.user
     文件       13096  2004-05-12 16:18  Ziv Yaniv\Ransac.h
     文件        3970  2014-05-30 10:51  Ziv Yaniv\RansacExample.cpp
     文件        1819  2004-05-12 17:04  Ziv Yaniv\Readme
     文件         286  2004-05-12 15:31  Ziv Yaniv\Unix_Makefile

评论

共有 条评论