質問編集履歴
1
最小二乗法のプログラム追加
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
|
-
|
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
|
-
|
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
|
ご教授お願いします。
|