vector<CvPoint3D32f> MachineVisionDetection::RansacMachine(vector<CvPoint3D32f> SourcePoint,int k)
{
int index1,index2,index3;
int iterations=0;//迭代标记
double Len=0;
vector<double> Dist;
StereoEllipse result1;
vector<CvPoint3D32f> TestData(3);
vector<CvPoint3D32f> ReturnPoint;
int countnum = SourcePoint.size();
while(!iterations)
{
index1=rand()%countnum;
index2=index1;
index3=index1;
if(abs(index1-index2)<15&&abs(index1-index3)&&abs(index2-index3))
{
index2=rand()%countnum;
index3=rand()%countnum;
}
TestData[0]=SourcePoint[index1];
TestData[1]=SourcePoint[index2];
TestData[2]=SourcePoint[index3];
result1=fitStereoEllipse(TestData);
CvPoint3D32f pointcenter;
pointcenter=result1.center;
for(int i=0;i<countnum;i++)
{
Dist[i]=cv::sqrt((SourcePoint[i].x-pointcenter.x)*(SourcePoint[i].x-pointcenter.x)+
(SourcePoint[i].y-pointcenter.y)*(SourcePoint[i].y-pointcenter.y)+
(SourcePoint[i].z-pointcenter.z)*(SourcePoint[i].z-pointcenter.z));
}
int j=0;
for(int i=0;i<countnum;i++)
{
Len=abs(Dist[i]-result1.r);
if(Len<0.15*result1.r)
{
ReturnPoint[j]=SourcePoint[i];
j++;
}
}
int no=ReturnPoint.size();
if(no>0.8*countnum)
{
iterations=1;
}
}
return ReturnPoint;
}
RANSAC Machine--C++ code
最新推荐文章于 2023-11-15 07:00:00 发布