2016-06-02 4 views
0

python 및 matplotlib의 색인과 너무 혼동 스럽습니다.색인이 python 및 matplotlib와 혼동 됨

import matplotlib as plt 

나는 내가 매트릭스 인 이미지 I를 읽습니다. 먼저 이미지를 표시하려면 plt.imshow()을 사용했습니다.

이미지에 선이 있고 x 축과 y 좌표가 L: x=[x0, x1, ..., xn], x=[y0, y1, ..., yn]입니다. 따라서 plt.plot(x,y)을 사용하여이 선을 이미지에 플롯 할 수 있습니다. 이 단계는 여전히 좋습니다. 임대 중이면 이미지에 표시된 선이 올 바릅니다.

그러나 이미지의 밝기 값을 plt.plot(I[x,y])을 사용하여 선 L의 위치에 그릴 때 분명히 잘못되었습니다!

선의 좌표가 이미지의 좌표와 약간의 불일치가 있기 때문에 오류라고 생각합니다. plt.plot(I[y,x])을 시도했지만 여전히 정확하지 않았습니다.

첫 번째 질문은 무엇을 사용해야합니까? I[x,y] or I[y,x]?

plt.imshow()의 y 축이 위 아래로 있음을 확인합니다. 이것이 y 축이 뒤집힌 이유가 될 수 있습니까? x가 뒤집 혔습니까? 나는 좌표 명령과 완전히 혼동한다. ...

아무도 나에게 어디에서 잘못 되었는가를 말할 수 있 었는가? 많은 감사합니다!

+0

'I'의 유형은 무엇입니까? – saq7

답변

0

첫 번째 질문은 무엇을 사용해야합니까? I[x,y] 또는 I[y,x]?

항상 I[x,y]을 사용하십시오. 이 표기법은 모든 계산 라이브러리와 수학 지점에서 표준입니다.

plt.plot(x,y)은 시퀀스를 필요로합니다. 나는 I[a,b]이 영역 값이 아닌 하나의 픽셀 값을 반환한다고 믿는다.

0

아마 짐작 하시겠지만 여기에는 두 가지 규칙이 있습니다.

Mathematical convention

둘째는 어레이에 사용 된 규칙이있다 : (x,y) = (0,0) 하부 왼쪽 모서리이다

우선, 그래프의 좌표의 수학적 규칙이있다. 이 배열을 예로 들어 보겠습니다.

img = [[0, 0, 0, 1], 
     [0, 0, 1, 0], 
     [0, 1, 0, 0], 
     [1, 0, 0, 0]] 

이렇게 줄의 이미지를 저장하는 방법입니다. 이제 img[y, x] = img[0, 0]상단의 왼쪽 모서리를 나타냅니다.

이미지를 표시하는 데 사용되는 matplotlib의 imshow 함수를 사용하면 x 축과 y 축에 이미지 행렬의 픽셀 인덱스가 표시됩니다.

enter image description here

따라서, 좌표 시스템을 정렬하기 위해, 다음과 같이 수행 :

plt.plot(np.flipud(I)[y, x]) 

(np.flipud 매트릭스를 거꾸로 뒤집) 따라서, (0,0)의 좌측 상단은