2015-04-18 105 views
8

Ich bin extrem neu in Scikit-Image (skimage) Bibliothek in Python für die Bildverarbeitung (vor wenigen Minuten gestartet!). Ich habe imread verwendet, um eine Bilddatei in einem numpy.ndarray zu lesen. Die Anordnung ist 3-dimensional, wobei die Größe der dritten Dimension 3 ist (nämlich eine für jede der roten, grünen und blauen Komponenten eines Bildes).Wie kann man einen grünen Kanal aus einem RGB-Bild in Python mithilfe der Scikit-Image-Bibliothek extrahieren?

rgb_image = imread("input_rgb_image.jpg") 
rgb_image.shape # gives (1411L, 1411L, 3L) 

Ich habe versucht, grünen Kanal zu extrahieren:

green_image = rgb_image[:,:,1] 

Aber wenn ich diese Bildmatrix in eine Ausgabedatei schreiben, wie:

imsave("green_output_image.jpg",green_image) 

ich ein Bild erhalten, das nicht der Fall ist schau wirklich NUR grün!

+0

Ohh. Mein Fehler. Ich denke, was ich getan habe, nur ein neues RGB-Bild mit kleinerer Größe zu machen. Danke für den Zeiger! – Sangram

+0

Seltsamerweise gibt das Extrahieren von Grün nur wieder ein rotes Bild zurück. Hier ist der Link des Bildes, das ich versuchte grünen Kanal zu extrahieren: http://upload.wikimedia.org/wikipedia/commons/3/37/Fundus_photograph_of_normal_right_eye.jpg – Sangram

+0

Okay. Also sollte ich die rote Komponente auf Null setzen als: 'rgb_image [:,:, 0] = 0' und so weiter .... – Sangram

Antwort

14

Was Sie extrahieren ist nur ein einzelner Kanal und das zeigt Ihnen, wie viel grüne Farbe jedes Pixel hat. Dies wird schließlich als ein Graustufenbild visualisiert, wobei dunklere Pixel angeben, dass an diesen Punkten nicht viel "Grün" vorhanden ist, und hellere Pixel anzeigen, dass an diesen Punkten eine hohe Menge an Grün vorhanden ist.

Wenn ich interpretiere, was Sie richtig sagen, möchten Sie das "Grün" jeder Farbe visualisieren. Stellen Sie in diesem Fall sowohl den roten als auch den blauen Kanal auf Null und belassen Sie den grünen Kanal intakt. So

:

green_image = rgb_image.copy() # Make a copy 
green_image[:,:,0] = 0 
green_image[:,:,2] = 0 

Bitte beachte, dass ich eine Kopie des Originalbilds gemacht haben und verändert die Kanäle statt das Original bei Modifizieren Sie es brauchen. Wenn Sie jedoch nur den grünen Kanal extrahieren und diesen wie oben erwähnt als Graustufenbild visualisieren möchten, dann können Sie das tun, was Sie oben mit der Einstellung Ihrer green_image Variable getan haben.