Graustufenumwandlung mit tf.reduce_mean & tf.concat

TensorFlow Neuling hier, Training auf einem einfachen Tutorial, die ich gerade scheitern Der Punkt ist, ein Bild in Graustufen umzuwandeln.

Unsere Daten sind grundsätzlich ein HxWx3 (Höhe des Bildes, Breite und Farbe auf drei Werten r, g, b).

So könnte es gleichbedeutend sein, jede Arrayzelle von [r, g, b] zu [gray, gray, gray] zu transformieren [gray, gray, gray] wobei gray = mean(r, g, b) richtig ist?

Also habe ich den doc auf eine mittlere Funktion überprüft und gefunden. Ich habe es auf der Farbachse verwendet, dh Achse = 2, dann das Ergebnis auf sich selbst mit der Achse 2 wieder auf "replizieren" Mittelwert und schließlich erhalten 3 mal den Grauwert (= Mittelwert) als rot, grün und blau.

Siehe den folgenden Code:

 import tensorflow as tf import matplotlib.image as mpimg filename = "MarshOrchid.jpg" raw_image_data = mpimg.imread(filename) image = tf.placeholder("uint8", [None, None, 3]) # Reduce axis 2 by mean (= color) # ie image = [[[r,g,b], ...]] # out = [[[ grayvalue ], ... ]] where grayvalue = mean(r, g, b) out = tf.reduce_mean(image, 2, keep_dims=True) # Associate r,g,b to the same mean value = concat mean on axis 2. # out = [[[ grayvalu, grayvalue, grayvalue], ...]] out = tf.concat(2, [out, out, out]) with tf.Session() as session: result = session.run(out, feed_dict={image: raw_image_data}) print(result.shape) plt.imshow(result) plt.show() 

(Sie können hier Originalbild bekommen)

Bildbeschreibung hier eingeben

Dieser Code kann ausgeführt werden, aber das Ergebnis ist nicht ok.

Wenn Graustufen fehlschlägt

Wundernd, was passiert ist, überprüfe ich meine Variablen, und es stellt sich heraus, dass der Mittelwert nicht ok ist, hat auf Screenshot unten gezeigt, bedeutet (147, 137, 88)! = 38

Bildbeschreibung hier eingeben

Irgendwelche Ideen? Kann nicht herausfinden, was ich falsch gemacht habe …

Vielen Dank! Pltrdy

One Solution collect form web for “Graustufenumwandlung mit tf.reduce_mean & tf.concat”

Ändern des dtype vor dem Rechenmittel (wegen Überlauf):

Der Fehler kommt aus dem dtype dein Platzhalter. Ursache der Typ-Inferenz, Zwischen-Tensoren können keine Werte größer als 255 (2 ^ 8-1) haben. Wenn Tensorflow berechnen Mittel (147, 137, 88), zuerst berechnet es: Summe (147, 137, 88) = 372, aber 372> 256 so halten sie 372% 256 = 116.

(147, 137, 88) = Summe (147, 137, 88) / 3 = 116/3 = 40. Ändern Sie den dtype Ihres Platzhalters auf "uint16" oder "uint32".

Ergebnis beim Umschalten auf uint16 (nicht wirklich überzeugend richtig):

Bildbeschreibung hier eingeben

Ändere dtype zurück zu uint8 vor dem Plotten, um pyplot spec:

(Siehe lib doc über imshow) Mentionen, dass es uint8 sein muss Aus irgendeinem Grund, mit uint16 funktioniert nicht (und es sieht aus wie es umgekehrt Farbe.Ich finde dunklen Bereich sind weiß in früheren Graustufen Transformation. Nicht sicher, warum).

Rückkehr zu uint_ mit tf.cast kurz vor dem Laufen (zB out = tf.cast(out, tf.uint8) ) gibt die gute Graustufen-Transformation unten:

Bildbeschreibung hier eingeben

  • Wie man eine heiße codierungen in ganzzahlige umwandelt
  • Kein Modul namens Tensor Flow - iPython Notebook
  • Verkettung von 3D-Tensoren durch Klonen eines Tensors?
  • Ändern des Genauigkeitswertes und keine Änderung des Verlustwertes in der binären Klassifizierung mit Tensorflow
  • Wo sind die alten TensorFlow RNN Dateien gegangen?
  • (Tensorflow auf Windows) Einrichten von virtualenv und Pfad, der vom Quellbefehl gesetzt wurde
  • Wie bekomme ich ständige Ergebnisse mit TensorFlow, Einstellung zufälliger Samen
  • Wie man einen Tensor benutzt, um einen weiteren Tensor im Tensorfluss zu indizieren
  • Tensorflow mischt Bilder und Etiketten bei der Herstellung von Batch
  • Libcublas.so.8.0 Fehler mit Tensorflow
  • Tensorflow und OpenCV Echtzeit-Klassifizierung
  • Python ist die beste Programmiersprache der Welt.