2017-11-08 3 views

답변

4

잡음이 거의없는 단순한 선과 깨끗한 이미지를 처리하기 때문에 프로그래밍 방식으로이 작업을 수행 할 수 있습니다 (이 경우 a grayscale intensity uint8 image).

img = imread('1ebO0.png'); % Load image 
mask = (img < 128);   % Threshold to get a matrix of 0 and 1 (ones where your 
          % line is, zeroes elsewhere) 
[~, index] = max(flipud(mask), [], 1); % Gives you the index of the first row from 
             % the bottom of the image where a 1 occurs 
x = find(any(mask, 1)); % Find indices of columns that have at least one 1 to get x 
y = index(x);   % Trim row indices based on the above to get y 
plot(x, y); 

그리고 행 : 끝내

enter image description here

+0

감사합니다 다음은 선을 추출 할 수있는 방법입니다. 내가 묻고 싶다면이 기능을 복제하고 오른쪽으로 옮기고 싶습니다. 나는 그것을 복제하고 그것을 옮길 수 있지만 그 다음에 그 회선은 이상한 메가 괴물을 준다. 어떤 생각? – matteoeoeo

+0

이 코드를 사용하고 있습니다. f1 = y; plot (f1, 'k'); 기다림; x2 = x (:) + 10; f2 = y; plot (x2, y, 'r'); 기다림; fv = conv (f1, f2, 'full') plot (fv, 'b'); – matteoeoeo

+0

@matteoeoeo : 축의 데이터를 플롯 할 때 데이터를 이동 시키지만 데이터 자체는 이동시키지 않습니다.'f1'과'f2'는 모두'y'를 포함하므로, 벡터 자체와 컨볼 루션하고 있습니다. 당신의 데이터'y'도 1113 점이고 최대 값은 700입니다. 그래서 놀랍지는 않습니다. – gnovice

0

솔루션은 getpts 기능을 사용할 수 있습니다. 이 기능은 지정된 그림에서 마우스를 사용하여 몇 가지 포인트를 얻는 데 도움이됩니다.

[x, y] = getpts(fig) 

는 마우스를 사용하여 그림 그림의 현재 축에있는 점의 집합을 선택할 수 있습니다. 선택한 점의 좌표가 x 및 y로 반환됩니다.

자세한 내용은 this documentation을 참조하십시오.

관련 문제