相机矫正(c++ 实现)

相机校正流程(硬件)

Hessian角点检测

请看链接角点检测

goodFeaturesToTrack(gray,c,1000,0.1,5,Mat(),3,false,0.04);//Hessian强角点检测
//参数说明
//gray 输入图像
//c 输出角点坐标
//查找的角点总数
//0.1 检测到的角点的质量水平(0.01-0.1之间)
//Mat() 范围 Mat() 表示所有
//3  窗口默认为3
//false  是否开启True:Hessian角点检测 false则使用Shi Tomasi算法
//0,004	Hessian角点的k值默认为 0。004

原理opencv亚像素角点
函数:



void cv::cornerSubPix( InputArray _image, InputOutputArray _corners,
                       Size win, Size zeroZone, TermCriteria criteria )
cv::cornerSubPix(grayImg, pts, cv::Size(11, 11), cv::Size(-1, -1), 
cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
//参数说明
//grayImg 输入图像
//pts 整数角点 由goodFeaturesToTrack函数计算出来,在函数计算结果保存在此变量中
// cv::Size(11, 11) x,y方向窗口
//cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1)
//设置结束模式:CV_TERMCRIT_EPS:小于误差阈值结束;CV_TERMCRIT_ITER 达到迭代次数结束
			

单应矩阵:计算相机的内外参
最小中值鲁棒算法
PROSAC

Mat cv::findHomography	(	InputArray 	srcPoints,
                                InputArray 	dstPoints,
                                int 	method = 0,
                                double 	ransacReprojThreshold = 3,
                                OutputArray 	mask = noArray(),
                                const int 	maxIters = 2000,
                                const double 	confidence = 0.995 
)
//参数说明:
//srcPoints 原平面坐标
//dstPoints 目标平面坐标
//method:方法:0最小二乘法 1:基于RANSAC的鲁棒算法 2LMEDS - 最小中值鲁棒算法3 RHO: PROSAC-基于PROSAC的鲁棒算法
//ransacReprojThreshold:最大允许重投影错误阈值(仅用于RANSAC和RHO方法)该参数通常设置在1到10的范围内
//mask 掩码;可选通常由鲁棒算法(RANSAC或LMEDS)设置。
//maxIters RANSAC算法迭代次数,默认2000
//confidence 置信度 0-1

张定友标定:

  1. 通过移动相机或者平面拍摄标定板各种角度的图片,一般拍摄20张;
  2. 检测图片中的特征点;
  3. 计算理想无畸变的情况下5个内部参数和所有的外部参数;
  4. 通过最小二乘法估算,实际存在径向畸变下的畸变系数;
  5. 极大似然法,优化估计,提升估计精度;

在这里插入图片描述
在这里插入图片描述
代码:

int main(void)
{int i;
	Mat image0=imread("image0.png");
	Mat image1=imread("image0.1.png");
	Mat imageout;
	vector<int> x,x1;
	vector<int> y,y1;
	Mat aChannels[3];Mat gray,gray1;	vector<Point2f> pts_src;vector<Point2f> pts_dst; 
	Mat b;Mat c;cv::Mat d ;
	get_image_points(image0,x,y);
	get_image_points(image1,x1,y1);
	cvtColor(image0,gray,COLOR_BGR2GRAY);
	cvtColor(image1,gray1,COLOR_BGR2GRAY);
	findChessboardCorners(gray,Size(8,6),pts_src);
	findChessboardCorners(gray1,Size(8,6),pts_dst);
	cout<<pts_src.size()<<endl;
	cout<<pts_dst.size()<<endl;
	Mat h=findHomography(pts_src,pts_dst);
	cout<<h<<endl;
	imshow("image0",image0);
	imshow("image1",image1);
	warpPerspective(image0,imageout,h,image0.size());
	imshow("imageout",imageout);
	waitKey();

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值