- /* Compute distance matrix */
- for (uns i = 0; i < cnt1; i++)
- for (uns j = 0; j < cnt2; j++)
- {
- uns d = 0;
- for (uns k = 0; k < IMAGE_REG_F; k++)
- {
- int dif = reg1[i].f[k] - reg2[j].f[k];
- d += dif * dif;
- }
- mf[i][j] = d;
- d = 0;
- for (uns k = 0; k < IMAGE_REG_H; k++)
- {
- int dif = reg1[i].h[k] - reg2[j].h[k];
- d += dif * dif;
- }
- mh[i][j] = d;
- }
-
- uns lfs = 0, lhs = 0;
- for (uns i = 0; i < cnt1; i++)
- {
- uns f = mf[i][0], h = mh[i][0];
- for (uns j = 1; j < cnt2; j++)
- {
- f = MIN(f, mf[i][j]);
- h = MIN(h, mh[i][j]);
- }
- lf[i] = (df * 0x10000) / (df + (int)sqrt(f));
- lh[i] = (dh * 0x10000) / (dh + (int)sqrt(h));
- lfs += lf[i] * (6 * reg1[i].wa + 2 * reg1[i].wb);
- lhs += lh[i] * reg1[i].wa;
- }
- for (uns i = 0; i < cnt2; i++)
- {
- uns f = mf[0][i], h = mh[0][i];
- for (uns j = 1; j < cnt1; j++)
- {
- f = MIN(f, mf[j][i]);
- h = MIN(h, mh[j][i]);
- }
- lf[i + cnt1] = (df * 0x10000) / (df + (int)sqrt(f));
- lh[i + cnt1] = (dh * 0x10000) / (dh + (int)sqrt(h));
- lfs += lf[i] * (6 * reg2[i].wa + 2 * reg2[i].wb);
- lhs += lh[i] * reg2[i].wa;
- }
-
- uns measure = lfs * 6 + lhs * 2 * 8;