2014-03-31 3 views
3

나는 실세계에서 점 구름을 가지고 있으며 그 위에 표면을 맞추고 점의 곡선을 계산하려고합니다 (!). X, Y 및 점의 Z의 차이의 진폭이 매우 큰, 그래서 포인트 이후 은 현실 세계에 내가 here의 코드를 사용할 때 내가 MATLAB에 아래의 오류 사항 :matlab에서 3D 점군에 표면을 맞추려면 어떻게해야합니까?

Warning: Rank deficient, rank = 2, tol = 7.9630e-007. 

이 있음을 의미를 내 데이터의 상태가 좋지 않습니다. 내 데이터의 일부는 다음과 같습니다

32512032.3900000 5401399.69000000 347.030000000000 
32512033.1400000 5401399.79000000 346.920000000000 
32512036.3000000 5401399.62000000 346.840000000000 
32512037.3900000 5401399.95000000 346.870000000000 
32512034.4800000 5401400     346.930000000000 
32512035.6000000 5401400.05000000 346.950000000000 
32512036.6900000 5401400.38000000 346.980000000000 
32512037.9600000 5401400.30000000 346.910000000000 
32512033.7600000 5401400.42000000 346.880000000000 
32512034.8700000 5401400.48000000 346.960000000000 

도 내가 MATLAB에서 fit 공식을 사용합니다.

sf = fit([x, y], z, 'poly23'); 

과 같은 오류보고 :

Warning: Equation is badly conditioned. Remove repeated data points 
     or try centering and scaling. 

포인트의 유형에 표면이나 부드러운 곡선에 맞는 방법인가?

+0

다음을 확인하십시오. http://www.mathworks.fr/fr/help/matlab/scattered-data-interpolation.html – Wli

답변

2

편집 당신은 시도 할 수 있습니다 :

%% Centering 
oldData = data 
center = mean(data); 
centerMatrix = ones(size(data,1),1)*center; 
data = data - centerMatrix;   

중심으로

%% Scaling 
scale = max(abs(data)); 
scaleMatrix = ones(size(data,1),1)*scale; 
data = data./scaleMatrix; 

를 확장하지만 결국에 잊지 마세요. . .

xx = scale(1)*xx + center(1) 
yy = scale(2)*yy + center(2) 
zz = scale(3)*zz + center(3) 

센터링은 데이터를 원래 위치로 이동시킵니다. 크기 조정을하면 스프레드가보다 평등 해 지므로 다른 축보다 하나의 축을 훨씬 잘 맞출 수 있습니다. 나중에 결과의 규모를 조정하고 중심을 벗어나게해야합니다.

센터링은 안전합니다. 그것은 당신이 기대하는 것을해야하고 결과를보다 안정하게 만들어야합니다. 스케일링은 이 아니며은 안전합니다. 그것이 당신이 원하는 것을 제공하는지 확인하십시오; 센터링만으로 충분하다면 필요한 모든 것을 찾을 수 있습니다.

어떤 경우에도 점 구름이 크기 때문에 한 번에 로컬 패치에 적용해야합니다.

내가 왜 "빠르고 더러운가요?" 빠른 코드 작성과 같은 의미였습니다. 이 문제를 구체적으로 다루는 많은 출판물이 있으며 더 빨리 실행됩니다. 그들은 더 나은 결과를 만들어 낼 것입니까? 글쎄, 당신이 더 잘 정의하는 것에 달려 있습니다.

스캔 한 레이저에 대해 말하면 실제 스캔 한 환경에 대한 사실적인 데이터는 많지 않습니다. 포인트 클라우드가 다른 것 (스테레오 비전, 모션의 구조)에서 나온 것이라면 더 많은 데이터 세트를 시도 할 수 있습니다.

지상 진실이 없다면, "좋은"과 "나쁜"이 무엇인지 말할 수 없습니다. 보통 꽤 분명합니다. 그러나 데이터의 양 때문에 포인트 클라우드 조작은 사소하지 않습니다.

이전 대답 센터링은 피팅을 사용하여 빠르고 더러운 솔루션을 시도하려는 경우에 적합합니다.물론 모든 데이터를 한꺼번에 처리 할 수는 없지만 몇 개의 로컬 지점 (수 백 또는 수천 개)을 선택하고 먼저 가운데에 배치하면 더 나은 결과를 얻을 수 있습니다.

두 점 사이의 차이가 작기 때문에 문제가 발생하지만 벡터 자체의 크기는 매우 큽니다. 데이터를 가져 가면 중심에 놓고 (원하는 경우 크기를 조정할 수도 있습니다), 그 다음에는 작업에 맞출 수 있습니다. 한 번에 청크에 대해 이렇게하십시오.

+0

@timbo. 감사합니다. 나는 나의 데이터를 중심에 놓았고 그 결과를 볼 수있다. 하지만 중심에 무엇이 있는지 몰라요? 왜 더러운거야? 센터링은 내 데이터를 파괴합니까? – Ahmad

+0

좀 더 명확하게하기 위해 제 질문을 수정했습니다. – timbo

관련 문제