좋아요, 그래서 여기에 손을 빌려 주려는 약간의 가동 중지 시간이있었습니다. 나는 최소한 당신이 프로그래밍 방식으로 선을 그리기 시작할 수 있다고 생각하며, 여기에있는 다른 두 가지 질문에 대한 어떤 통찰력을 줄 수 있기를 바랍니다.
나는 당신이 가지고 있고 거기에서 시작한 코드를 거의 복사했다. 내가 붙여 넣은 것은 여러분이 cx와 cy matricies를 선언 한 후에 추가/수정 한 것입니다.
이제 내 생각 과정과 논리를 설명하십시오. Cy
은 cx
및 cy
의 "압축 된"행렬로 설계되었지만 Y 좌표 값을 기준으로 정렬되었습니다. Cx
은 X 좌표를 따라 정렬되는 것을 제외하고는 동일합니다. 논리와 같은 꽤 곧장 앞으로해야한다. 그냥 그렇게 말하지 않으면 설명해 줄게!
이제 diffY
및 diffX
입니다. 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)