18bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling/*
28bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * Copyright (C) 2011 The Android Open Source Project
38bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling *
48bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * Licensed under the Apache License, Version 2.0 (the "License");
58bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * you may not use this file except in compliance with the License.
68bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * You may obtain a copy of the License at
78bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling *
88bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling *      http://www.apache.org/licenses/LICENSE-2.0
98bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling *
108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * Unless required by applicable law or agreed to in writing, software
118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * distributed under the License is distributed on an "AS IS" BASIS,
128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * See the License for the specific language governing permissions and
148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling * limitations under the License.
158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling */
168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling/*$Id: db_feature_matching.cpp,v 1.4 2011/06/17 14:03:30 mbansal Exp $*/
188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling/*****************************************************************
208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling*    Lean and mean begins here                                   *
218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling*****************************************************************/
228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#include "db_utilities.h"
248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#include "db_feature_matching.h"
258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#ifdef _VERBOSE_
268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#include <iostream>
278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#endif
288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingint AffineWarpPoint_NN_LUT_x[11][11];
318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingint AffineWarpPoint_NN_LUT_y[11][11];
328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingfloat AffineWarpPoint_BL_LUT_x[11][11];
348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingfloat AffineWarpPoint_BL_LUT_y[11][11];
358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr7x7_u(unsigned char **f_img,unsigned char **g_img,int x_f,int y_f,int x_g,int y_g)
388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    unsigned char *pf,*pg;
408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,g,fgsum,f2sum,g2sum,fsum,gsum,fg_corr,den;
418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-3;
448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-3;
458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=0.0; f2sum=0.0; g2sum=0.0; fsum=0.0; gsum=0.0;
468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
1028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=49.0f*fgsum-fsum*gsum;
1118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(49.0f*f2sum-fsum*fsum)*(49.0f*g2sum-gsum*gsum);
1128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(den!=0.0)
1138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
1148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(fg_corr>=0.0) return(fg_corr*fg_corr/den);
1158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        return(-fg_corr*fg_corr/den);
1168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
1178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(0.0);
1188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
1198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr9x9_u(unsigned char **f_img,unsigned char **g_img,int x_f,int y_f,int x_g,int y_g)
1218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
1228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    unsigned char *pf,*pg;
1238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,g,fgsum,f2sum,g2sum,fsum,gsum,fg_corr,den;
1248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
1258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-4;
1278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-4;
1288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=0.0; f2sum=0.0; g2sum=0.0; fsum=0.0; gsum=0.0;
1298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f; pg=g_img[y_g-4]+xm_g;
1318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
1428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
1538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
1648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
1758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
1868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
1968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
1978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
1998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
2088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f; pg=g_img[y_g+4]+xm_g;
2198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=81.0f*fgsum-fsum*gsum;
2308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(81.0f*f2sum-fsum*fsum)*(81.0f*g2sum-gsum*gsum);
2318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(den!=0.0)
2328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
2338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(fg_corr>=0.0) return(fg_corr*fg_corr/den);
2348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        return(-fg_corr*fg_corr/den);
2358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
2368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(0.0);
2378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
2388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr11x11_u(unsigned char **f_img,unsigned char **g_img,int x_f,int y_f,int x_g,int y_g)
2408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
2418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    unsigned char *pf,*pg;
2428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,g,fgsum,f2sum,g2sum,fsum,gsum,fg_corr,den;
2438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
2448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-5;
2468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-5;
2478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=0.0; f2sum=0.0; g2sum=0.0; fsum=0.0; gsum=0.0;
2488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f; pg=g_img[y_g-5]+xm_g;
2508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f; pg=g_img[y_g-4]+xm_g;
2638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
2768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
2888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
2898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
2998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
3018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
3028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
3148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
3158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
3278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
3288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
3408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
3418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
3538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
3548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
3668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f; pg=g_img[y_g+4]+xm_g;
3678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
3798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f; pg=g_img[y_g+5]+xm_g;
3808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
3918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
3928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=121.0f*fgsum-fsum*gsum;
3938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(121.0f*f2sum-fsum*fsum)*(121.0f*g2sum-gsum*gsum);
3948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(den!=0.0)
3958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
3968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(fg_corr>=0.0) return(fg_corr*fg_corr/den);
3978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        return(-fg_corr*fg_corr/den);
3988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
3998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(0.0);
4008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
4018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_SignedSquareNormCorr11x11_Pre_u(unsigned char **f_img,int x_f,int y_f,float *sum,float *recip)
4038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
4048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    unsigned char *pf;
4058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float den;
4068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int f,f2sum,fsum;
4078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f;
4088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-5;
4108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f;
4128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum=f*f;  fsum=f;
4138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
4238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f;
4258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
4368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f;
4388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
4498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f;
4518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
4628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f;
4648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
4758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f;
4778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
4888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
4898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f;
4908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
4998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
5018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f;
5038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
5148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f;
5168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
5278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f;
5298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
5408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f;
5428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
5528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
5538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *sum= (float) fsum;
5558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(121.0f*f2sum-fsum*fsum);
5568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *recip=(float)(((den!=0.0)?1.0/den:0.0));
5578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
5588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_SignedSquareNormCorr5x5_PreAlign_u(short *patch,const unsigned char * const *f_img,int x_f,int y_f,float *sum,float *recip)
5608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
5618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float den;
5628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int f2sum,fsum;
5638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f=x_f-2;
5648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#ifndef DB_USE_SSE2
5668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf;
5678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    short f;
5688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f;
5708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum=f*f; fsum=f; (*patch++)=f;
5718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
5758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f;
5778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
5828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f;
5848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
5898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f;
5918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
5968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
5978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f;
5988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
5998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
6038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //int xwi;
6048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //int ywi;
6058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //f2sum=0;
6068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //fsum=0;
6078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //for (int r=-5;r<=5;r++){
6088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //  ywi=y_f+r;
6098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //  for (int c=-5;c<=5;c++){
6108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      xwi=x_f+c;
6118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      f=f_img[ywi][xwi];
6128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      f2sum+=f*f;
6138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      fsum+=f;
6148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      (*patch++)=f;
6158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //  }
6168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //}
6178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    (*patch++)=0; (*patch++)=0; (*patch++)=0; (*patch++)=0; (*patch++)=0;
6188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    (*patch++)=0; (*patch++)=0;
6198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#endif /* DB_USE_SSE2 */
6208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *sum= (float) fsum;
6228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(25.0f*f2sum-fsum*fsum);
6238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *recip= (float)((den!=0.0)?1.0/den:0.0);
6248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
6258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_SignedSquareNormCorr21x21_PreAlign_u(short *patch,const unsigned char * const *f_img,int x_f,int y_f,float *sum,float *recip)
6278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
6288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float den;
6298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int f2sum,fsum;
6308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f=x_f-10;
6318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    short f;
6328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xwi;
6348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int ywi;
6358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f2sum=0;
6368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fsum=0;
6378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for (int r=-10;r<=10;r++){
6388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        ywi=y_f+r;
6398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for (int c=-10;c<=10;c++){
6408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            xwi=x_f+c;
6418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            f=f_img[ywi][xwi];
6428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            f2sum+=f*f;
6438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            fsum+=f;
6448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            (*patch++)=f;
6458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
6468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
6478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(int i=442; i<512; i++)
6498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        (*patch++)=0;
6508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *sum= (float) fsum;
6528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(441.0f*f2sum-fsum*fsum);
6538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *recip= (float)((den!=0.0)?1.0/den:0.0);
6548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
6578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling/* Lay out the image in the patch, computing norm and
6598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling*/
6608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_SignedSquareNormCorr11x11_PreAlign_u(short *patch,const unsigned char * const *f_img,int x_f,int y_f,float *sum,float *recip)
6618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
6628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float den;
6638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int f2sum,fsum;
6648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f=x_f-5;
6658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#ifndef DB_USE_SSE2
6678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf;
6688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    short f;
6698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f;
6718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum=f*f;  fsum=f;  (*patch++)=f;
6728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
6828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f;
6848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
6958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
6968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f;
6978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
6998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
7088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
7098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f;
7108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
7218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
7228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f;
7238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
7348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
7358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f;
7368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
7478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
7488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f;
7498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
7608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
7618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f;
7628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
7738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
7748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f;
7758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
7868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
7878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f;
7888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
7988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
7998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f;
8018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
8118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
8128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //int xwi;
8148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //int ywi;
8158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //f2sum=0;
8168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //fsum=0;
8178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //for (int r=-5;r<=5;r++){
8188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //  ywi=y_f+r;
8198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //  for (int c=-5;c<=5;c++){
8208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      xwi=x_f+c;
8218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      f=f_img[ywi][xwi];
8228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      f2sum+=f*f;
8238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      fsum+=f;
8248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //      (*patch++)=f;
8258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //  }
8268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    //}
8278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    (*patch++)=0; (*patch++)=0; (*patch++)=0; (*patch++)=0; (*patch++)=0;
8298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    (*patch++)=0; (*patch++)=0;
8308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#else
8318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf0 =f_img[y_f-5]+xm_f;
8328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf1 =f_img[y_f-4]+xm_f;
8338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf2 =f_img[y_f-3]+xm_f;
8348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf3 =f_img[y_f-2]+xm_f;
8358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf4 =f_img[y_f-1]+xm_f;
8368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf5 =f_img[y_f  ]+xm_f;
8378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf6 =f_img[y_f+1]+xm_f;
8388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf7 =f_img[y_f+2]+xm_f;
8398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf8 =f_img[y_f+3]+xm_f;
8408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf9 =f_img[y_f+4]+xm_f;
8418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char *pf10=f_img[y_f+5]+xm_f;
8428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /* pixel mask */
8448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char pm[16] = {
8458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        0xFF,0xFF,
8468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        0xFF,0xFF,
8478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        0xFF,0xFF,
8488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        0,0,0,0,0,
8498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        0,0,0,0,0};
8508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const unsigned char * pm_p = pm;
8518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    _asm
8538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
8548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         ecx,patch   /* load patch pointer */
8558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         ebx, pm_p   /* load pixel mask pointer */
8568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm1,[ebx]  /* load pixel mask */
8578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pxor        xmm5,xmm5   /* set xmm5 to 0 accumulator for sum squares */
8598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pxor        xmm4,xmm4   /* set xmm4 to 0 accumulator for sum */
8608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pxor        xmm0,xmm0   /* set xmm0 to 0 */
8618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 0 */
8638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf0     /* load image pointer */
8648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
8658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
8668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
8688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
8698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
8718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      [ecx+0*22],xmm7 /* move short values to patch */
8738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      [ecx+0*22+16],xmm6  /* move short values to patch */
8748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
8768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
8778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
8788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
8808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
8818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
8828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 1 */
8848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf1     /* load image pointer */
8858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
8868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
8878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
8898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
8908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
8928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+1*22],xmm7 /* move short values to patch */
8948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+1*22+16],xmm6  /* move short values to patch */
8958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
8968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
8978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
8988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
8998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
9018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
9028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
9038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 2 */
9058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf2     /* load image pointer */
9068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
9078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
9088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
9108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
9118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
9138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+2*22],xmm7 /* move short values to patch */
9158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+2*22+16],xmm6  /* move short values to patch */
9168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
9188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
9198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
9208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
9228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
9238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
9248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 3 */
9268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf3     /* load image pointer */
9278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
9288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
9298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
9318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
9328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
9348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+3*22],xmm7 /* move short values to patch */
9368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+3*22+16],xmm6  /* move short values to patch */
9378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
9398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
9408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
9418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
9438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
9448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
9458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 4 */
9478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf4     /* load image pointer */
9488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
9498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
9508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
9528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
9538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
9558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+4*22],xmm7 /* move short values to patch */
9578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+4*22+16],xmm6  /* move short values to patch */
9588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
9608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
9618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
9628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
9648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
9658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
9668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 5 */
9688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf5     /* load image pointer */
9698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
9708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
9718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
9738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
9748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
9768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+5*22],xmm7 /* move short values to patch */
9788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+5*22+16],xmm6  /* move short values to patch */
9798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
9818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
9828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
9838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
9858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
9868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
9878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 6 */
9898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf6     /* load image pointer */
9908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
9918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
9928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
9948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
9958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
9978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
9988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+6*22],xmm7 /* move short values to patch */
9998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+6*22+16],xmm6  /* move short values to patch */
10008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
10028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
10038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
10048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
10068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
10078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
10088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 7 */
10108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf7     /* load image pointer */
10118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
10128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
10138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
10158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
10168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
10188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+7*22],xmm7 /* move short values to patch */
10208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+7*22+16],xmm6  /* move short values to patch */
10218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
10238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
10248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
10258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
10278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
10288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
10298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 8 */
10318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf8     /* load image pointer */
10328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
10338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
10348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
10368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
10378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
10398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      [ecx+8*22],xmm7 /* move short values to patch */
10418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      [ecx+8*22+16],xmm6  /* move short values to patch */
10428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
10448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
10458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
10468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
10488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
10498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
10508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 9 */
10528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf9     /* load image pointer */
10538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
10548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
10558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
10578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
10588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
10608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+9*22],xmm7 /* move short values to patch */
10628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+9*22+16],xmm6  /* move short values to patch */
10638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
10658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
10668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
10678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
10698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit uints into 16 bit uints */
10708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
10718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* row 10 */
10738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        mov         eax,pf10    /* load image pointer */
10748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      xmm7,[eax]  /* load 16 pixels */
10758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqa      xmm6,xmm7
10768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpcklbw   xmm7,xmm0   /* unpack low pixels (first 8)*/
10788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        punpckhbw   xmm6,xmm0   /* unpack high pixels (last 8)*/
10798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pand        xmm6,xmm1   /* mask out pixels 12-16 */
10818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+10*22],xmm7    /* move short values to patch */
10838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movdqu      [ecx+10*22+16],xmm6 /* move short values to patch */
10848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddusw     xmm4,xmm7   /* accumulate sums */
10868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm7,xmm7   /* multiply 16 bit ints and add into 32 bit ints */
10878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm7   /* accumulate sum squares */
10888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm6   /* accumulate sums */
10908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pmaddwd     xmm6,xmm6   /* multiply 16 bit ints and add into 32 bit ints */
10918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm6   /* accumulate sum squares */
10928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
10938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* add up the sum squares */
10948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movhlps     xmm0,xmm5   /* high half to low half */
10958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm0   /* add high to low */
10968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pshuflw     xmm0,xmm5, 0xE /* reshuffle */
10978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddd       xmm5,xmm0   /* add remaining */
10988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movd        f2sum,xmm5
10998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /* add up the sum */
11018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movhlps     xmm0,xmm4
11028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm0   /* halves added */
11038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pshuflw     xmm0,xmm4,0xE
11048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm0   /* quarters added */
11058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        pshuflw     xmm0,xmm4,0x1
11068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        paddw       xmm4,xmm0   /* eighth added */
11078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        movd        fsum, xmm4
11088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        emms
11108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
11118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fsum = fsum & 0xFFFF;
11138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    patch[126] = 0;
11158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    patch[127] = 0;
11168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling#endif /* DB_USE_SSE2 */
11178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *sum= (float) fsum;
11198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(121.0f*f2sum-fsum*fsum);
11208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *recip= (float)((den!=0.0)?1.0/den:0.0);
11218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
11228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid AffineWarpPointOffset(float &r_w,float &c_w,double Hinv[9],int r,int c)
11248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
11258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    r_w=(float)(Hinv[3]*c+Hinv[4]*r);
11268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    c_w=(float)(Hinv[0]*c+Hinv[1]*r);
11278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
11288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling/*!
11328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha HaeberlingPrewarp the patches with given affine transform. For a given homogeneous point "x", "H*x" is
11338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingthe warped point and for any displacement "d" in the warped image resulting in point "y", the
11348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingcorresponding point in the original image is given by "Hinv*y", which can be simplified for affine H.
11358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha HaeberlingIf "affine" is 1, then nearest neighbor method is used, else if it is 2, then
11368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingbilinear method is used.
11378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling */
11388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_SignedSquareNormCorr11x11_PreAlign_AffinePatchWarp_u(short *patch,const unsigned char * const *f_img,
11398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                                                    int xi,int yi,float *sum,float *recip,
11408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                                                    const double Hinv[9],int affine)
11418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
11428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float den;
11438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    short f;
11448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int f2sum,fsum;
11458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f2sum=0;
11478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fsum=0;
11488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if (affine==1)
11508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
11518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for (int r=0;r<11;r++){
11528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            for (int c=0;c<11;c++){
11538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                f=f_img[yi+AffineWarpPoint_NN_LUT_y[r][c]][xi+AffineWarpPoint_NN_LUT_x[r][c]];
11548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                f2sum+=f*f;
11558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                fsum+=f;
11568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                (*patch++)=f;
11578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
11588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
11598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
11608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    else if (affine==2)
11618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
11628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for (int r=0;r<11;r++){
11638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            for (int c=0;c<11;c++){
11648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                f=db_BilinearInterpolation(yi+AffineWarpPoint_BL_LUT_y[r][c]
11658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                ,xi+AffineWarpPoint_BL_LUT_x[r][c],f_img);
11668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                f2sum+=f*f;
11678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                fsum+=f;
11688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                (*patch++)=f;
11698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
11708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
11718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
11728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    (*patch++)=0; (*patch++)=0; (*patch++)=0; (*patch++)=0; (*patch++)=0;
11768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    (*patch++)=0; (*patch++)=0;
11778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *sum= (float) fsum;
11798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(121.0f*f2sum-fsum*fsum);
11808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *recip= (float)((den!=0.0)?1.0/den:0.0);
11818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
11828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr11x11_Post_u(unsigned char **f_img,unsigned char **g_img,int x_f,int y_f,int x_g,int y_g,
11858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                                float fsum_gsum,float f_recip_g_recip)
11868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
11878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    unsigned char *pf,*pg;
11888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int fgsum;
11898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float fg_corr;
11908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
11918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-5;
11938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-5;
11948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
11958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f; pg=g_img[y_g-5]+xm_g;
11968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=(*pf++)*(*pg++);  fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
11978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
11988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
11998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f; pg=g_img[y_g-4]+xm_g;
12028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
12088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
12148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
12208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
12268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
12328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
12388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
12448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f; pg=g_img[y_g+4]+xm_g;
12508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f; pg=g_img[y_g+5]+xm_g;
12568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
12598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
12608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=121.0f*fgsum-fsum_gsum;
12628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(fg_corr>=0.0) return(fg_corr*fg_corr*f_recip_g_recip);
12638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(-fg_corr*fg_corr*f_recip_g_recip);
12648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
12658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingfloat db_SignedSquareNormCorr21x21Aligned_Post_s(const short *f_patch,const short *g_patch,float fsum_gsum,float f_recip_g_recip)
12678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
12688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float fgsum,fg_corr;
12698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum= (float) db_ScalarProduct512_s(f_patch,g_patch);
12718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=441.0f*fgsum-fsum_gsum;
12738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(fg_corr>=0.0) return(fg_corr*fg_corr*f_recip_g_recip);
12748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(-fg_corr*fg_corr*f_recip_g_recip);
12758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
12768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingfloat db_SignedSquareNormCorr11x11Aligned_Post_s(const short *f_patch,const short *g_patch,float fsum_gsum,float f_recip_g_recip)
12798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
12808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float fgsum,fg_corr;
12818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum= (float) db_ScalarProduct128_s(f_patch,g_patch);
12838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=121.0f*fgsum-fsum_gsum;
12858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(fg_corr>=0.0) return(fg_corr*fg_corr*f_recip_g_recip);
12868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(-fg_corr*fg_corr*f_recip_g_recip);
12878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
12888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingfloat db_SignedSquareNormCorr5x5Aligned_Post_s(const short *f_patch,const short *g_patch,float fsum_gsum,float f_recip_g_recip)
12908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
12918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float fgsum,fg_corr;
12928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum= (float) db_ScalarProduct32_s(f_patch,g_patch);
12948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
12958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=25.0f*fgsum-fsum_gsum;
12968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(fg_corr>=0.0) return(fg_corr*fg_corr*f_recip_g_recip);
12978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(-fg_corr*fg_corr*f_recip_g_recip);
12988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
12998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr15x15_u(unsigned char **f_img,unsigned char **g_img,int x_f,int y_f,int x_g,int y_g)
13028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
13038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    unsigned char *pf,*pg;
13048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,g,fgsum,f2sum,g2sum,fsum,gsum,fg_corr,den;
13058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
13068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-7;
13088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-7;
13098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=0.0; f2sum=0.0; g2sum=0.0; fsum=0.0; gsum=0.0;
13108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-7]+xm_f; pg=g_img[y_g-7]+xm_g;
13128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-6]+xm_f; pg=g_img[y_g-6]+xm_g;
13298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f; pg=g_img[y_g-5]+xm_g;
13468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f; pg=g_img[y_g-4]+xm_g;
13638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
13808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
13968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
13978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
13998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
14138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
14148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
14308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
14318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
14478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
14488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
14648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
14658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
14818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
14828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
14978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
14988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f; pg=g_img[y_g+4]+xm_g;
14998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
15158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f; pg=g_img[y_g+5]+xm_g;
15168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
15328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+6]+xm_f; pg=g_img[y_g+6]+xm_g;
15338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
15498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+7]+xm_f; pg=g_img[y_g+7]+xm_g;
15508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
15668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=225.0f*fgsum-fsum*gsum;
15678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(225.0f*f2sum-fsum*fsum)*(225.0f*g2sum-gsum*gsum);
15688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(den!=0.0)
15698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
15708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(fg_corr>=0.0) return(fg_corr*fg_corr/den);
15718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        return(-fg_corr*fg_corr/den);
15728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
15738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(0.0);
15748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
15758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
15768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr7x7_f(float **f_img,float **g_img,int x_f,int y_f,int x_g,int y_g)
15778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
15788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,g,*pf,*pg,fgsum,f2sum,g2sum,fsum,gsum,fg_corr,den;
15798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
15808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
15818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-3;
15828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-3;
15838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=0.0; f2sum=0.0; g2sum=0.0; fsum=0.0; gsum=0.0;
15848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
15858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
15868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
15948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
15958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
15998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
16048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
16138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
16228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
16318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
16408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=49.0f*fgsum-fsum*gsum;
16498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(49.0f*f2sum-fsum*fsum)*(49.0f*g2sum-gsum*gsum);
16508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(den!=0.0)
16518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
16528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(fg_corr>=0.0) return(fg_corr*fg_corr/den);
16538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        return(-fg_corr*fg_corr/den);
16548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
16558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(0.0);
16568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
16578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr9x9_f(float **f_img,float **g_img,int x_f,int y_f,int x_g,int y_g)
16598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
16608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,g,*pf,*pg,fgsum,f2sum,g2sum,fsum,gsum,fg_corr,den;
16618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
16628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-4;
16648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-4;
16658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=0.0; f2sum=0.0; g2sum=0.0; fsum=0.0; gsum=0.0;
16668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f; pg=g_img[y_g-4]+xm_g;
16688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
16798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
16898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
16908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
16998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
17018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
17128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
17238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
17348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
17458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f; pg=g_img[y_g+4]+xm_g;
17568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=81.0f*fgsum-fsum*gsum;
17678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(81.0f*f2sum-fsum*fsum)*(81.0f*g2sum-gsum*gsum);
17688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(den!=0.0)
17698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
17708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(fg_corr>=0.0) return(fg_corr*fg_corr/den);
17718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        return(-fg_corr*fg_corr/den);
17728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
17738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(0.0);
17748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
17758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr11x11_f(float **f_img,float **g_img,int x_f,int y_f,int x_g,int y_g)
17778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
17788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float *pf,*pg;
17798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,g,fgsum,f2sum,g2sum,fsum,gsum,fg_corr,den;
17808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
17818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-5;
17838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-5;
17848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=0.0; f2sum=0.0; g2sum=0.0; fsum=0.0; gsum=0.0;
17858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f; pg=g_img[y_g-5]+xm_g;
17878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
17988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
17998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f; pg=g_img[y_g-4]+xm_g;
18008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
18128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
18138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
18258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
18268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
18388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
18398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
18518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
18528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
18648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
18658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
18778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
18788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
18908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
18918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
18998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f; pg=g_img[y_g+4]+xm_g;
19048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f; pg=g_img[y_g+5]+xm_g;
19178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
19288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=121.0f*fgsum-fsum*gsum;
19308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(121.0f*f2sum-fsum*fsum)*(121.0f*g2sum-gsum*gsum);
19318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(den!=0.0)
19328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
19338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(fg_corr>=0.0) return(fg_corr*fg_corr/den);
19348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        return(-fg_corr*fg_corr/den);
19358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
19368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(0.0);
19378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
19388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_SignedSquareNormCorr11x11_Pre_f(float **f_img,int x_f,int y_f,float *sum,float *recip)
19408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
19418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float *pf,den;
19428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,f2sum,fsum;
19438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f;
19448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-5;
19468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f;
19488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum=f*f;  fsum=f;
19498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
19598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f;
19618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
19728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f;
19748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
19858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f;
19878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
19978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
19988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
19998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f;
20008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
20118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
20128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f;
20138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
20248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
20258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f;
20268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
20378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
20388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f;
20398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
20508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
20518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f;
20528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
20638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
20648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f;
20658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
20768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
20778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f;
20788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f;
20888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f;
20898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
20908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *sum=fsum;
20918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(121.0f*f2sum-fsum*fsum);
20928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *recip= (float) ((den!=0.0)?1.0/den:0.0);
20938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
20948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
20958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_SignedSquareNormCorr11x11_PreAlign_f(float *patch,const float * const *f_img,int x_f,int y_f,float *sum,float *recip)
20968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
20978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    const float *pf;
20988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float den,f,f2sum,fsum;
20998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f;
21008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-5;
21028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f;
21048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum=f*f;  fsum=f;  (*patch++)=f;
21058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
21158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f;
21178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
21288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f;
21308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
21418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f;
21438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
21548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f;
21568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
21678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f;
21698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
21808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f;
21828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
21938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
21948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f;
21958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
21998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
22068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f;
22088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
22198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f;
22218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
22328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f;
22348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; f2sum+=f*f; fsum+=f; (*patch++)=f;
22448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   f2sum+=f*f; fsum+=f; (*patch++)=f;
22458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    (*patch++)=0.0; (*patch++)=0.0; (*patch++)=0.0; (*patch++)=0.0; (*patch++)=0.0;
22478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    (*patch++)=0.0; (*patch++)=0.0;
22488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *sum=fsum;
22508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(121.0f*f2sum-fsum*fsum);
22518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *recip= (float) ((den!=0.0)?1.0/den:0.0);
22528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
22538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr11x11_Post_f(float **f_img,float **g_img,int x_f,int y_f,int x_g,int y_g,
22558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                                float fsum_gsum,float f_recip_g_recip)
22568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
22578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float *pf,*pg;
22588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float fgsum,fg_corr;
22598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
22608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-5;
22628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-5;
22638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f; pg=g_img[y_g-5]+xm_g;
22658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=(*pf++)*(*pg++);  fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
22698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f; pg=g_img[y_g-4]+xm_g;
22718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
22758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
22778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
22818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
22838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
22878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
22898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
22938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
22948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
22958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
22988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
22998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
23018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
23058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
23078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
23118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
23138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
23178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f; pg=g_img[y_g+4]+xm_g;
23198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
23238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f; pg=g_img[y_g+5]+xm_g;
23258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++); fgsum+=(*pf++)*(*pg++);
23288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum+=(*pf++)*(*pg++); fgsum+=(*pf)*(*pg);
23298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=121.0f*fgsum-fsum_gsum;
23318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(fg_corr>=0.0) return(fg_corr*fg_corr*f_recip_g_recip);
23328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(-fg_corr*fg_corr*f_recip_g_recip);
23338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
23348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr11x11Aligned_Post_f(const float *f_patch,const float *g_patch,float fsum_gsum,float f_recip_g_recip)
23368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
23378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float fgsum,fg_corr;
23388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=db_ScalarProduct128Aligned16_f(f_patch,g_patch);
23408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=121.0f*fgsum-fsum_gsum;
23428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(fg_corr>=0.0) return(fg_corr*fg_corr*f_recip_g_recip);
23438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(-fg_corr*fg_corr*f_recip_g_recip);
23448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
23458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline float db_SignedSquareNormCorr15x15_f(float **f_img,float **g_img,int x_f,int y_f,int x_g,int y_g)
23478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
23488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float *pf,*pg;
23498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float f,g,fgsum,f2sum,g2sum,fsum,gsum,fg_corr,den;
23508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm_f,xm_g;
23518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_f=x_f-7;
23538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm_g=x_g-7;
23548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fgsum=0.0; f2sum=0.0; g2sum=0.0; fsum=0.0; gsum=0.0;
23558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-7]+xm_f; pg=g_img[y_g-7]+xm_g;
23578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-6]+xm_f; pg=g_img[y_g-6]+xm_g;
23748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
23908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-5]+xm_f; pg=g_img[y_g-5]+xm_g;
23918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
23998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
24078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-4]+xm_f; pg=g_img[y_g-4]+xm_g;
24088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
24248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-3]+xm_f; pg=g_img[y_g-3]+xm_g;
24258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
24418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-2]+xm_f; pg=g_img[y_g-2]+xm_g;
24428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
24588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f-1]+xm_f; pg=g_img[y_g-1]+xm_g;
24598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
24758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f]+xm_f; pg=g_img[y_g]+xm_g;
24768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
24928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+1]+xm_f; pg=g_img[y_g+1]+xm_g;
24938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
24998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
25098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+2]+xm_f; pg=g_img[y_g+2]+xm_g;
25108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
25268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+3]+xm_f; pg=g_img[y_g+3]+xm_g;
25278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
25438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+4]+xm_f; pg=g_img[y_g+4]+xm_g;
25448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
25608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+5]+xm_f; pg=g_img[y_g+5]+xm_g;
25618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
25778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+6]+xm_f; pg=g_img[y_g+6]+xm_g;
25788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
25948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pf=f_img[y_f+7]+xm_f; pg=g_img[y_g+7]+xm_g;
25958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
25998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf++; g= *pg++; fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    f= *pf;   g= *pg;   fgsum+=f*g; f2sum+=f*f; g2sum+=g*g; fsum+=f; gsum+=g;
26108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    fg_corr=225.0f*fgsum-fsum*gsum;
26128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    den=(225.0f*f2sum-fsum*fsum)*(225.0f*g2sum-gsum*gsum);
26138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(den!=0.0)
26148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
26158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(fg_corr>=0.0) return(fg_corr*fg_corr/den);
26168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        return(-fg_corr*fg_corr/den);
26178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
26188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(0.0);
26198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
26208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingdb_Bucket_f** db_AllocBuckets_f(int nr_h,int nr_v,int bd)
26228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
26238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j;
26248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_f **bp,*b;
26258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    b=new db_Bucket_f [(nr_h+2)*(nr_v+2)];
26278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    bp=new db_Bucket_f* [(nr_v+2)];
26288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    bp=bp+1;
26298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i= -1;i<=nr_v;i++)
26308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
26318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        bp[i]=b+1+(nr_h+2)*(i+1);
26328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for(j= -1;j<=nr_h;j++)
26338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
26348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            bp[i][j].ptr=new db_PointInfo_f [bd];
26358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
26368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
26378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(bp);
26398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
26408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingdb_Bucket_u** db_AllocBuckets_u(int nr_h,int nr_v,int bd)
26428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
26438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j;
26448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_u **bp,*b;
26458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    b=new db_Bucket_u [(nr_h+2)*(nr_v+2)];
26478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    bp=new db_Bucket_u* [(nr_v+2)];
26488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    bp=bp+1;
26498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i= -1;i<=nr_v;i++)
26508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
26518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        bp[i]=b+1+(nr_h+2)*(i+1);
26528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for(j= -1;j<=nr_h;j++)
26538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
26548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            bp[i][j].ptr=new db_PointInfo_u [bd];
26558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
26568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
26578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(bp);
26598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
26608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_FreeBuckets_f(db_Bucket_f **bp,int nr_h,int nr_v)
26628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
26638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j;
26648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i= -1;i<=nr_v;i++) for(j= -1;j<=nr_h;j++)
26668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
26678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        delete [] bp[i][j].ptr;
26688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
26698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    delete [] (bp[-1]-1);
26708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    delete [] (bp-1);
26718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
26728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_FreeBuckets_u(db_Bucket_u **bp,int nr_h,int nr_v)
26748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
26758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j;
26768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i= -1;i<=nr_v;i++) for(j= -1;j<=nr_h;j++)
26788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
26798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        delete [] bp[i][j].ptr;
26808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
26818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    delete [] (bp[-1]-1);
26828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    delete [] (bp-1);
26838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
26848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_EmptyBuckets_f(db_Bucket_f **bp,int nr_h,int nr_v)
26868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
26878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j;
26888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i= -1;i<=nr_v;i++) for(j= -1;j<=nr_h;j++) bp[i][j].nr=0;
26898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
26908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_EmptyBuckets_u(db_Bucket_u **bp,int nr_h,int nr_v)
26928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
26938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j;
26948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i= -1;i<=nr_v;i++) for(j= -1;j<=nr_h;j++) bp[i][j].nr=0;
26958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
26968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
26978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingfloat* db_FillBuckets_f(float *patch_space,const float * const *f_img,db_Bucket_f **bp,int bw,int bh,int nr_h,int nr_v,int bd,const double *x,const double *y,int nr_corners)
26988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
26998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,xi,yi,xpos,ypos,nr;
27008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_f *br;
27018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_f *pir;
27028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_EmptyBuckets_f(bp,nr_h,nr_v);
27048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_corners;i++)
27058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
27068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xi=(int) x[i];
27078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        yi=(int) y[i];
27088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xpos=xi/bw;
27098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        ypos=yi/bh;
27108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(xpos>=0 && xpos<nr_h && ypos>=0 && ypos<nr_v)
27118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
27128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            br=&bp[ypos][xpos];
27138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            nr=br->nr;
27148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            if(nr<bd)
27158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
27168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir=&(br->ptr[nr]);
27178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->x=xi;
27188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->y=yi;
27198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->id=i;
27208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->pir=0;
27218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->patch=patch_space;
27228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                br->nr=nr+1;
27238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                db_SignedSquareNormCorr11x11_PreAlign_f(patch_space,f_img,xi,yi,&(pir->sum),&(pir->recip));
27258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                patch_space+=128;
27268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
27278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
27288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
27298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(patch_space);
27308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
27318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingshort* db_FillBuckets_u(short *patch_space,const unsigned char * const *f_img,db_Bucket_u **bp,int bw,int bh,int nr_h,int nr_v,int bd,const double *x,const double *y,int nr_corners,int use_smaller_matching_window, int use_21)
27338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
27348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,xi,yi,xpos,ypos,nr;
27358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_u *br;
27368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_u *pir;
27378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_EmptyBuckets_u(bp,nr_h,nr_v);
27398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_corners;i++)
27408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
27418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xi=(int)db_roundi(x[i]);
27428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        yi=(int)db_roundi(y[i]);
27438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xpos=xi/bw;
27448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        ypos=yi/bh;
27458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(xpos>=0 && xpos<nr_h && ypos>=0 && ypos<nr_v)
27468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
27478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            br=&bp[ypos][xpos];
27488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            nr=br->nr;
27498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            if(nr<bd)
27508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
27518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir=&(br->ptr[nr]);
27528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->x=xi;
27538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->y=yi;
27548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->id=i;
27558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->pir=0;
27568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->patch=patch_space;
27578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                br->nr=nr+1;
27588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                if(use_21)
27608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
27618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    db_SignedSquareNormCorr21x21_PreAlign_u(patch_space,f_img,xi,yi,&(pir->sum),&(pir->recip));
27628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    patch_space+=512;
27638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
27648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                else
27658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
27668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                if(!use_smaller_matching_window)
27678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
27688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    db_SignedSquareNormCorr11x11_PreAlign_u(patch_space,f_img,xi,yi,&(pir->sum),&(pir->recip));
27698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    patch_space+=128;
27708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
27718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                else
27728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
27738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    db_SignedSquareNormCorr5x5_PreAlign_u(patch_space,f_img,xi,yi,&(pir->sum),&(pir->recip));
27748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    patch_space+=32;
27758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
27768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
27778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
27788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
27798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
27808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(patch_space);
27818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
27828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingfloat* db_FillBucketsPrewarped_f(float *patch_space,const float *const *f_img,db_Bucket_f **bp,int bw,int bh,int nr_h,int nr_v,int bd,const double *x,const double *y,int nr_corners,const double H[9])
27868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
27878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,xi,yi,xpos,ypos,nr,wxi,wyi;
27888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_f *br;
27898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_f *pir;
27908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    double xd[2],wx[2];
27918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
27928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_EmptyBuckets_f(bp,nr_h,nr_v);
27938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_corners;i++)
27948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
27958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xd[0]=x[i];
27968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xd[1]=y[i];
27978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xi=(int) xd[0];
27988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        yi=(int) xd[1];
27998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        db_ImageHomographyInhomogenous(wx,H,xd);
28008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        wxi=(int) wx[0];
28018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        wyi=(int) wx[1];
28028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xpos=((wxi+bw)/bw)-1;
28048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        ypos=((wyi+bh)/bh)-1;
28058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(xpos>= -1 && xpos<=nr_h && ypos>= -1 && ypos<=nr_v)
28068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
28078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            br=&bp[ypos][xpos];
28088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            nr=br->nr;
28098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            if(nr<bd)
28108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
28118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir=&(br->ptr[nr]);
28128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->x=wxi;
28138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->y=wyi;
28148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->id=i;
28158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->pir=0;
28168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->patch=patch_space;
28178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                br->nr=nr+1;
28188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                db_SignedSquareNormCorr11x11_PreAlign_f(patch_space,f_img,xi,yi,&(pir->sum),&(pir->recip));
28208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                patch_space+=128;
28218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
28228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
28238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
28248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(patch_space);
28258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
28268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingshort* db_FillBucketsPrewarped_u(short *patch_space,const unsigned char * const *f_img,db_Bucket_u **bp,
28288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                 int bw,int bh,int nr_h,int nr_v,int bd,const double *x,const double *y,
28298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                 int nr_corners,const double H[9])
28308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
28318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,xi,yi,xpos,ypos,nr,wxi,wyi;
28328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_u *br;
28338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_u *pir;
28348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    double xd[2],wx[2];
28358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_EmptyBuckets_u(bp,nr_h,nr_v);
28378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_corners;i++)
28388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
28398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xd[0]=x[i];
28408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xd[1]=y[i];
28418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xi=(int) db_roundi(xd[0]);
28428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        yi=(int) db_roundi(xd[1]);
28438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        db_ImageHomographyInhomogenous(wx,H,xd);
28448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        wxi=(int) wx[0];
28458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        wyi=(int) wx[1];
28468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xpos=((wxi+bw)/bw)-1;
28488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        ypos=((wyi+bh)/bh)-1;
28498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(xpos>= -1 && xpos<=nr_h && ypos>= -1 && ypos<=nr_v)
28508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
28518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            br=&bp[ypos][xpos];
28528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            nr=br->nr;
28538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            if(nr<bd)
28548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
28558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir=&(br->ptr[nr]);
28568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->x=wxi;
28578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->y=wyi;
28588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->id=i;
28598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->pir=0;
28608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                pir->patch=patch_space;
28618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                br->nr=nr+1;
28628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                db_SignedSquareNormCorr11x11_PreAlign_u(patch_space,f_img,xi,yi,&(pir->sum),&(pir->recip));
28648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                patch_space+=128;
28658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
28668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
28678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
28688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(patch_space);
28698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
28708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingshort* db_FillBucketsPrewarpedAffine_u(short *patch_space,const unsigned char * const *f_img,db_Bucket_u **bp,
28748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                 int bw,int bh,int nr_h,int nr_v,int bd,const double *x,const double *y,
28758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                 int nr_corners,const double H[9],const double Hinv[9],const int warpboundsp[4],
28768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                 int affine)
28778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
28788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,xi,yi,xpos,ypos,nr,wxi,wyi;
28798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_u *br;
28808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_u *pir;
28818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    double xd[2],wx[2];
28828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_EmptyBuckets_u(bp,nr_h,nr_v);
28848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_corners;i++)
28858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
28868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xd[0]=x[i];
28878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xd[1]=y[i];
28888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xi=(int) db_roundi(xd[0]);
28898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        yi=(int) db_roundi(xd[1]);
28908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        db_ImageHomographyInhomogenous(wx,H,xd);
28918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        wxi=(int) wx[0];
28928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        wyi=(int) wx[1];
28938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xpos=((wxi+bw)/bw)-1;
28958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        ypos=((wyi+bh)/bh)-1;
28968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
28988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if (xpos>= -1 && xpos<=nr_h && ypos>= -1 && ypos<=nr_v)
28998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
29008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            if( xi>warpboundsp[0] && xi<warpboundsp[1] && yi>warpboundsp[2] && yi<warpboundsp[3])
29018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
29028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                br=&bp[ypos][xpos];
29048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                nr=br->nr;
29058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                if(nr<bd)
29068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
29078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    pir=&(br->ptr[nr]);
29088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    pir->x=wxi;
29098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    pir->y=wyi;
29108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    pir->id=i;
29118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    pir->pir=0;
29128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    pir->patch=patch_space;
29138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    br->nr=nr+1;
29148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    db_SignedSquareNormCorr11x11_PreAlign_AffinePatchWarp_u(patch_space,f_img,xi,yi,&(pir->sum),&(pir->recip),Hinv,affine);
29168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    patch_space+=128;
29178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
29188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
29198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
29208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
29218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(patch_space);
29228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
29238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_MatchPointPair_f(db_PointInfo_f *pir_l,db_PointInfo_f *pir_r,
29278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                            unsigned long kA,unsigned long kB)
29288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
29298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int x_l,y_l,x_r,y_r,xm,ym;
29308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    double score;
29318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    x_l=pir_l->x;
29338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    y_l=pir_l->y;
29348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    x_r=pir_r->x;
29358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    y_r=pir_r->y;
29368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    xm=x_l-x_r;
29378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    ym=y_l-y_r;
29388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Check if disparity is within the maximum disparity
29398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    with the formula xm^2*256+ym^2*kA<kB
29408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    where kA=256*w^2/h^2
29418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    and   kB=256*max_disp^2*w^2*/
29428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(((xm*xm)<<8)+ym*ym*kA<kB)
29438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
29448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Correlate*/
29458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        score=db_SignedSquareNormCorr11x11Aligned_Post_f(pir_l->patch,pir_r->patch,
29468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            (pir_l->sum)*(pir_r->sum),
29478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            (pir_l->recip)*(pir_r->recip));
29488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if((!(pir_l->pir)) || (score>pir_l->s))
29508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
29518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            /*Update left corner*/
29528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_l->s=score;
29538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_l->pir=pir_r;
29548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
29558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if((!(pir_r->pir)) || (score>pir_r->s))
29568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
29578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            /*Update right corner*/
29588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_r->s=score;
29598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_r->pir=pir_l;
29608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
29618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
29628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
29638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_MatchPointPair_u(db_PointInfo_u *pir_l,db_PointInfo_u *pir_r,
29658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                            unsigned long kA,unsigned long kB, unsigned int rect_window,bool use_smaller_matching_window, int use_21)
29668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
29678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int xm,ym;
29688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    double score;
29698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    bool compute_score;
29708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if( rect_window )
29738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        compute_score = ((unsigned)db_absi(pir_l->x - pir_r->x)<kA && (unsigned)db_absi(pir_l->y - pir_r->y)<kB);
29748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    else
29758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {   /*Check if disparity is within the maximum disparity
29768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        with the formula xm^2*256+ym^2*kA<kB
29778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        where kA=256*w^2/h^2
29788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        and   kB=256*max_disp^2*w^2*/
29798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        xm= pir_l->x - pir_r->x;
29808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        ym= pir_l->y - pir_r->y;
29818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        compute_score = ((xm*xm)<<8)+ym*ym*kA < kB;
29828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
29838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
29848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if ( compute_score )
29858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
29868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(use_21)
29878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
29888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            score=db_SignedSquareNormCorr21x21Aligned_Post_s(pir_l->patch,pir_r->patch,
29898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                (pir_l->sum)*(pir_r->sum),
29908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                (pir_l->recip)*(pir_r->recip));
29918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
29928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        else
29938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
29948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Correlate*/
29958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if(!use_smaller_matching_window)
29968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
29978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            score=db_SignedSquareNormCorr11x11Aligned_Post_s(pir_l->patch,pir_r->patch,
29988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                (pir_l->sum)*(pir_r->sum),
29998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                (pir_l->recip)*(pir_r->recip));
30008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
30018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        else
30028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
30038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            score=db_SignedSquareNormCorr5x5Aligned_Post_s(pir_l->patch,pir_r->patch,
30048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                (pir_l->sum)*(pir_r->sum),
30058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                (pir_l->recip)*(pir_r->recip));
30068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
30078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
30088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if((!(pir_l->pir)) || (score>pir_l->s))
30108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
30118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            /*Update left corner*/
30128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_l->s=score;
30138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_l->pir=pir_r;
30148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
30158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if((!(pir_r->pir)) || (score>pir_r->s))
30168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
30178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            /*Update right corner*/
30188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_r->s=score;
30198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_r->pir=pir_l;
30208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
30218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
30228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
30238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_MatchPointAgainstBucket_f(db_PointInfo_f *pir_l,db_Bucket_f *b_r,
30258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                       unsigned long kA,unsigned long kB)
30268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
30278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int p_r,nr;
30288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_f *pir_r;
30298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    nr=b_r->nr;
30318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pir_r=b_r->ptr;
30328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(p_r=0;p_r<nr;p_r++) db_MatchPointPair_f(pir_l,pir_r+p_r,kA,kB);
30338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
30348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlinginline void db_MatchPointAgainstBucket_u(db_PointInfo_u *pir_l,db_Bucket_u *b_r,
30368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                       unsigned long kA,unsigned long kB,int rect_window, bool use_smaller_matching_window, int use_21)
30378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
30388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int p_r,nr;
30398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_u *pir_r;
30408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    nr=b_r->nr;
30428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    pir_r=b_r->ptr;
30438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(p_r=0;p_r<nr;p_r++) db_MatchPointPair_u(pir_l,pir_r+p_r,kA,kB, rect_window, use_smaller_matching_window, use_21);
30458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
30478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_MatchBuckets_f(db_Bucket_f **bp_l,db_Bucket_f **bp_r,int nr_h,int nr_v,
30498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                     unsigned long kA,unsigned long kB)
30508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
30518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j,k,a,b,br_nr;
30528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_f *br;
30538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_f *pir_l;
30548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*For all buckets*/
30568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_v;i++) for(j=0;j<nr_h;j++)
30578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
30588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        br=&bp_l[i][j];
30598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        br_nr=br->nr;
30608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*For all points in bucket*/
30618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for(k=0;k<br_nr;k++)
30628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
30638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_l=br->ptr+k;
30648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            for(a=i-1;a<=i+1;a++)
30658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
30668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                for(b=j-1;b<=j+1;b++)
30678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
30688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    db_MatchPointAgainstBucket_f(pir_l,&bp_r[a][b],kA,kB);
30698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
30708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
30718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
30728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
30738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
30748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_MatchBuckets_u(db_Bucket_u **bp_l,db_Bucket_u **bp_r,int nr_h,int nr_v,
30768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                     unsigned long kA,unsigned long kB,int rect_window,bool use_smaller_matching_window, int use_21)
30778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
30788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j,k,a,b,br_nr;
30798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_u *br;
30808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_u *pir_l;
30818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
30828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*For all buckets*/
30838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_v;i++) for(j=0;j<nr_h;j++)
30848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
30858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        br=&bp_l[i][j];
30868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        br_nr=br->nr;
30878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*For all points in bucket*/
30888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for(k=0;k<br_nr;k++)
30898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
30908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir_l=br->ptr+k;
30918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            for(a=i-1;a<=i+1;a++)
30928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
30938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                for(b=j-1;b<=j+1;b++)
30948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
30958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    db_MatchPointAgainstBucket_u(pir_l,&bp_r[a][b],kA,kB,rect_window,use_smaller_matching_window, use_21);
30968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
30978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
30988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
30998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
31008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
31018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
31028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_CollectMatches_f(db_Bucket_f **bp_l,int nr_h,int nr_v,unsigned long target,int *id_l,int *id_r,int *nr_matches)
31038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
31048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j,k,br_nr;
31058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    unsigned long count;
31068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_f *br;
31078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_f *pir,*pir2;
31088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
31098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    count=0;
31108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*For all buckets*/
31118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_v;i++) for(j=0;j<nr_h;j++)
31128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
31138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        br=&bp_l[i][j];
31148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        br_nr=br->nr;
31158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*For all points in bucket*/
31168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for(k=0;k<br_nr;k++)
31178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
31188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir=br->ptr+k;
31198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir2=pir->pir;
31208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            if(pir2)
31218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
31228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                /*This point has a best match*/
31238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                if((pir2->pir)==pir)
31248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
31258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    /*We have a mutually consistent match*/
31268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    if(count<target)
31278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    {
31288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                        id_l[count]=pir->id;
31298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                        id_r[count]=pir2->id;
31308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                        count++;
31318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    }
31328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
31338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
31348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
31358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
31368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *nr_matches=count;
31378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
31388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
31398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_CollectMatches_u(db_Bucket_u **bp_l,int nr_h,int nr_v,unsigned long target,int *id_l,int *id_r,int *nr_matches)
31408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
31418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    int i,j,k,br_nr;
31428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    unsigned long count;
31438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_Bucket_u *br;
31448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_PointInfo_u *pir,*pir2;
31458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
31468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    count=0;
31478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*For all buckets*/
31488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    for(i=0;i<nr_v;i++) for(j=0;j<nr_h;j++)
31498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
31508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        br=&bp_l[i][j];
31518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        br_nr=br->nr;
31528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*For all points in bucket*/
31538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        for(k=0;k<br_nr;k++)
31548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
31558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir=br->ptr+k;
31568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            pir2=pir->pir;
31578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            if(pir2)
31588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            {
31598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                /*This point has a best match*/
31608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                if((pir2->pir)==pir)
31618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                {
31628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    /*We have a mutually consistent match*/
31638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    if(count<target)
31648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    {
31658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                        id_l[count]=pir->id;
31668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                        id_r[count]=pir2->id;
31678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                        count++;
31688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    }
31698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
31708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
31718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
31728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
31738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    *nr_matches=count;
31748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
31758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
31768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingdb_Matcher_f::db_Matcher_f()
31778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
31788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_w=0; m_h=0;
31798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
31808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
31818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingdb_Matcher_f::~db_Matcher_f()
31828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
31838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    Clean();
31848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
31858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
31868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_Matcher_f::Clean()
31878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
31888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(m_w)
31898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
31908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Free buckets*/
31918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        db_FreeBuckets_f(m_bp_l,m_nr_h,m_nr_v);
31928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        db_FreeBuckets_f(m_bp_r,m_nr_h,m_nr_v);
31938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Free space for patch layouts*/
31948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        delete [] m_patch_space;
31958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
31968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_w=0; m_h=0;
31978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
31988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
31998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingunsigned long db_Matcher_f::Init(int im_width,int im_height,double max_disparity,int target_nr_corners)
32008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
32018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    Clean();
32028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_w=im_width;
32038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_h=im_height;
32048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bw=db_maxi(1,(int) (max_disparity*((double)im_width)));
32058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bh=db_maxi(1,(int) (max_disparity*((double)im_height)));
32068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_nr_h=1+(im_width-1)/m_bw;
32078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_nr_v=1+(im_height-1)/m_bh;
32088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bd=db_maxi(1,(int)(((double)target_nr_corners)*
32098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        max_disparity*max_disparity));
32108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_target=target_nr_corners;
32118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_kA=(long)(256.0*((double)(m_w*m_w))/((double)(m_h*m_h)));
32128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_kB=(long)(256.0*max_disparity*max_disparity*((double)(m_w*m_w)));
32138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Alloc bucket structure*/
32158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bp_l=db_AllocBuckets_f(m_nr_h,m_nr_v,m_bd);
32168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bp_r=db_AllocBuckets_f(m_nr_h,m_nr_v,m_bd);
32178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Alloc 16byte-aligned space for patch layouts*/
32198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_patch_space=new float [2*(m_nr_h+2)*(m_nr_v+2)*m_bd*128+16];
32208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_aligned_patch_space=db_AlignPointer_f(m_patch_space,16);
32218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(m_target);
32238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
32248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_Matcher_f::Match(const float * const *l_img,const float * const *r_img,
32268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        const double *x_l,const double *y_l,int nr_l,const double *x_r,const double *y_r,int nr_r,
32278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        int *id_l,int *id_r,int *nr_matches,const double H[9])
32288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
32298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    float *ps;
32308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Insert the corners into bucket structure*/
32328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    ps=db_FillBuckets_f(m_aligned_patch_space,l_img,m_bp_l,m_bw,m_bh,m_nr_h,m_nr_v,m_bd,x_l,y_l,nr_l);
32338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(H==0) db_FillBuckets_f(ps,r_img,m_bp_r,m_bw,m_bh,m_nr_h,m_nr_v,m_bd,x_r,y_r,nr_r);
32348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    else db_FillBucketsPrewarped_f(ps,r_img,m_bp_r,m_bw,m_bh,m_nr_h,m_nr_v,m_bd,x_r,y_r,nr_r,H);
32358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Compute all the necessary match scores*/
32378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_MatchBuckets_f(m_bp_l,m_bp_r,m_nr_h,m_nr_v,m_kA,m_kB);
32388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Collect the correspondences*/
32408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_CollectMatches_f(m_bp_l,m_nr_h,m_nr_v,m_target,id_l,id_r,nr_matches);
32418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
32428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingdb_Matcher_u::db_Matcher_u()
32448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
32458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_w=0; m_h=0;
32468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_rect_window = 0;
32478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bw=m_bh=m_nr_h=m_nr_v=m_bd=m_target=0;
32488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bp_l=m_bp_r=0;
32498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_patch_space=m_aligned_patch_space=0;
32508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
32518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingdb_Matcher_u::db_Matcher_u(const db_Matcher_u& cm)
32538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
32548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    Init(cm.m_w, cm.m_h, cm.m_max_disparity, cm.m_target, cm.m_max_disparity_v);
32558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
32568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingdb_Matcher_u& db_Matcher_u::operator= (const db_Matcher_u& cm)
32588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
32598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if ( this == &cm ) return *this;
32608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    Init(cm.m_w, cm.m_h, cm.m_max_disparity, cm.m_target, cm.m_max_disparity_v);
32618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return *this;
32628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
32638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingdb_Matcher_u::~db_Matcher_u()
32668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
32678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    Clean();
32688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
32698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_Matcher_u::Clean()
32718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
32728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(m_w)
32738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
32748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Free buckets*/
32758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        db_FreeBuckets_u(m_bp_l,m_nr_h,m_nr_v);
32768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        db_FreeBuckets_u(m_bp_r,m_nr_h,m_nr_v);
32778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Free space for patch layouts*/
32788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        delete [] m_patch_space;
32798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
32808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_w=0; m_h=0;
32818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
32828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingunsigned long db_Matcher_u::Init(int im_width,int im_height,double max_disparity,int target_nr_corners,
32858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                                 double max_disparity_v, bool use_smaller_matching_window, int use_21)
32868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
32878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    Clean();
32888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_w=im_width;
32898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_h=im_height;
32908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_max_disparity=max_disparity;
32918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_max_disparity_v=max_disparity_v;
32928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if ( max_disparity_v != DB_DEFAULT_NO_DISPARITY )
32948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
32958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_rect_window = 1;
32968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
32978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_bw=db_maxi(1,(int)(max_disparity*((double)im_width)));
32988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_bh=db_maxi(1,(int)(max_disparity_v*((double)im_height)));
32998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_bd=db_maxi(1,(int)(((double)target_nr_corners)*max_disparity*max_disparity_v));
33018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_kA=(int)(max_disparity*m_w);
33038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_kB=(int)(max_disparity_v*m_h);
33048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    } else
33068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
33078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_bw=(int)db_maxi(1,(int)(max_disparity*((double)im_width)));
33088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_bh=(int)db_maxi(1,(int)(max_disparity*((double)im_height)));
33098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_bd=db_maxi(1,(int)(((double)target_nr_corners)*max_disparity*max_disparity));
33118bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33128bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_kA=(long)(256.0*((double)(m_w*m_w))/((double)(m_h*m_h)));
33138bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_kB=(long)(256.0*max_disparity*max_disparity*((double)(m_w*m_w)));
33148bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
33158bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33168bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_nr_h=1+(im_width-1)/m_bw;
33178bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_nr_v=1+(im_height-1)/m_bh;
33188bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33198bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_target=target_nr_corners;
33208bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33218bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Alloc bucket structure*/
33228bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bp_l=db_AllocBuckets_u(m_nr_h,m_nr_v,m_bd);
33238bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_bp_r=db_AllocBuckets_u(m_nr_h,m_nr_v,m_bd);
33248bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33258bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_use_smaller_matching_window = use_smaller_matching_window;
33268bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    m_use_21 = use_21;
33278bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33288bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(m_use_21)
33298bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
33308bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Alloc 64byte-aligned space for patch layouts*/
33318bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_patch_space=new short [2*(m_nr_h+2)*(m_nr_v+2)*m_bd*512+64];
33328bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_aligned_patch_space=db_AlignPointer_s(m_patch_space,64);
33338bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
33348bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    else
33358bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
33368bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(!m_use_smaller_matching_window)
33378bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
33388bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Alloc 16byte-aligned space for patch layouts*/
33398bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_patch_space=new short [2*(m_nr_h+2)*(m_nr_v+2)*m_bd*128+16];
33408bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_aligned_patch_space=db_AlignPointer_s(m_patch_space,16);
33418bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
33428bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    else
33438bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
33448bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        /*Alloc 4byte-aligned space for patch layouts*/
33458bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_patch_space=new short [2*(m_nr_h+2)*(m_nr_v+2)*m_bd*32+4];
33468bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        m_aligned_patch_space=db_AlignPointer_s(m_patch_space,4);
33478bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
33488bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
33498bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33508bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return(m_target);
33518bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
33528bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33538bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingvoid db_Matcher_u::Match(const unsigned char * const *l_img,const unsigned char * const *r_img,
33548bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        const double *x_l,const double *y_l,int nr_l,const double *x_r,const double *y_r,int nr_r,
33558bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        int *id_l,int *id_r,int *nr_matches,const double H[9],int affine)
33568bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
33578bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    short *ps;
33588bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33598bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Insert the corners into bucket structure*/
33608bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    ps=db_FillBuckets_u(m_aligned_patch_space,l_img,m_bp_l,m_bw,m_bh,m_nr_h,m_nr_v,m_bd,x_l,y_l,nr_l,m_use_smaller_matching_window,m_use_21);
33618bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    if(H==0)
33628bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        db_FillBuckets_u(ps,r_img,m_bp_r,m_bw,m_bh,m_nr_h,m_nr_v,m_bd,x_r,y_r,nr_r,m_use_smaller_matching_window,m_use_21);
33638bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    else
33648bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    {
33658bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        if (affine)
33668bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        {
33678bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            double Hinv[9];
33688bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            db_InvertAffineTransform(Hinv,H);
33698bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            float r_w, c_w;
33708bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            float stretch_x[2];
33718bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            float stretch_y[2];
33728bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            AffineWarpPointOffset(r_w,c_w,Hinv, 5,5);
33738bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            stretch_x[0]=db_absf(c_w);stretch_y[0]=db_absf(r_w);
33748bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            AffineWarpPointOffset(r_w,c_w,Hinv, 5,-5);
33758bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            stretch_x[1]=db_absf(c_w);stretch_y[1]=db_absf(r_w);
33768bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            int max_stretxh_x=(int) (db_maxd(stretch_x[0],stretch_x[1]));
33778bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            int max_stretxh_y=(int) (db_maxd(stretch_y[0],stretch_y[1]));
33788bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            int warpbounds[4]={max_stretxh_x,m_w-1-max_stretxh_x,max_stretxh_y,m_h-1-max_stretxh_y};
33798bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33808bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            for (int r=-5;r<=5;r++){
33818bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                for (int c=-5;c<=5;c++){
33828bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    AffineWarpPointOffset(r_w,c_w,Hinv,r,c);
33838bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    AffineWarpPoint_BL_LUT_y[r+5][c+5]=r_w;
33848bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    AffineWarpPoint_BL_LUT_x[r+5][c+5]=c_w;
33858bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33868bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    AffineWarpPoint_NN_LUT_y[r+5][c+5]=db_roundi(r_w);
33878bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                    AffineWarpPoint_NN_LUT_x[r+5][c+5]=db_roundi(c_w);
33888bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33898bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                }
33908bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            }
33918bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33928bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            db_FillBucketsPrewarpedAffine_u(ps,r_img,m_bp_r,m_bw,m_bh,m_nr_h,m_nr_v,m_bd,
33938bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling                x_r,y_r,nr_r,H,Hinv,warpbounds,affine);
33948bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        }
33958bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling        else
33968bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling            db_FillBucketsPrewarped_u(ps,r_img,m_bp_r,m_bw,m_bh,m_nr_h,m_nr_v,m_bd,x_r,y_r,nr_r,H);
33978bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    }
33988bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
33998bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
34008bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Compute all the necessary match scores*/
34018bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_MatchBuckets_u(m_bp_l,m_bp_r,m_nr_h,m_nr_v,m_kA,m_kB, m_rect_window,m_use_smaller_matching_window,m_use_21);
34028bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
34038bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    /*Collect the correspondences*/
34048bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    db_CollectMatches_u(m_bp_l,m_nr_h,m_nr_v,m_target,id_l,id_r,nr_matches);
34058bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
34068bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling
34078bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberlingint db_Matcher_u::IsAllocated()
34088bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling{
34098bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling    return (int)(m_w != 0);
34108bddf8ce4f3dcbb56edb12cee7e93f3a9daa3f96Sascha Haeberling}
3411