2016-06-13 10 views
0

Ich habe ein paar Screenshots von Experimenten, die Kurven anzeigen, und ich möchte diese Kurve in ein Array extrahieren, um die Daten zu analysieren.Identifizieren Sie die Kurve im Binärbild

Der erste Teil meiner Methode besteht darin, das Bild in ein binäres mit einem gut gewählten Schwellenwert zu transformieren, der nur die Kurve verlässt. Dies funktioniert gut, aber der zweite Teil, der darin besteht, ein Array aus der Kurve zu extrahieren, funktioniert nicht. Ich versuchte die "naive" Methode, das Bild durchzugehen und die weißen Pixel zu identifizieren, aber die Ergebnisse sind nicht annähernd so, wie man es erwarten würde.

Hat jemand eine Lösung?

A screenshot example

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

Ich kann nicht helfen, aber frage mich, ob Sie Ihre "i" und "j" umgekehrt haben weil 'np.array' eine Liste von Listen zurückgibt. Das erste Element greift auf die inneren Listen zu (vertikal) und das zweite Element greift auf die einzelnen Elemente jeder Liste zu (horizontal). –

+0

Sie haben Recht. Außerdem ist der Punkt 0,0 in der oberen linken Ecke, so dass es funktioniert, fand ich nur, dass es besser so ist: '(n, m) = pix.shape kurve = np.zeros (m) für i in Bereich (n): für j in Bereich (m): wenn pix [i, j] == 1: Kurve [j] = ni' – Izzul

+0

Ah, nun, ich bin froh, dass Sie es sich vorgestellt haben aus. Es ist auch eine Quelle der Frustration für mich. In der gesamten Mathematik befindet sich der Ursprung in der linken unteren Ecke. Warum viele Bibliotheken darauf bestehen, ist mir ein Rätsel. –

Antwort

0

Danke Jungs, jetzt die Methode funktioniert, wurde die Lösung in der richtigen Zuordnung von i und j auf ihre jeweiligen Dimensionen. Danke an @Matt Cremens für den Hinweis.
Aber die Handlung verdichtet sich, es erkennt einige nicht vorhandene Pixel, wie die auf der linken Seite des Bildes sichtbar: http://s31.postimg.org/i0conbbxn/figure_1.png

Verwandte Themen