Untitled

 avatar
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