2011-09-01 2 views
5

나는 타원체에 꼭 들어 맞는 많은 3D 데이터 포인트를 가지고 있습니다.타원체를 3D 데이터 포인트에 맞추기

수학 문제가 너무 가볍기 때문에 수학 라이브러리가 없어도 최소 제곱 법을 구현하는 데 문제가 있습니다.

누군가 내 프로젝트에 곧바로 연결할 수있는 데이터에 타원체를 적용 할 수있는 코드를 알고 있거나 가지고 있습니까? C에서 최고이지만 C++, Java, C#, Python 등에서 변환하는 것은 문제가되지 않습니다.

EDIT : 센터를 찾을 수 있다는 것이 엄청난 도움이 될 것입니다. 포인트가 균등하지 않으므로 평균값을 가져도 센터가 생성되지 않습니다.

+1

당신이 당신의 포인트는 타원체의 표면에 떨어질 것으로 예상하거나 당신이 당신의 포인트는 타원형 구름에있을 것으로 예상 할 수 있습니까? – ellisbben

+1

타원체를 회전시킬 수 있습니까? – Prcela

+0

나는 그것들이 타원체의 표면에 떨어질 것으로 기대한다. 그래서 그 중심은 빈 것이다. – Hannesh

답변

1

Least Squares 데이터 피팅은 설명하는 데이터의 특성을 나타내는 좋은 방법입니다. GNU Scientific Librarylinearnon-linear 최소 자승 데이터 피팅 루틴을 포함합니다. 귀하의 경우 데이터를 선형 공간으로 변환하고 선형 최소 제곱을 사용할 수 있지만 실제 사용 사례에 따라 달라질 수 있습니다. 그렇지 않으면 비선형 방법을 사용해야합니다.

0

아이디어가 있습니다. 근사한 해결책은 아니지만 내부적으로 포인트를 유지합니다. XY 평면에서 모든 점을 얻을 수있는 반경 R1을 찾으십시오. XZ 평면 (R2) 및 YZ 평면 (R3)과 동일합니다. 그런 다음 각 축에 최대 값을 사용하십시오. A = max (R1, R2), B = max (R1, R3) 및 C = max (R2, R3). 그러나 먼저 모든 점의 평균 (가운데)을 찾고 원점에 정렬합니다.

+0

그게 지금까지 내가 해왔 던거야. 문제는 그것이 타원체의 실제 최대 값을 찾지 못한다는 것입니다. 또한, 나는 모든 포인트의 평균이 중심 이었으면 좋겠다! 그러나 그것은 점들이 표면에 고르게 분포되어있는 경우에만 작동합니다. – Hannesh

+0

음, 그렇게 좋은 생각은 아닙니다. :) 그것은 처음 보는 것보다 더 복잡합니다. – Prcela

2

최소 볼륨으로 둘러싸인 타원체를 원하면 bounding ellipsoid에 대한 SO 응답을 확인하십시오.

최소 제곱의 의미에서 가장 잘 맞는 타원을 찾으려면 error ellipsoids에 대한 MATLAB 코드를 확인하십시오. 여기서 평균 이동 된 3D 점의 공분산 행렬을 찾아 타원체를 구성하는 데 사용하십시오. 여기

6

당신은 이동 :

본 논문은 여러 차원에 타원 피팅뿐만 아니라 ellipois의 중심을 찾는 설명합니다.

http://www.physics.smu.edu/~scalise/SMUpreprints/SMU-HEP-10-14.pdf

(BTW, 나는이 대답을 가정하고있어 조금 늦게,하지만 내가 같은 일에 대한 검색에 질문을 통해 실수를 한단다 사람을 위해이 솔루션을 추가 할 생각, 희망이 도움이 :)

1

타원체를 맞추기위한 Java 기반 알고리즘을 찾을 수 없어서 직접 작성했습니다. 2D 점이있는 타원에 대해서는 좋은 알고리즘이 있지만 3D 점이있는 타원체에는 적합하지 않습니다. 몇 가지 MATLAB 스크립트를 실험 해 결국 Yury Petrov의 Ellipsoid Fit에 정착했습니다. 그것은 타원체를 다항식 Ax^2 + By^2 + Cz^2 + 2Dxy + 2Exz + 2Fyz + 2Gx + 2Hy + 2Iz = 1에 맞 춥니 다. 타원체를 강요하기 위해 어떤 제한도 사용하지 않기 때문에, 타원체 대신 무작위 적 쿼라 틱이 맞지 않게하는 상당히 많은 수의 포인트. 그것 이외에, 그것은 정말로 잘 작동합니다. 저는 Yury Petrov의 스크립트를 Java로 구현 한 Apache Commons Math를 사용하여 작은 Java 라이브러리를 작성했습니다. GIT 저장소는 https://github.com/BokiSoft/EllipsoidFit에 있습니다.

0

0

내가 몇 시간 전에 벤치 자바에 유리 페트로프의 최소 제곱 matlab에 포팅, 그것은 단지 JAMA는 필요 https://github.com/pierre-weiss

오픈 소스 Icy 플러그인을 확인할 수도 있습니다. 다음과 같은 자습서가 도움이 될 수 있습니다. https://www.youtube.com/endscreen?video_referrer=watch&v=nXnPOG_YCxw

참고 : 대부분의 기존 코드는 일반 이차 곡선에 적합하며 타원형을 적용하지 않습니다. 보다 강건하기 위해서는 선형 대수보다 convex 프로그래밍으로 갈 필요가 있습니다. 표시된 소스에서 수행되는 작업입니다.

건배, 피에르

+0

Java 코드가 C로 이식 가능해야한다는 질문에 대해서는 원래 Matlab 소스뿐만 아니라 JAMA에 대한 링크/설명을 포함해야합니다. –

+0

물론 : Matlab 소스 http://www.mathworks.com/matlabcentral/fileexchange/24693-ellipsoid-fit – mdoube

+0

JAMA는 Java 행렬 라이브러리입니다. 비슷한 라이브러리가 C/C++ 용으로 존재해야합니다. http://math.nist.gov/javanumerics/jama/ – mdoube

관련 문제