- ベストアンサー
楕円内の点から楕円周までの最短距離を計算する方法
- 楕円内の任意の点から楕円周までの最短距離を計算する方法について教えてください。
- 最短距離の計算はperlを使用して行い、細胞の形を楕円に近似した際の位置データのコントロールに利用されます。
- 座標X0,Y0から楕円周までの最短距離を求める方法を詳しく教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
楕円の式を (x/a)^2+(y/b)^2=1 (a≧b>0) とおきます。 座標点(X0,Y0)を通る楕円への法線は a(x-acosθ)sinθ=b(y-bsinθ)cosθ(0≦θ<2π) ここで、法線と楕円との交点の座標(acosθ,bsinθ), a(X0-acosθ)sinθ=b(Y0-bsinθ)cosθ 蛇足ですが、接線は次式で与えられます。 b(x-acosθ)cosθ+a(y-bsinθ)sinθ=0(0≦θ<2π) ここで、接点の座標(acosθ,bsinθ), a(X0-acosθ)sinθ=b(Y0-bsinθ)cosθ 座標点(X0,Y0)と楕円上の最短距離点は楕円上の点(acosθ,bsinθ)で 最短距離Dmin=√{(X0-acosθ)^2 +(Y0-bsinθ)^2}(0≦θ<2π) ここで、a(X0-acosθ)sinθ=b(Y0-bsinθ)cosθ と得られます。
その他の回答 (3)
- info22_
- ベストアンサー率67% (2650/3922)
#2です。 A#2の補足の質問の回答 最終的には >perlを使って計算したい のであれば、 Dmin=f(X0,Y0,a,b) …(A) ((X0/a)^2+(Y0/b)^2<1,0<b<a)…(B) なるf(X0,Y0,a,b)の理論式を求められなくても、具体的な(X0,Y0,a,b)が与えられた時 f(X0,Y0,a,b)の値を決定するアルゴリズムがあれば良いと思いますので。 理論式の導出が困難なら導出にこだわる必要は無いでしょう。 >0から2πまでθの値を変化させて求める条件を満たす値を見つける必要があるのでしょうか? (X0,Y0)が(B)を満たす範囲の座標点なのでθの範囲は(0≦θ<2π)となりますが、 最小距離点(x0,y0)=(acosθ,bsinθ)を求める場合は(X0,Y0)と(x0,y0)つまり(cosθ,sinθ)は同じ象限に存在します。なので同じ象限のでθの範囲で考えることになります。 たとえば、(X0,Y0)が第一象限に存在する(X0≧0,Y0≧0)なら0≦θ≦π/2の範囲でθを求めることになります。ただし、Y0=0の場合はy=0(θ=0)も法線になります。X0の値によりDminが変わりますので Dmin=Min(√((acosθ-X0)^2+(bsinθ)),a-X0) で求めます。 θは a(X0-acosθ)sinθ=b(Y0-bsinθ)cosθ(0≦θ≦π/2) …(C) (sinθ)^2+(cosθ)^2=1 …(D) で(X0,Y0)と同じ象限にあるθを考えます。θは特に求める必要はなく、同じ象限にある(cosθ,sinθ)を連立方程式を解いて求めれば十分です。このとき最小距離点は(x0,y0)=(acosθ,bsinθ)、最小距離Dminは次式で得られます。 Dmin=√((x0-X0)^2+(y0-Y0)^2) 具体的にDminを求める手順の具体例を説明すると X0=Y0=0.5,a=2,b=1とすると、X0>0,Y0>0なので、cosθ>0,sinθ>0(0<θ<π/2)。 (C),(D)より 6cosθsinθ-2sinθ+cosθ=0 (sinθ)^2+(cosθ)^2=1 この(cosθ,sinθ)を連立にして、cosθ>0,sinθ>0を満たすものを解けば cosθ=0.28397251163822,sinθ=0.95883233532934 と得られます。cosθ,sinθについて解くなら三角方程式でなく、普通の連立方程式を解けば良いです。この連立方程式を数値計算で解くルーチンプログラムを用意すればperlでも解けるでしょう。この(cosθ,sinθ)から最小距離点 (x0,y0)=(acosθ,bsinθ)=(0.56794502327644,0.95883233532934) が求まるので、最小距離Dminは Dmin=√{(X0-x0)^2+(Y0-y0)^2}=0.46383578789461 と得られえます。 このように(X0,Y0,a,b)が与えられれば,連立方程式ルーチンを使って(cosθ,sinθ)を求め、それから(x0,y0)を決まるので最小距離Dmin=√{(X0-x0)^2+(Y0-y0)^2}が求まります。 Dminの理論式を直接導いても複雑な式になって実用的ではないでしょう。数値計算を用いてDminを求めるアルゴリズムがあればperlでプログラムを組んで、最小距離Dminを求めることができるでしょう。
お礼
具体例まで掲示して、とても丁寧にDminの計算方法を教えていただきありがとうございます。おかげさまで、計算できるようになりました。 ありがとうございます。
- stomachman
- ベストアンサー率57% (1014/1775)
ご質問そのものに対する適切な回答が既に出ていますんで,以下は蛇足ってか,よけいなオセワですが: 本来3次元的構造である細胞を楕円で近似しようとおっしゃるのは,つまり,「P:『細胞は厚み一定であると仮定し,上下の平らな面は表面とはみなさないものとする』という近似をする.目的のモノ(オルガネラ?)の位置(x,y)が細胞内に一様に分布すると仮定したとき,(x,y)が細胞の縁近くで見いだされる確率が,実際の細胞の形を仮定した場合に比べてこの近似では過大に見積もられることになる.それに比べてすらなお高い確率で(x,y)が細胞の縁近くで見いだされることが実測されたのであれば,これは間違いなく,(x,y)は細胞の縁近くに偏って分布していると言える」というロジックをお考えなのではなかろうか. だとすると,Pの仮定のもとで,細胞の画像の輪郭内の領域Aの面積をSとし,輪郭からt以内の距離にある部分A(t)の面積をS(t)とすれば,細胞内に一様に分布に分布する点(x,y)が輪郭からt以内の距離にある部分に含まれる確率は,もちろん S(t)/Sとなる.そこでtとして適当な値を決めて,これをTとします.で,測定されたオルガネラの位置N個のうち,A(T)に入っているものの個数n(T)を数える. そして,帰無仮説H(T):「S(t)/S=n(T)/N」を検定し(あわよくば)H(T)を棄却する. というストーリーなのだろうと思います. もしそうなら,Aを個別の細胞ごとに設定する必要はなくて,「点が測定できたすべての細胞の領域を合併したもの(つまり細胞がいっぱい写っている像)」そしてA(T)は「Aにおいて,縁から厚みTだけの部分を取り出したもの」とすれば良い訳ですから,画像処理ソフト(Imageなど)があれば,楕円による近似よりももうちょっとうまくやれそうです. Aの二値画像P(細胞内なら1,細胞外なら0)を用意し,半径T/2の円盤状のフィルタを作用させ,さらにその画素値が1でない部分を全部0にして二値化した画像Qを作ると,これはAにおいて縁からTまでの部分を削り取った画像になりますね.そして, 画像 R = Qが0でPが1であるなら1,さもなくば0 という二値画像を作る.そうすると,AはPにおける値1の画素の数,A(T)はQにおける値1の画素の数,ということになります.Aの二値画像Pは,なにも1枚の写真である必要はなくて,倍率さえ同じなら何枚もあっても構わない.それらをくっつけて1つの画像にしたもので良いのです. 測定したオルガネラの位置を画素値1で表した画像Lを作って, 画像M = Lが1でQも1であるなら1,さもなくば0 とすれば,NはLにおける値1の画素の数, n(T)は画像Mにおける値1の画素の数.というわけで,同じ画像ベースで処理できそうに思います.
お礼
問題を数学的に整理していただき、また、具体的に顕微鏡の写真からどのように解析したらよいのかアドバイスまでしていただき、大変ありがとうございます。 ただ、ターゲットの位置は、蛍光色素でタグ付けしたものを発光させることにより、蛍光顕微鏡下で観察しているのですが、得られる画像は、非常に非常に不鮮明なものです。 そのため、二値化どころか、どれがターゲットなのかを通常の人が識別することも困難であるため、通常は慣れた研究者が、異なるZ軸で撮影したデータを見比べながら、どれが本物の点かを経験から判断して、一つ一つ手動で測定していく必要があります。 このような理由から画像処理で行うのは難しいかもしれません。 現在は、既に大量の観察済みデータが手元にあり、どのようにして有意に周辺にあるのかを検定しようかと模索しているところで、そのための比較用のデータとして今回質問させていただいた計算を利用しようと考えています。 しかしながら、領域を区切って、区切った領域の中にある画素数を数えるという考え方は、非常に参考になりました。 次回に同様の解析をする機会があるときには、その考え方を使えないか検討してみたいと思います。 数学のカテゴリーで質問したにも関わらず、画像解析についての回答までいただきありがとうございました。
- yuki360679
- ベストアンサー率10% (152/1427)
「この計算の結果は~」のところの意味がよく分りませんが・・・ 円周と座標(X0,Y0)の最短距離は、円周と、座標(X0,Y0)から円周に向かって延びた線が垂直に交わる円周上の点までの距離であることは間違ありません。 計算式は、座標の取り方によって異なりますが、直角三角形の辺の計算なので、直角を挟む2辺の2乗の和は、斜辺の2乗に等しい(A^2+B^2=C^2)を展開することで、距離を求められます。
お礼
回答していただき、ありがとうございました。 計算の概念が良くわかりました。 よろしければ、具体的な式も教えていただけると大変助かります。
お礼
分かりやすい図まで作って説明してくださってありがとうございます。 ただ、教えていただいた式を使って、X0,Y0, a, b,の4つの文字だけから成り立つDminの式を求めようとしたのですが、θがたくさん出てきてしまって手に負えません。ランダムに取得した各々の(X0,Y0)に対して、DminをPerlで計算する際には、具体的にどのような計算式を計算すればよいのでしょうか?0から2πまでθの値を変化させて求める条件を満たす値を見つける必要があるのでしょうか?大変、理解が悪くて申し訳ありません。追加で教えていただけると幸いです。