コード例 #1
0
        //计算点的摄影测量坐标
        public List <MyPoint> GetPhotogrammetryCoords()
        {
            List <MyPoint> photogrammtryCoords = new List <MyPoint>();
            int            num = leftMCoords.Count();
            float          deno, N1, N2;
            float          s = (float)(scale / 1000.0);
            float          f = -leftPCoords[0].Z;
            MyPoint        temp;

            for (int i = 0; i < num; i++)
            {
                //计算第i+1个点在右片中的像空间辅助坐标
                temp = RightEE.Photo2Model(rightPCoords[i]);
                //计算点投影系数
                deno = leftMCoords[i].X * temp.Z - temp.X * leftMCoords[i].Z;
                N1   = (bx * temp.Z - bz * temp.X) / deno;
                N2   = (bx * leftMCoords[i].Z - bz * leftMCoords[i].X) / deno;
                //计算点的模型坐标
                temp.X = N1 * leftMCoords[i].X * s;
                temp.Y = (N1 * leftMCoords[i].Y + N2 * temp.Y + by) / 2 * s;
                temp.Z = N1 * leftMCoords[i].Z * s + s * f;
                photogrammtryCoords.Add(temp);
            }

            return(photogrammtryCoords);
        }
コード例 #2
0
        //计算点的模型坐标
        public List <MyPoint> GetModelCoords()
        {
            List <MyPoint> modelCoords = new List <MyPoint>();
            int            num = leftMCoords.Count();
            float          deno, N1, N2;
            float          f = -leftPCoords[0].Z;
            MyPoint        temp;

            for (int i = 0; i < num; i++)
            {
                //计算第i+1个点在右片中的像空间辅助坐标
                temp = RightEE.Photo2Model(rightPCoords[i]);
                //计算点投影系数
                deno = leftMCoords[i].X * temp.Z - temp.X * leftMCoords[i].Z;
                N1   = (bx * temp.Z - bz * temp.X) / deno;
                N2   = (bx * leftMCoords[i].Z - bz * leftMCoords[i].X) / deno;
                //计算点的模型坐标
                temp.X = N1 * leftMCoords[i].X;
                temp.Y = (N1 * leftMCoords[i].Y + N2 * temp.Y + by) / 2;
                temp.Z = N1 * leftMCoords[i].Z;
                modelCoords.Add(temp);
            }

            return(modelCoords);
        }
コード例 #3
0
        //计算误差方程的系数矩阵和常数项
        private void CalFactor()
        {
            int     num = leftPCoords.Count();
            float   deno, N1, N2;
            MyPoint temp2;

            for (int i = 0; i < num; i++)
            {
                //求解第i+1个点的像空间辅助坐标
                temp2 = RightEE.Photo2Model(rightPCoords[i]);//右片
                //计算点投影系数
                deno = leftMCoords[i].X * temp2.Z - temp2.X * leftMCoords[i].Z;
                N1   = (bx * temp2.Z - bz * temp2.X) / deno;
                N2   = (bx * leftMCoords[i].Z - bz * leftMCoords[i].X) / deno;
                //为系数矩阵赋值
                A[i, 0] = bx;
                A[i, 1] = -temp2.Y / temp2.Z * bx;
                A[i, 2] = -temp2.X * temp2.Y / temp2.Z * N2;
                A[i, 3] = -(temp2.Z + temp2.Y * temp2.Y / temp2.Z) * N2;
                A[i, 4] = temp2.X * N2;
                L[i, 0] = N1 * leftMCoords[i].Y - N2 * temp2.Y - by;
            }
        }