2017-09-04 1 views
0

Ich versuche herauszufinden, wie man eine RGB.png-Datei über ihre Histogramm-Intensitäten binarisiert.ImageProcessing mit mehreren Schwellen zu binarisieren Phasen auf skimage.io's imread()

Example: smoothed RGB intensities with estimated thresholds for R,G,B

dies so weit funktioniert, dass ich mit Schwellenwert für einen Intensitätsbereich gelten kann die < und Operator> mit dem folgenden Code: (auch wenn ich frage mich, warum es nicht img < thres1 ist für phase1 ..)

from skimage.io import imread 
img=imread('example.png') 
#intensitys 
thres1 = 30 
thres2 = 80 
#calculate 
phase1 = img > thres1 
phase3 = img < thres2 

Jetzt habe ich versucht thres1 und Thres2 mit mehreren metho nur die Pixel zwischen den Intensitäten zu erhalten ds z.B .:

phase2 = thres1 < img < thres2 
#also 
phase2 = thres1<img & img < thres2 
#and 
phase2 = thres1<img 
phase2 = thres2>phase2 

Während diese Operation es mir folgende Valueerror gibt: Der Wahrheitswert eines Arrays mit mehr als einem Element ist nicht eindeutig. Benutze a.any() oder a.all() Ich habe auch versucht, diesen Fall mit a.any() und a.all() zu behandeln, wobei ich keine hilfreichen Ergebnisse erhalten habe.

Mit phase2 = np.logical_and(thres1 < img,img < thres2) wird fälschlicherweise Phase3 in Phase2 eingeschlossen;

phase2 = np.logical_and(thres1 < img,img > thres2) enthält fälschlicherweise phase1 in phase2.

Example: plot of generated image arrays for phase2 = np.logical_and(thres1 < img,img > thres2)

Gibt es eine Möglichkeit, Bilder zu schaffen, von mehr als einem Thresholding Parameter erfolgt durch alle Pixel zwischen zwei Intensitätswerten zu zeichnen?

+1

Können Sie einen minimalen Beispielfall hinzufügen, sagen Sie ein Bildfeld mit einer Form von '(4,5,3)' und zeigen Sie uns die gewünschte Ausgabe? – Divakar

+0

'phase2 = np.logical_and (thres1

+0

hab es; 'phase2 = ~ (np.logical_and (phase1, phase3)) Danke für die Hilfe! –

Antwort

0

nachdem ich viele Dinge ausprobiert habe, hat der inverse Operator es für mich bekommen. es scheint, wie dies als

arbeitet

„Gib mir alle Pixel, nicht in phase1 enthalten, phase3“

phase2 = ~(np.logical_and(phase1,phase3))

mehr als 3 Phasen benötigen, würde ich immer noch nicht wissen, wie das zu handhaben ..

Verwandte Themen