2016-06-13 2 views
0

커브를 표시하는 실험에서 캡쳐 한 스크린 샷이 몇 개 있는데, 그 커브를 배열로 추출하여 데이터를 분석하려고합니다.이진 이미지에서 곡선을 확인하십시오.

제 방법의 첫 번째 부분은 이미지를 커브를 떠나는 잘 선택된 임계 값으로 바이너리 이미지로 변환하는 것입니다. 이것은 정상적으로 작동하지만 곡선에서 배열을 추출하는 두 번째 부분은 그렇지 않습니다. 그림을 검토하고 흰색 픽셀을 식별하는 "순진한"방법을 시도했지만 결과는 예상되는 곳 근처에 없었습니다.

누군가 해결책이 있습니까?

import numpy as np 
import matplotlib.pyplot as plt 
import PIL.Image as img 

gray = img.open('0100k.jpg').convert('L') 
bw = gray.point(lambda x: 0 if x<240 else 255, '1') 
bw = bw.convert('1') 
bw.show() 
pix = np.array(bw) 
(n,m) = pix.shape 
curve = np.zeros(n) 
for i in range(n): 
    for j in range(m): 
     if pix[i,j] == 1: 
     curve[i] = j 
plt.plot(curve) 
plt.show() 
+0

'i'와 'j'가 반대로 표시되는지 궁금합니다. 왜냐하면'np.array'는리스트의리스트를 반환하기 때문이다. 첫 번째 요소는 내부 목록 (세로)에 액세스하고 두 번째 요소는 각 목록의 개별 요소 (가로)에 액세스합니다. –

+0

네 말이 맞아. 또한, 0,0 포인트가 왼쪽 상단 모서리에 있으므로 제대로 작동하도록하려면 다음과 같이하십시오. '(n, m) = pix.shape curve = np.zeros (m) for 범위 내 (n)에있는 의 경우 : pix [i, j] == 1 일 경우 커브 [j] = ni' – Izzul

+0

아, 글쎄, 아웃. 그것은 나를위한 좌절의 원천이기도합니다. 모든 수학에서 원점은 왼쪽 하단에 있습니다. 왜 많은 도서관이 그렇지 않은가를 주장하는 이유는 무엇입니까? –

답변

0

고마워

A screenshot example

는, 상기 방법은 현재 작동 용액을 각각의 크기에 대한 올바른 I 및 J의 대입했다. 그것을 지적 해 주신 @Matt Cremens에게 감사드립니다.
플롯이 두꺼워지면 그림 왼쪽에 보이는 것과 같이 존재하지 않는 픽셀이 감지됩니다. http://s31.postimg.org/i0conbbxn/figure_1.png

관련 문제