Untitled
unknown
plain_text
2 months ago
1.1 kB
2
Indexable
public static double[,] FindHomographyMatrix(double[,] s, double[,] d) { double[] vals = ComputeHomography(s, d); var hm = new double[3, 3]; for(int i=0; i<9; i++) hm[i/3, i%3] = vals[i]; return hm; } static double[] ComputeHomography(double[,] src, double[,] dst) { int n = src.GetLength(0); double[,] A = new double[2*n, 9]; for(int p=0; p<n; p++) { int row = 2*p; A[row,0] = -src[p,0]; A[row,1] = -src[p,1]; A[row,2] = -1; A[row,6] = src[p,0]*dst[p,0]; A[row,7] = src[p,1]*dst[p,0]; A[row,8] = dst[p,0]; A[row+1,3] = -src[p,0]; A[row+1,4] = -src[p,1]; A[row+1,5] = -1; A[row+1,6] = src[p,0]*dst[p,1]; A[row+1,7] = src[p,1]*dst[p,1]; A[row+1,8] = dst[p,1]; } return DenseMatrix.OfArray(A).Svd(true).VT.Row(8).ToArray(); }
Editor is loading...
Leave a Comment