Wingneo 座標計算ワーク「アフィン2」の計算資料

Wingneo 座標計算ワーク「アフィン2」の計算資料
(1) 特筆事項
 係数の計算精度を向上するために基準座標(平均値)からの相対的な計算としています。
 変換元基準点と変換先基準点の対を、1対1、1対複数、複数対1の指定が可能で、複数指定した
基準点は平均値を基準点座標として採用します。
 式の名称にヘルマートやアフィンといった名称を使用し区別していますが、便宜上の表記です。
(2) 使用する変数記号など
Pn
:変換元基準点 n(X座標及びY座標を含めた表現)
Pnx
:変換元基準点 n のX座標(Qn が 1 に対して複数指定の場合平均値)
Pny
:変換元基準点 n のY座標(Qn が 1 に対して複数指定の場合平均値)
PA
:Pn の平均値(X座標及びY座標を含めた表現)
PAx
:Pnx の平均値
PAy
:Pny の平均値
Qn
:変換先基準点 n(X座標及びY座標を含めた表現)
Qnx
:変換先基準点 n のX座標(Pn が 1 に対して複数指定の場合平均値)
Qny
:変換先基準点 n のY座標(Pn が 1 に対して複数指定の場合平均値)
QA
:Qn の平均値(X座標及びY座標を含めた表現)
QAx :Qnx の平均値
QAy
:Qny の平均値
pm
:変換元対象点 m(X座標及びY座標を含めた表現)
pmx :変換元対象点 m のX座標(係数を使用して計算する場合の与点座標)
pmy :変換元対象点 m のY座標(係数を使用して計算する場合の与点座標)
qm
:変換先対象点 m(X座標及びY座標を含めた表現)
qmx :変換先対象点 m のX座標(係数を使用して計算する場合の求点座標)
qmy :変換先対象点 m のY座標(係数を使用して計算する場合の求点座標)
(3) 変換基準点の扱い
Pn 及び Qn に対して、1 点ずつ既知点を指定する方法を標準とする。
Pn 又は Qn に対して、どちらか一方に 1 点指定し、もう片方に 2 点以上の指定を認め、この場合
は各々の座標値の平均値を Pn 及び Qn と称する。
Pn 及び Qn を 1 対とし、係数計算時には 1 対に対して重量 1 を与える。
計算方式により必要な対数以上を使用し、係数を求める。
(4) 変換対象点の扱い
変換元対象点 pm は 1 点ずつ指定する。
pm に対して変換先対象点 qm を 1 点指定し、これを 1 対とする。
入力された対数分だけ係数に当てはめて変換先対象点を求める。
1
(5) 対応する計算方式名称及び方程式、表示される係数、変換計算式
 「平行移動」
方程式
Qnx = (Pnx − PAx) + QAx
Qny = (Pny − PAy) + QAy
表示される係数
「基準X1」
「基準Y1」
「基準X2」
「基準Y2」
変換計算式
X1 = PAx
Y1 = PAy
X2 = QAx
Y2 = QAy
qmx = (pmx − X1) + X2
qmy = (pmy − Y1) + Y2
 「等倍ヘルマート変換」
方程式(ヘルマート)
Qnx = KAh ∙ (Pnx − PAx) − KBh ∙ (Pny − PAy) + KCh + QAx
Qny = KBh ∙ (Pnx − PAx) + KAh ∙ (Pny − PAy) + KDh + QAy
表示される係数
「基準X1」
「基準Y1」
「基準X2」
「基準Y2」
「回転角」
X1 = PAx
Y1 = PAy
X2 = KCh + QAx
Y2 = KDh + QAy
|󎣐󎣐󎣐|
α = tan󎣐󎣐 |󎣐󎣐󎣐| 象限を考慮した全方位角度(秒単位)
変換計算式
qmx = cos α ∙ (pmx − X1) − sin α ∙ (pmy − Y1) + X2
qmy = sin α ∙ (pmx − X1) + cos α ∙ (pmy − Y1) + Y2
2
 「相似ヘルマート変換」
方程式(ヘルマート)
Qnx = KAh ∙ (Pnx − PAx) − KBh ∙ (Pny − PAy) + KCh + QAx
Qny = KBh ∙ (Pnx − PAx) + KAh ∙ (Pny − PAy) + KDh + QAy
表示される係数
「基準X1」
「基準Y1」
「基準X2」
「基準Y2」
「回転角」
「伸縮率」
変換計算式
X1 = PAx
Y1 = PAy
X2 = KCh + QAx
Y2 = KDh + QAy
|󎣐󎣐󎣐|
α = tan󎣐󎣐 |󎣐󎣐󎣐| 象限を考慮した全方位角度(秒単位)
f = √KAh󎣐 + KBh󎣐 (倍率)
qmx = f ∙ cos α ∙ (pmx − X1) − f ∙ sin α ∙ (pmy − Y1) + X2
qmy = f ∙ sin α ∙ (pmx − X1) + f ∙ cos α ∙ (pmy − Y1) + Y2
 「アフィン変換」
方程式(アフィン)
Qnx = KAa ∙ (Pnx − PAx) + KCa ∙ (Pny − PAy) + KEa + QAx
Qny = KBa ∙ (Pnx − PAx) + KDa ∙ (Pny − PAy) + KFa + QAy
表示される係数
「基準X1」
「基準Y1」
「基準X2」
「基準Y2」
「X係数 1」
「X係数 2」
「Y係数 1」
「Y係数 2」
変換計算式
X1 = PAx
Y1 = PAy
X2 = KEa + QAx
Y2 = KFa + QAy
KX1 = KAa
KX2 = KCa
KY1 = KBa
KY2 = KDa
qmx = KX1 ∙ (pmx − X1) + KX2 ∙ (pmy − Y1) + X2
qmy = KY1 ∙ (pmx − X1) + KY2 ∙ (pmy − Y1) + Y2
3
(6) 係数の計算
以下の式では次のように置き換えて表現します。
xn = Pnx − PAx (変換元基準点 X 座標の平均値を 0 とした場合の変換元基準点の X 座標)
yn = Pny − PAy (変換元基準点 Y 座標の平均値を 0 とした場合の変換元基準点の Y 座標)
Xn = Qnx − QAx (変換先基準点 X 座標の平均値を 0 とした場合の変換先基準点の X 座標)
Yn = Qny − QAy (変換先基準点 Y 座標の平均値を 0 とした場合の変換先基準点の Y 座標)
cn = 変換元基準点、変換先基準点の対数
 方程式(ヘルマート)の係数計算
方程式は
Xn = KAh ∙ xn − KBh ∙ yn + KCh
Yn = KBh ∙ xn + KAh ∙ yn + KDh
と置き換えることができ、次式により行列と最小 2 乗法を用いて各係数を求める。
Vh = Ah ∙ Xh − Lh、Ph
ただし、
Vh:残差のベクトル(2cn×1)
Xh:未知数のベクトル(4×1)
KAh
KBh
Xh = 󎣐
󎣐
KCh
KDh
Ah:計画行列(2cn×4)
xn −yn 1 0
Ah = 󎣐yn xn 0 1󎣐
⋮
⋮
⋮ ⋮
Lh:定数項のベクトル(2cn×1)
Xn
Lh = 󎣐Yn󎣐
⋮
Ph:重量の行列(2cn×2cn)
1 0 ⋯ 0
0 1 ⋯ 0
Ph = 󎣐
󎣐 変換元基準点、変換先基準点の対に対する重みは全て 1 とする
⋮ ⋮ ⋱ ⋮
0 0 ⋯ 1
※ 行列要素の配置順位は、それぞれ対応している。
正規方程式の行列
Nh ∙ Xh = Uh
ただし、
Nh = Ah󎣐 ∙ Ph ∙ Ah、U = Ah󎣐 ∙ Ph ∙ Lh
Ah󎣐は、Ah の転置行列
4
解
Xh = Nh󎣐󎣐 ∙ Uh
Nh󎣐󎣐は、Nhの逆行列
式の展開
󎣐
󎣐
0
󎣐 (xn) 󎣐 (yn)⎤
⎡󎣐 (xn + yn )
⎢
⎥
⎢
0
󎣐 (xn󎣐 + yn󎣐) − 󎣐 (yn) 󎣐 (xn)⎥
⎥
Nh = ⎢
⎢
󎣐 (xn)
− 󎣐 (yn)
cn
0 ⎥
⎢
⎥
⎢
⎥
󎣐 (yn)
󎣐 (xn)
0
cn ⎦
⎣
⎡ 󎣐 (xn ∙ Xn + yn ∙ Yn) ⎤
⎢
⎥
⎢󎣐 (−yn ∙ Xn + xn ∙ Yn)⎥
⎥
Uh = ⎢
⎢
⎥
󎣐 (Xn)
⎢
⎥
⎢
⎥
󎣐 (Yn)
⎣
⎦
5
 方程式(アフィン)の係数計算
方程式は
Xn = KAa ∙ xn + KCa ∙ yn + KEa
Yn = KBa ∙ xn + KDa ∙ yn + KFa
と置き換えることができ、次式により行列と最小 2 乗法を用いて各係数を求める。
Va = Aa ∙ Xa − La、Pa
ただし、
Va:残差のベクトル(2cn×1)
Xa:未知数のベクトル(6×1)
KAa
⎡KBa⎤
⎢
⎥
KCa ⎥
Xa = ⎢
⎢KDa⎥
⎢ KEa ⎥
⎣ KFa ⎦
Aa:計画行列(2cn×6)
xn 0 yn 0 1 0
Aa = 󎣐0 xn 0 yn 0 1󎣐
⋮
⋮
⋮
⋮ ⋮ ⋮
La:定数項のベクトル(2cn×1)
Xn
La = 󎣐Yn 󎣐
⋮
Pa:重量の行列(2cn×2cn)
1 0 ⋯ 0
0 1 ⋯ 0
Pa = 󎣐
󎣐 変換元基準点、変換先基準点の対に対する重みは全て 1 とする
⋮ ⋮ ⋱ ⋮
0 0 ⋯ 1
※ 行列要素の配置順位は、それぞれ対応している。
正規方程式の行列
Na ∙ Xa = Ua
ただし、
Na = Aa󎣐 ∙ Pa ∙ Aa、Ua = Aa󎣐 ∙ Pa ∙ La
Aa󎣐は、Aaの転置行列
6
解
Xa = Na󎣐󎣐 ∙ Ua
Na󎣐󎣐は、Naの逆行列
式の展開
󎣐
0
󎣐 (xn ∙ yn)
0
󎣐 (xn)
0 ⎤
⎡ 󎣐 (xn )
⎢
⎥
0
󎣐 (xn󎣐)
0
󎣐 (xn ∙ yn)
0
󎣐 (xn)⎥
⎢
⎢
⎥
⎢󎣐 (xn ∙ yn)
0
󎣐 (yn󎣐)
0
󎣐 (yn)
0 ⎥
⎥
Na = ⎢
󎣐
⎢
0
󎣐 (xn ∙ yn)
0
󎣐 (yn )
0
󎣐 (yn)⎥
⎢
⎥
⎢ 󎣐 (xn)
0
󎣐 (yn)
0
cn
0 ⎥
⎢
⎥
⎢
⎥
0
󎣐 (xn)
0
󎣐 (yn)
0
cn ⎦
⎣
⎡󎣐 (xn ∙ Xn)⎤
⎢
⎥
⎢ 󎣐 (xn ∙ Yn) ⎥
⎢
⎥
⎢󎣐 (yn ∙ Xn)⎥
⎥
Ua = ⎢
⎢󎣐 (yn ∙ Yn)⎥
⎢
⎥
⎢ 󎣐 (Xn) ⎥
⎢
⎥
⎢
⎥
(Yn)
⎣ 󎣐
⎦
7