質問編集履歴

1

最小二乗法のプログラム追加

2020/01/09 03:02

投稿

sugar1234
sugar1234

スコア7

test CHANGED
File without changes
test CHANGED
@@ -43,8 +43,6 @@
43
43
  位置校正用の格子板の交点を既知点として抽出
44
44
 
45
45
  そして補正式を3次の近似多項式として係数を最小二乗法を用いて求め、濃度値は3次畳み込み内挿法で内挿
46
-
47
- その後得られた補正式の結果を使い画像を補正
48
46
 
49
47
  """
50
48
 
@@ -126,7 +124,45 @@
126
124
 
127
125
  """サブピクセル精度で検出した座標を与えて、多項式の係数を最小二乗法で求める。"""
128
126
 
127
+ x = newcorners[:,0]
128
+
129
+ y = newcorners[:,1]
130
+
131
+ f = 1 + x + y + x**2 + y**2 + x*y + x**3 + y**3 + y*x**2 + x*y**2
132
+
133
+
134
+
135
+ Xtil = np.c_[np.ones(newcorners.shape[0]), newcorners] # Xの行列の左端に[1,1,1,...,1]^Tを加える。
136
+
129
- Xa,Ya = np.split(newcorners, 2, 1) #x,y軸それぞれつい分け
137
+ A = np.dot(Xtil.T, Xtil) # 標準形A,bはめ
138
+
139
+ b = np.dot(Xtil.T, f)
140
+
141
+ w = linalg.solve(A, b) # wについて解く。
142
+
143
+
144
+
145
+ xmesh, ymesh = np.meshgrid(np.linspace(0, 1000, 20),
146
+
147
+ np.linspace(0,1000, 20))
148
+
149
+ zmesh = (w[0] + w[1] * xmesh.ravel() +
150
+
151
+ w[2] * ymesh.ravel() ).reshape(xmesh.shape)
152
+
153
+
154
+
155
+ fig = plt.figure()
156
+
157
+ ax = fig.add_subplot(111, projection='3d')
158
+
159
+ ax.scatter(x, y, f, color='k')
160
+
161
+ ax.plot_wireframe(xmesh, ymesh, zmesh, color='r')
162
+
163
+ plt.show()
164
+
165
+
130
166
 
131
167
 
132
168
 
@@ -138,9 +174,7 @@
138
174
 
139
175
  ### 試したこと
140
176
 
141
- [https://stackoverflow.com/questions/40994059/fit-polynomial-surface-with-python]参考多項式の係数を求めようとましたがうまくきませんでした。
177
+ 標準形係数ついて解くことで10個の係数を求めようと思いましたが、内積を計算するところで3×3、1×3の行列になり係数をうまく求めることができませんでした。
142
-
143
-
144
178
 
145
179
 
146
180
 
@@ -148,6 +182,10 @@
148
182
 
149
183
  ![イメージ説明](3fd1efbf8e43b359fc04d07c94b1b8db.jpeg)
150
184
 
151
- 補正式がこのように与えられるとし係数をうく求める方法を知りたいです。
185
+ 補正式がこのように与えられてます。
186
+
187
+ 上記プログラムを書き換えることで係数を推定することは可能でしょうか。
188
+
189
+ また、その場合どのように行列の計算を行えばよいのでしょうか。
152
190
 
153
191
  ご教授お願いします。