• 大小: 3KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: C/C++
  • 标签: 图像处理  

资源简介

计算出两幅图像之间的亚像素对位的精度,通过模板匹配得到评分Mat,计算出在Mat上最大匹配的点,再最大匹配点周围,利用评分,找出亚像素的off,实际测试精度在0.02像素。

资源截图

代码片段和文件信息


//亚像素计算
Point2f CalcSubpixLocation(float score[9])
{
Point loc[9] = { { -1 -1 }{ 0 -1 }{ 1 -1 }{ -1 0 }{ 0 0 }{ 1 0 }{ -1 1 }{ 0 1 }{ 1 1 } };
int x1 x2 x3 x4;
int y1 y2 y3 y4;
int x1y1 x2y1 x1y2 x2y2 x1y3 x3y1;
float c1 c1x1 c1y1 c1x2 c1y2 c1x1y1;

x1 = x2 = x3 = x4 = 0;
y1 = y2 = y3 = y4 = 0;
x1y1 = x2y1 = x1y2 = x2y2 = x1y3 = x3y1 = 0;
c1 = c1x1 = c1y1 = c1x2 = c1y2 = c1x1y1 = 0;

for (int i = 0; i<9; i++)
{
int lx = loc[i].x;
int ly = loc[i].y;

x1 += lx;
x2 += lx*lx;
x3 += lx*lx*lx;
x4 += lx*lx*lx*lx;

y1 += ly;
y2 += ly*ly;
y3 += ly*ly*ly;
y4 += ly*ly*ly*ly;

x1y1 += lx*ly;
x2y1 += lx*lx*ly;
x1y2 += lx*ly*ly;
x2y2 += lx*lx*ly*ly;
x1y3 += lx*ly*ly*ly;
x3y1 += lx*lx*lx*ly;

float sc = score[i];
c1 += sc;
c1x1 += sc*lx;
c1y1 += sc*ly;
c1x2 += sc*lx*lx;
c1y2 += sc*ly*ly;
c1x1y1 += sc*lx*ly;
}

Mat MA = Mat::zeros(6 6 CV_32FC1);
MA.at(0 0) = 9.f;
MA.at(0 1) = x1;
MA.at(0 2) = y1;
MA.at(0 3) = x2;
MA.at(0 4) = x1y1;
MA.at(0 5) = y2;

MA.at(1 0) = x1;
MA.at(1 1) = x2;
MA.at(1 2) = x1y1;
MA.at(1 3) = x3;
MA.at(1 4) = x2y1;
MA.at(1 5) = x1y2;

MA.at

评论

共有 条评论