做保密处理或者坐标系转换的时候经常会用到关于空间配准的问题,那么如何根据已知点对求得坐标转换的参数是一个值得研究的问题。这里用到的编程技巧不多,关键是要用到线性代数和数值分析的知识。纵观当前地图坐标保密处理或者坐标系转换的实例,其无外乎采用旋转、平移、拉伸等方式,于是数值的计算无外乎于解n个n元一次方程组,最后通过误差分析进行拟合。
下面就是一个形如 x' = Ax + by +C; y' = Dx + Ey +F 的六参数仿射变换的数值解法,采用Python2语言。
__author__ = 'Lee'
# -*- coding: utf-8 -*-
def affine_fit(from_pts, to_pts):
q = from_pts
p = to_pts
if len(q) != len(p) or len(q) < 1:
print "原始点和目标点的个数必须相同."
return False
dim = len(q[0]) # 维度
if len(q) < dim:
print "点数小于维度."
return False
# 新建一个空的 维度 x (维度+1) 矩阵 并填满
c = [[0.0 for a in range(dim)] for i in range(dim+1)]
for j in range(dim):
for k in range(dim+1):
for i in range(len(q)):