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);
}
```