2012-08-03 3 views
1

저는 여기에서 도움을 구하는 것으로 과거에 약간의 성공을 거두었고 많은 좋은 힌트와 조언을 얻었습니다. 나는 정말로 도움이 필요한 세 가지 문제를 겪었다. 첫째로 여기 내가 입력으로 사용하고 산란 플롯의 사진입니다 :2D 데이터 포인트에 관한 몇 가지 질문

:

여기 Scatter plot

내가 그 정확한 플롯을 생성하기 위해 사용했던 코드 (마이너스 수동 화살표/라인)입니다

Source Code

나는 사람이 세 가지 질문에 저를 도울 수 있는지 알고 싶습니다

내가 가진 : 어떻게

  1. 위의 요점을 수동으로 입력 한 선을 프로그래밍 방식으로 그립니다. 나는 LS 접근법을 시도해 보았고 ok (ish) 결과를 얻었고 '더 단단한'직선을 얻는 지 확실하지 않습니다.
  2. 내 데이터에 행/열 방식으로 다른 데이터와 정확히 일치하지 않는 이상 값이있는 경우가 있습니다. 이러한 이상 치를 제거 할 수있는 방법이 있습니까 (Point A on the Plot 참조)?
  3. 마지막으로 포인트가 특정 순서로 정렬되지 않는다는 점을 고려하여 '사각형'의 '센터'를 계산하는 방법이 있습니까? 특정 순서로이 요점을 주문하면 도움이 될 수 있습니까? 아니면 똑똑한 방법이 있습니까?

시간 내 주셔서 감사합니다. 나는 누군가가 이것으로 나를 도울 수 있기를 정말로 바란다. 나는 이러한 일들을하는 방법을 알아 내려고 노력하는 뇌를 두려워 해왔고, 해결책을 찾지 못했다.

편집 : 내 LS 방법에 대한 링크가 가로 방향으로 잘못되어 삭제되었습니다.

답변

0

좋아요, 그래서 여기에 손을 빌려 주려는 약간의 가동 중지 시간이있었습니다. 나는 최소한 당신이 프로그래밍 방식으로 선을 그리기 시작할 수 있다고 생각하며, 여기에있는 다른 두 가지 질문에 대한 어떤 통찰력을 줄 수 있기를 바랍니다.

나는 당신이 가지고 있고 거기에서 시작한 코드를 거의 복사했다. 내가 붙여 넣은 것은 여러분이 cx와 cy matricies를 선언 한 후에 추가/수정 한 것입니다.

이제 내 생각 과정과 논리를 설명하십시오. Cycxcy의 "압축 된"행렬로 설계되었지만 Y 좌표 값을 기준으로 정렬되었습니다. Cx은 X 좌표를 따라 정렬되는 것을 제외하고는 동일합니다. 논리와 같은 꽤 곧장 앞으로해야한다. 그냥 그렇게 말하지 않으면 설명해 줄게!

이제 diffYdiffX입니다. XY 쌍을 그리드 모양으로 만드는 패턴이 있다는 것을 알기 때문에 각 좌표 (Xs 및 Ys 별도)의 차이점을 확인했습니다. 기본적으로 포인트의 각 라인 (수평 및 수직)에 대한 Y (또는 X) 값에 상당한 차이가 있다는 사실을 염두에두고 있습니다. adjoint 포인트 사이의 차이가 생기면 나는 2보다 큰 차이를 찾습니다 (이것은 차이점을 확인한 후에 post-hoc입니다). -1은 우리 목록에서 item (1, :)부터 시작하기 때문에 다음 행의 시작 대신에 행의 실제 끝을 알려주는 데 사용됩니다 (행을 보면 더 많은 의미가 있습니다). 코드에서).

(물론 이것은 엄청난 가정이며이 특정 데이터 세트에 대해 특정하게 만듭니다. 그러나 대부분의 격자 모양과 같이 일반화 될 수 있지만 테스트해야합니다.)

메모. 나중에 내가 생각한 차이점을 사용하여 수집 한 점수 목록에서 나중에 생각하기 시작했음을 알았습니다. 코드에서 내가 가지고있는 패턴을 따라 더 많은 선을 계속 그릴 수 있습니다.

다른 두 가지 질문까지. 당신은 내가 여기에 있고 그것을 향상 시키거나 확장한다는 생각을 가질 수 있습니다. 주어진 행 (idx [1] -> idx [2])의 모든 점을보고 행에 맞는지 확인하여 이상 치를 일으킬 수 있어야한다고 생각합니다. 라인을 그리는 데 사용 된 점을 사용하여 얻을 수있는 선 방정식의 일반 공식을 만족하도록 기본적으로 요구합니다. 물론 약간의 오류 허용 오차가 있어야합니다.

사각형의 경우 정렬 된 점 그룹을 사용하여 사각형을 만들고 regionprops 함수를 사용하여 수집 할 수있는 데이터 포인트로 지정된 직사각형의 중심 (2D 세계 중심)을 계산할 수 있습니다.

행운을 빈다.

Cy = zeros(length(cy),2); 
[Cy(:,2), IX] = sort(cy); 
Cy(:,1) = cx(IX)'; 

diffY = [0; diff(Cy(:,2))] 
idx = find(diffY>2)-1 
Cy(idx,:) % Last mark in given row, appears to be slight issue further along. 

Cx = zeros(length(cx),2); 
[Cx(:,1), IX] = sort(cx); 
Cx(:,2) = cy(IX)'; 

diffX = [0; diff(Cx(:,1))] 
idx2 = find(diffX>2)-1 
Cx(idx2,:) % Last mark in given row, appears to be slightly off later on. (top of grid though) 



%% 
figure('Position',[0,0,c,r]); 
scatter(Cy(:,1),Cy(:,2),'.'); 
axis([0 c 0 r]) 
set(gca,'YDir','reverse') 
% Horizontal lines 
line([Cy(1,1) Cy(idx(1),1)], [Cy(1,2) Cy(idx(1),2)], 'Color', 'red', 'LineWidth', 2) 
line([Cy(idx(1)+1,1) Cy(idx(2),1)], [Cy(idx(1)+1,2) Cy(idx(2),2)], 'Color', 'red', 'LineWidth', 2) 
line([Cy(idx(2)+1,1) Cy(idx(3),1)], [Cy(idx(2)+1,2) Cy(idx(3),2)], 'Color', 'red', 'LineWidth', 2) 

% Vertical lines 
line([Cx(1,1) Cx(idx2(1),1)], [Cx(1,2) Cx(idx2(1),2)], 'Color', 'red', 'LineWidth', 2) 
line([Cx(idx2(1)+1,1) Cx(idx2(2),1)], [Cx(idx2(1)+1,2) Cx(idx2(2),2)], 'Color', 'red', 'LineWidth', 2) 
관련 문제