本文中灰度匹配采用基于相关系数的方法,根据视差估计得到左像点 在右像中的同名点
,然后以
为中心,确定搜索窗口的范围,然后计算搜索窗口范围内各点与左像中点
的相关系数
,当搜索窗口内各点均计算完毕之后,找出相关系数最大的
,如果最大值大于给定的阈值(如0.80),则将该点确定为匹配点,如果均小于阈值则表示该匹配为误匹配,通过该方法即可得到剔除粗差的加密点。相关系数匹配测度公式为:
OnCorrelation(IplImage *left, Iplimage *right)
{
int w = left->width;
int h = left->height;
double r;
double sum_x = 0;
double sum_y = 0;
double x_ave = 0;
double y_ave = 0;
double cov = 0;
double Dx = 0, Dy = 0;
double Dxy = 0;
for(int i=0; i<h; i++)
{
for(int j=0; j<w; j++)
{
sum_x += pixval(left, j, i);
sum_y += pixval(right, j, i);
}
}
x_ave = sum_x/(w*h);
y_ave = sum_y/(w*h);
for(int i=0; i<h; i++)
{
for(int j=0; j<w; j++)
{
cov += (pixval(left, i, j)-x_ave)(pixval(right, i, j)- y_ave);
Dx = (pixval(left, i ,j) - x_ave)(pixval(left, i, j)- x_ave);
Dy = (pixval(right, i, j) - y_ave)(pixval(right, i, j)-y_ave);
}
}
Dxy = sqrt(Dx*Dy);
r = cov/Dxy;
if(r<0)
r = -r;
return r;
}
static float pixval(IplImage* img, int x, int y)
{
return cvGet2D(img, y, x).val[0];
}
“`