最小二乘法曲面拟合及C++代码,用于求取图像定位的亚像素级精度

本文介绍了如何使用最小二乘法进行曲面拟合,以达到亚像素级精度的图像定位。通过设定曲面公式并求解误差最小化的矩阵表达式,可以找到最佳拟合参数。C++代码示例展示了在OpenCV库中进行矩阵运算的实际应用。
摘要由CSDN通过智能技术生成

曲面拟合是指在三维坐标系中,将多个点拟合为一个曲面的过程。曲面拟合的主要作用是可以找到极值点。在图像定位领域,用于寻找亚像素级精度。
在这里插入图片描述
在本里中,曲面的公式采用:
在这里插入图片描述
(也可以采用其他的曲面公式,原理一样)。
并使用最小二乘法进行求解:是下面式子的误差最小:在这里插入图片描述
则应该满足:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
写为矩阵的表达式:
在这里插入图片描述

下一步就是要根据拟合点的坐标信息,解出[a,b,c,d,e,f]。在本例子中,共选取9个点,对曲面进行拟合(具体可以根据实际情况进行选择)。9点的坐标可以表示为。
在这里插入图片描述
则[a,b,c,d,e,f]的解可以直接根据9个点的z坐标进行解出。C++代码如下所示:(以下代码是采用opencv库进行的矩阵运算,进攻参考)。

#include <iostream>

#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using std::cout;
using std::endl;
using namespace cv;

//曲面拟合函数,最终得到亚像素级精度
Point SurfaceFitting(Mat &CorrResult);

Point SurfaceFitting(Mat &CorrResult)
{
   
	/*
	原始坐标矩阵
	float matrixdata[] = {  51,25,27,27,15,15,
						    25,51,27,15,27,15,
							27,27,25,15,15, 9,
							27,15,15,15, 9, 9,
							15,27,15, 9,15, 9,
							15,15, 9, 9, 9, 9 };
	*/
	double Time = (double)cvGetTickCount();
	//此值为matrixdata矩阵计算出来的,可以作为初始参数使用
	float Edata[36] = {
    0.50000107, 1.7764522e-07, -2.3374371e-08, -1.0000021, -3.3659094e-07, 0.16666715,
						-2.7998499e-07, 0.50000054, 8.6149221e-08, 4.4305315e-07, -1.0000013, 0.16666681,
						-1.5373146e-08, 2.3572157e-07, 0.25000003, -0.25000003, -0.25000057, 0.25000012,
						-1.0000023, -6.5050045e-07, -0.25, 2.4166713, 0.25000131, -0.75000113,
						
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值