こんにちは。2次元で実験データなどの点列から近似直線を求めるのは、最小二乗法の基本問題ですが、3次元の点群から直線の方程式(x-x0)/a=(y-y0)/b=(z-z0)/cを求めるにはどんなアルゴリズムを使いますか?スマートな方法があれば教えていただけたら幸いです。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

3次元空間の曲面ではなく、直線に乗ると仰るのだから、


(1) x, y, zのどれかを与えて、残りの2つを推定する問題。
(2) <x[i],y[i],z[i]>と直線との距離d[i]の二乗和が最小になる直線を求める問題。
と分類すべきでしょう。

(1)の場合は、たとえばzを与えてx,yを求めたいのであれば、
・zからxを求める問題。
・zからyを求める問題。
の二つを別々に解けばおしまいです。
それぞれの解は(x=Az+B, yは任意)という平面と、(y=Cz+D, xは任意)という平面を定めますから、この二つの平面の交線が、求める直線ということですね。

(2)の場合はやっかいです。
[1]ちょっと手抜きしながらも、まともにやってみましょう。
(i) 直線をどう表すか。
ご質問の式を見ると、この直線はx軸、y軸、z軸のどれとも平行でも垂直でもないことが仮定されています。
ですから、zをパラメータとして
x=az+c
y=bz+d
と書いても良いでしょう。a,b,c,dが決められれば良い訳です。
(ii) 点<p,q,r>と直線との最短距離を求める。
直線上の任意の点<az+c,bz+d, z>と点<p,q,r>の距離をdとすると
d^2 = (az+c-p)^2+(bz+d-q)^2+(z-r)^2
= (az)^2+2az(c-p)+(c-p)^2+(bz)^2+2bz(d-q)+(d-q)^2+z^2-2rz+r^2
です。これが最小になるzを求めると、
0=∂(d^2)/∂z = 2(az+c-p)a+2(bz+d-q)b+2(z-r)
ゆえに
z=(ap+bq+r-ac-bd)/(a^2+b^2+1)
であって、このときの最短距離h(p,q,r)は
h(p,q,r)^2 = (ap+bq+r-ac-bd)^2/(a^2+b^2+1)+2(ap+bq+r-ac-bd)(ac-ap+bd-bq-r)/(a^2+b^2+1)+(c-p)^2+(d-q)^2+r^2
わあ、とんでもないですね。
(iii) じゃあ、直線を求めるには?
S=Σ(h(x[i],y[i],z[i]))^2  (i=1,2,...,N)
を最小化するには
∂S/∂a = 0
∂S/∂b = 0
∂S/∂c = 0
∂S/∂d = 0
を解く必要があります。言い換えれば
∂(h(x[i],y[i],z[i]))/∂a
∂(h(x[i],y[i],z[i]))/∂b
∂(h(x[i],y[i],z[i]))/∂c
∂(h(x[i],y[i],z[i]))/∂d
を求めておいて
Σh(x[i],y[i],z[i]) (∂(h(x[i],y[i],z[i]))/∂a)=0
Σh(x[i],y[i],z[i]) (∂(h(x[i],y[i],z[i]))/∂b)=0
Σh(x[i],y[i],z[i]) (∂(h(x[i],y[i],z[i]))/∂c)=0
Σh(x[i],y[i],z[i]) (∂(h(x[i],y[i],z[i]))/∂d)=0
という連立方程式を解くことになります。
これがa,b,c,dについて非線形である(一次式でない)ことは言うまでもありません。一筋縄では行かず、反復計算で徐々に収束させていくしかありません。

[2]手抜き
もうすこし手抜きの方法を考えてみましょう。
この座標系を回転・平行移動した座標系をX-Y-Zとします。そして、求めたい直線がZ軸と一致するようにしたとします。回転と平行移動は行列を使って
X = R x + p
Y     y   q
Z     z   r
と表せます。Rは3×3の行列で Rの転置をR'とすると RR' = R' R = 単位行列
となる行列です。各点<x[i],y[i],z[i]>をこの変換で<X[i],Y[i],Z[i]>に写したとすると、
直線、すなわちZ軸との最短距離はX[i]^2 + Y[i]^2ですから、他のどんな回転・平行移動の仕方に比べても
U=Σ(X[i]^2 + Y[i]^2)  (i=1,2,....,N)
が最小になっている筈で、しかも
S=U
です。
 さて、UはZ[i]の値とは無関係ですからZ[i]を求める必要はない。さらに座標系をZ軸の周りで回転してもUは変化しません。従って、
X = R x + p
Y     y   q
      z
R =P(α)Q(β)
P(α)=cosα  0  -sinα
       0   1    0
Q(β)= 1  0     0
      0 cosβ -sinβ
      0 sinβ  cosβ
とすれば良いのです。展開すれば
X[i] = x[i]cosα-y[i]sinαsinβ-z[i]sinαcosβ+p
Y[i] = y[i]cosβ-z[i]sinβ+q
ですね。
ここでα、β、p、qを決めたい訳です。

 始めに(1)の問題を解けば、α、β、p、qの大体の値を求めることができます。これを使ってU(α,β,p,q)を計算します。
 それから、U(α,β,p,q)が小さくなるようにα、β、p、qをちょっとずつ改良して行けば良いでしょう。これには微小な角度Δα、Δβを使って、
P(Δα)=cosΔα  0  -sinΔα
        0    1    0
      sinΔα  0   cosΔα
Q(Δβ)= 1  0      0
       0 cosΔβ -sinΔβ
       0 sinΔβ  cosΔβ
を作り、P(α)、Q(α)にそれぞれ掛け算すれば良い。
P(α+Δα)=P(Δα)P(α)
Q(β+Δβ)=Q(Δβ)Q(β)
だからです。さらにここで、Δα、Δβは微小だから、
cosΔα≒1、cosΔβ≒1、sinΔα≒Δα、sinΔβ≒Δβ
(Δα)^2≒0、(Δβ)^2≒0、ΔαΔβ≒0
という近似をしても構わないでしょう。
この近似を利用すると計算は一層簡単になり、Uを最小にするようにΔα、Δβ、p、qを求める問題は線形最小二乗法(一次式の最小二乗法)になってしまい、簡単に解けます。
それを解いてから、真面目にP(α)、Q(α)を計算しなおし、また線形最小二乗法を解く。これを収束するまで繰り返せば良いのです。

なお、stomachmanは計算間違いの常習犯ですから、チェックは慎重に。
    • good
    • 1
この回答へのお礼

ありがとうございました。非常に理解しやすく、活用することができました。また、内容も大変興味深いので、仕事の合間を見つけて非線形最小二乗法も勉強しようと思います。今後とも、よろしくお願いいたします。よいお年をお迎えください。

お礼日時:2001/12/28 10:57

求めた直線の式をどう使う積もりなのかによって、やり方は違います。



用途に適した「近似」がどういうものであるか、をまず検討しなくてはなりません。さらに、たとえば「近似」を最小二乗の意味であると決めたとしても、まだ話は決まりません。

2次元の場合でも、話は単純ではないんです。
(1)「データ<x[i],y[i]> (i=1,2,....,N)から
f(x) = a x + b
というモデルについて、
Σ(f(x[i])-y[i])^2
が最小になるようにa,bを決める。」
というのが典型的な最小二乗法の問題で、こうして求めた
f(x) = a x + b
は、測定値xからyの値を推定するのに用いる式です。

しかしこれを
(y-b)/a
と変形して測定値yからxを推定するのに使ったら誤りなんです。それがやりたければ
(2)「データ<x[i],y[i]> (i=1,2,....,N)から
g(y) = A y + B
というモデルについて、
Σ(g(x[i])-y[i])^2
が最小になるようにA,Bを決める。」
という問題を解かなくてはなりません。そうやって求めたA,Bは
A y + B ≠(y-b)/a
なんです。

(3) 2次元平面に点<x[i],y[i]> (i=1,2,....,N)が打ってある。これらのなるべく近くを通る直線を求めよ。
という問題ですと、これまた別の話になります。(1),(2)の場合にはx軸、y軸を何倍に引き延ばそうとa,b,A,Bの値に変化はありませんが、(3)ではそうは行かない。
x=αt+x0
y=βt+y0
という直線と、各点との距離を小さくしたい。ですから、
点<x[i],y[i]>とこの直線の距離をd[i]とすれば
d[i]^2 = (αt[i]+x0-x[i])^2+(βt[i]+y0-y[i])^2
ここにt[i] = (α(x[i]-x0)+β(y[i]-y0))/ (α^2+β^2)
です。よって、
Σ(d[i]^2)
を最小にするα,β,x0,y0(たとえばα≧0, (α^2+β^2)=1, x0 y0 = 0という条件を追加すると一意的に決まります)を求める問題です。

かくて、ご質問は3次元の場合ですけど、どう使うのかを明示して戴かないと答は出ません。
    • good
    • 0
この回答へのお礼

丁寧なご説明ありがとうございます。(1)と(2)、(3)混同して考えてました。確かにそれぞれの解は異なりますよね。そうすると、3次元の場合では、x、yからzを推定する場合と、同様にx、yを推定する場合、各点からなるべく近くを通る直線を求める場合に分類されるわけですね。今回の私の求めたいのは、最後の問題(3)です。よろしくお願いします。もしご面倒でなければ、最初の問題の場合も教えていただけると非常に嬉しいです。すみませんが、お世話になります。

お礼日時:2001/12/27 02:25

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q画像処理 (3次元のモデルと画像のマッチングのアルゴリズムについて)

画像処理を勉強しているものなのですが、
現在2次元画像同士のマッチング(テンプレートマッチング)などはプログラムが組めるのですが
計算機内に作った3次元のモデルと画像のマッチング、つまり3次元物体の姿勢推定のアルゴリズムがよくわかりません。簡単でいいので教えてください。
よろしくお願いします。

Aベストアンサー

アドホックですがX、Y,Zそれぞれで3次元モデルの画像(無限遠から見た画像)を作成して2分探索的にマッチングをかけていけばいつかは終わるのではないでしょうか?
対象物の色やテクスチャなどの特徴があればある程度探索空間を減らせるとは思いますが汎用的でなくなる可能性があります。

Q線形です (1)を x+3y-2z=0 x-2y+4z=0 x^2+y^2+z^2=1をもちいて 答

線形です
(1)を
x+3y-2z=0
x-2y+4z=0
x^2+y^2+z^2=1をもちいて
答えが+-の答えになりました
(2)では外せきが8,-6,-5となり
おおきさの5ルート5で割ると
+-の答えにはなりませんでした
どちらが正しいのでしょうか?

Aベストアンサー

外積からでてきた単位べクトルは、外積の定義から、ベクトルa、bに垂直ですよね。
だからそれと正反対のベクトルも、ベクトルa、bに垂直な単位ベクトルだから、これも答えに入れれば
よいのです。つまり外積から出した単位ベクトルの各成分に(-1)をかけた成分のベクトルも答えに
なります。そしてこうして出した2つのベクトルは、先に内積で出した2つのベクトルと一致します。

Qある物体を描いた画像から3次元におけるその物体の座標を求めたいのですが

画像処理・画像分析のことで質問があります。
複数あるいは1枚の画像から、その画像の中に描かれている物体を現実世界の空間に置いて立体として考えた時のその物体の座標を求めたいのですが・・・。そういったことを研究している分野はあるでしょうか。
文章が下手なので具体例で説明します。
例えば、ある車を斜めから撮った画像があるとします。そうしたら画像は2次元ですよね。そこで、その車を3次元で考えて、例えば4本のタイヤのそれぞれの中心座標は(4,4,1),(0,0,1)・・・などということを求めたいのです。
こうしたことを研究している分野はあるでしょうか。またそういったことを書いた書籍等があったら教えていただけるとうれしいです。

Aベストアンサー

前者回答にもありますように1枚の画像から3次元空間を作りだすのは不可能ですが、違う角度から物体を2枚以上撮れば1台のカメラでも3次元座標を求めることができます。

ただし1台で撮影する場合は静止物体に限ります。物体が動いている場合は2台以上のカメラが必要になります。

一番簡単な方法としては視差という方法を用いて計算することができます。
例えば2台のカメラを水平にdの距離だけ離して置き撮影します。 ある物体がカメラAでは角度αの位置にありカメラBでは角度βにあったとき、カメラと物体を結ぶ2直線の交点をCとします。水平軸と交点Cの垂直線の長さとカメラの距離dから、ある物体の距離(3次元成分)を算出することが可能です。

ヒトの眼が2つあるのは、こうした物体との距離を測るためです。
こういった研究は視差という手法以外にもかなり盛んに行われています。以下に例として一つ論文を取り上げておきます。

参考になれば幸いです。

https://www.jstage.jst.go.jp/article/kikaib1979/55/510/55_510_404/_pdf

前者回答にもありますように1枚の画像から3次元空間を作りだすのは不可能ですが、違う角度から物体を2枚以上撮れば1台のカメラでも3次元座標を求めることができます。

ただし1台で撮影する場合は静止物体に限ります。物体が動いている場合は2台以上のカメラが必要になります。

一番簡単な方法としては視差という方法を用いて計算することができます。
例えば2台のカメラを水平にdの距離だけ離して置き撮影します。 ある物体がカメラAでは角度αの位置にありカメラBでは角度βにあったとき、カメラと物体を...続きを読む

Q図のように、直線y=1/2x+a(a>0)が直線y=2xと交わる点をA

図のように、直線y=1/2x+a(a>0)が直線y=2xと交わる点をA、x軸、y軸と交わる点をそれぞれB、Cとするとき、点Aのy座標が12のとき、線分BOの長さを求めなさい。ただし、座標の1メモリを1cmとする。

という問題です。教えてください。

Aベストアンサー

まず、点Aの座標を考えます
点A(Ax,12)と置きます
次に点Aはy=2x上の点なのでここにy=12を代入すると
12=2x
x=6
よって、点Aは(6,12)となります
次に、y=(1/2)x+aの切片aを求めます
点A(6,12)を通るので、これを式y=(1/2)x+aに代入すると
12=3+a
a=9
よって切片9となります
後はBの座標を出すのみで、B(Bx,0)とおくとy=(1/2)x+9に代入して
0=(1/2)x+9
(1/2)x=-9
x=-18
よってB(-18,0)
あとは簡単な話で、原点からの距離なので答えは18cm

QVB6で3次元のフレームワークの画像

VB6で3次元のフレームワークの画像を作成したいのですが、何か良い見本はありますか?

たとえば、立法体や三角錐や球体などを見る角度によって表示させたいです。

将来的には、スターウォーズで出てくる、銀河帝国軍の主力戦闘機TIEファイターの動画をフレームワークで表示させたいです。

http://www.starwars.jp/databank/machine/empire2.html

Aベストアンサー

それって自分で計算して表示したいって事?
それとも既存のライブラリ(OpenGL,DirectX)の使用?

Q2直線 x/a+y/b=1, x/a+y/b=2(a>0, b>0)の

2直線 x/a+y/b=1, x/a+y/b=2(a>0, b>0)の間の距離を求めよ。

という問題の解説に、

2直線は平行だから、第一の直線上の点(1、0)を通る。よって、ここからbx+ay=2abまでの距離を求める

と、ありました。

なぜ(1,0)を通るのですか?

Aベストアンサー

誤記なんてレベルでは済まないですよ。
 A.2直線は平行である。
 B.第一の直線が点(1,0)を通る。or B'.第一の直線上のどこかの点を第二の直線が通る。
 C.AがB(またはB')の根拠になっている。
このうち正しいのはAだけです。

第一の直線は点(a,0)を通る。
また、2直線は平行だから、点(a,0)から第二の直線までの距離を求めればよい。
とでも書くのなら良いのですが、論理が滅茶苦茶ですね。

Q4次元 = 3次元+時間 はウソですか?

理系の友人と話をしていた所、
「4次元 = 3次元+時間というのはウソだよ。」
と言われました。

「日本人はSFやマンガのドラえもんなどで4次元は時間だと誤解してる。
四次元空間を限りなく薄くして行った極限が三次元だ。
人間の目には三次元の姿しか写らないので、すぐ近くに四次元空間があったとしても、人間の感覚では捕らえることができない。」
というような説明を受けました。


4次元 = 3次元+時間というのはウソですか?
4番目の次元が時間でないとしたら、何なんでしょうか?
4番目の次元は人間の感覚では捕らえることはできないのでしょうか?

Aベストアンサー

>四次元空間を限りなく薄くして行った極限が三次元だ。

3次元の中で、
2次元を描くと、「鉛筆の高さ」があります。
1次元の線を引くと、炭素と鉛の元素の幅と高さがあります。

3次元の中には他次元は介入出来ません。
介入可能なのが、SFマンガや異次元ポケットです。

そこに異次元があるならば、人間の目で捉える事が出来なくても、光の干渉縞で空間の運動を捉える事が出来ます。

http://www.px.tsukuba.ac.jp/home/ecm/onoda/butsurib1/node78.html

Qx+y+z=0,2x^2+2y^2-z^2=0のとき,x=yであることを証明せよ。

クリックありがとうございます(∩´∀`)∩

 ★x+y+z=0,2x^2+2y^2-z^2=0のとき,x=yであることを証明せよ。

この問題について説明をお願いします。

Aベストアンサー

おおざっぱな説明になりますが、左の式を
z=-x-y
として、それを右の式のzに代入します。
それを展開してまとめると
x^2-2xy+y^2=0
という式になります。
あとはこれを因数分解すれば
(x-y)^2=0
となるので、x=yという答えがでます。
与えられた条件がほかになければこれでいいはずです。

QAutoCAD2000のデータをPhotoshopで3次元CGにするには?

使用CADはタイトルの通り、AutoCAD2000です。今度仕事で2000で書いた図面をPhotoshopに取り込んで三次元CGにしてほしい、と言われたのですが、いまいちわかりません。
というのが、Photoshopというソフト自体、二次元のソフトだと思っていたのですが、違いますか?
私がその話を聞いて思ったのは、AutoCAD2000で三次元の絵をある程度作っておいて、その画面をコピーしてPhotoshopに読み込んで使うのかな?ということでした。ネットでいろいろ検索してみたのですが、どうもみなさんは元から三次元のCGソフトを使って作成していらっしゃるみたいで、私が使えるソフトは上記の二種類と限定されてしまっています。
どなたかお教えください。

Aベストアンサー

参考URL(mura's room)→AutoCAD掲示板→mura's home AutoCAD掲示板→Photoshopで検索→3Dデータを画像ファイルとして取り込むには?

参考になりますでしょうか。

参考URL:http://www.mura.sh/

Qy,z∈V'(Vの線形写像全体の集合)[x,y]=0→[x,z]=0は∃α∋z=αyを意味する事を示せ。

おはようございます。

[Q] Prove the following statement:
Let y,z∈V'(set of all linear functionals on V) [x,y]=0→[x,z]=0 implies that ∃α∋z=αy.

という問題に悪戦苦闘しています。
linear functionalは線形汎写像(終集合がRやCの線形写像)の意味。

この問題はつまり、
"y(x)=0⇒z(x)=0"が成立するならば
線形写像z:V→R(or C) はαyという写像(zはyのスカラー倍になっているような線形写像)。
つまり、
V∋∀x→z(x):=α(y(x))という写像
である事を示せ。
という意味だと解釈しています(勘違いしておりましたらご指摘ください)。
その場合,どのように証明すればよいのでしょうか?

Aベストアンサー

#1です。
>>V≠Ker(y)の時はα:=z(x_0)/y(x_0)と採れば
∀x∈Vに対し、
x∈Ker(y)ならz(x)=0且つy(x)=αz(x)=α・0 (∵仮定) =0となるのでy=zでOK。
x∈V\Ker(y)ならz(x)=(z(x_0)/y(x_0))y(x)=???=y(x)
何故か
z(x)=y(x)が言えません。

z=yではなくz=αyとしてるので問題は無いように思いますが。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報