我有一大組我想要擬合橢球體的3D數據點。將橢球體擬合到3D數據點
我的數學很差,所以我無法在沒有任何數學庫的情況下實現最小二乘法。
有誰知道或有一段代碼可以適合橢圓體數據,我可以直接插入到我的項目中?在C將是最好的,但它應該沒有問題,我從C++,Java,C#,Python等轉換。
編輯:只是能夠找到中心將是一個巨大的幫助了。請注意,這些點不是均勻分佈的,因此取平均值不會導致中心。
我有一大組我想要擬合橢球體的3D數據點。將橢球體擬合到3D數據點
我的數學很差,所以我無法在沒有任何數學庫的情況下實現最小二乘法。
有誰知道或有一段代碼可以適合橢圓體數據,我可以直接插入到我的項目中?在C將是最好的,但它應該沒有問題,我從C++,Java,C#,Python等轉換。
編輯:只是能夠找到中心將是一個巨大的幫助了。請注意,這些點不是均勻分佈的,因此取平均值不會導致中心。
Least Squares數據擬合可能是一種很好的方法,可以說明您描述的數據的性質。 GNU Scientific Library包含linear和non-linear最小二乘數據擬合例程。就你而言,你可能能夠將數據轉換爲線性空間並使用線性最小二乘法,但這取決於您的實際使用情況。否則,你需要使用非線性方法。
如果你想要最小體積的橢圓體,請查看這個SO答案bounding ellipsoid。
如果您想要最小二乘意義上的最佳擬合橢圓,請查看此代碼的error ellipsoids,您可在其中找到均值偏移3D點的協方差矩陣並使用該代碼構造橢球。
在這裏你去:
本文介紹的擬合橢多個維度,以及發現的ellipois中心。希望這有助於
http://www.physics.smu.edu/~scalise/SMUpreprints/SMU-HEP-10-14.pdf
(順便說一句,我假設這個答案是有點晚了,但我想我會添加此解決方案的人誰在尋找同樣的事情在你的問題絆倒:)
我找不到一個好的基於Java的橢球擬合算法,所以我最終自己寫了。對於具有2D點的橢圓有一些很好的算法,但對於具有3D點的橢球則沒有。我嘗試了幾個不同的MATLAB腳本,最終決定了Yury Petrov的Ellipsoid Fit。它適用於多項式Ax^2 + By^2 + Cz^2 + 2Dxy + 2Exz + 2Fyz + 2Gx + 2Hy + 2Iz = 1的橢球。它不使用任何約束來強制橢球,所以你必須有有相當多的點阻止隨機的quardic而不是橢球體。除此之外,它工作得很好。我使用Apache Commons Math編寫了一個小型Java庫,用Java實現了Yury Petrov的腳本。 GIT存儲庫位於https://github.com/BokiSoft/EllipsoidFit。
我剛剛經歷了同樣的過程了。 這是一個基於Nima Moshtagh工作的python模塊。在許多地方引用,但也在這個問題上關於一個Bounding ellipse
該模塊還處理最終橢球的繪圖。請享用!
https://github.com/minillinim/ellipsoid/blob/master/ellipsoid.py
我前段時間移植尤里·彼得羅夫的最小二乘Matlab的鉗工到Java,它只需要JAMA:https://github.com/mdoube/BoneJ/blob/master/src/org/doube/geometry/FitEllipsoid.java
我們制定了一套Matlab和Java的代碼在這裏適應橢球: https://github.com/pierre-weiss
您還可以查看我們的開源Icy插件。以下教程可能會對您有所幫助: https://www.youtube.com/endscreen?video_referrer=watch&v=nXnPOG_YCxw
注意:大多數現有代碼都符合通用二次方程式,並且不會強加橢球體形狀。爲了獲得更多的魯棒性,你需要進行凸面編程而不僅僅是線性代數。這是在指出的來源中所做的。
乾杯, 皮埃爾
你希望你的點落在橢球體的表面上,或者你希望你的觀點是在一個橢圓形的雲? – ellisbben
橢圓體可以旋轉嗎? – Prcela
我期望它們落在橢球的表面上,所以中心是空心的。 – Hannesh