opencv3 最小二乘拟合平面

2018-01-26 10:32:29来源:oschina作者:KyJason人点击

分享
/*
*
*
*最小二乘拟合平面,平面方程:Ax+By+Cz=D
*A = plane.at(0,0)
*B = plane.at(1,0)
*C = plane.at(2,0)
*D = plane.at(3,0)
*
* */
void fitPlane(const cv::Mat &points, cv::Mat& plane){
int rows = points.rows;
int cols = points.cols;
cv::Mat centroid = cv::Mat::zeros(1,cols,CV_32FC1);
for(int i=0;i for(int j=0;j centroid.at(0,i) += points.at(j,i);
}
centroid.at(0,i)/=rows;
}
cv::Mat points2 = cv::Mat::ones(rows,cols,CV_32FC1);
for(int i=0;i for(int j=0;j points2.at(i,j) = points.at(i,j) - centroid.at(0,j) ;
}
}
cv::Mat A,W,U,V;
cv::gemm(points2,points,1,NULL,0,A,CV_GEMM_A_T);
SVD::compute(A,W,U,V);plane = cv::Mat::zeros(cols+1,1,CV_32FC1);
for (int c = 0; c plane.at(c,0) = V.at(cols-1,c);
plane.at(cols,0) += plane.at(c,0)*centroid.at(0,c);
}
}

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台