On Sunday, 21 April 2024 at 14:57:33 UTC, Paolo Invernizzi wrote:
Hi,

Someone can point me to a D implementation of the classical OpenCV find homography matrix?

Thank you,
Paolo

Something I wrote awhile ago...

```
import kaleidic.lubeck : svd;
import gfm.math;
import mir.ndslice : sliced;

auto generateTransformationArray(int[] p) {
    return generateTransformationArray(p[0],p[1],p[2],p[3]);
}

auto generateTransformationArray(int x, int y, int x_, int y_) {
    return [-x, -y, -1, 0, 0, 0, x*x_, y*x_, x_,
            0, 0, 0, -x, -y, -1, x*y_, y*y_, y_];
}

auto transformCoor (mat3d mat, vec3d vec) {
    auto res = mat * vec;
    return res / res[2];
}

auto findHomography (int[][] correspondances) {
    auto a = correspondances
                .map!(a => a.generateTransformationArray)
                .joiner
                .array
                .sliced(8,9);

    auto r = a.svd;
    auto homog = r.vt.back;
    return mat3d(homog.map!(a => a/homog.back).array);
}
```

Reply via email to