2016-07-20 27 views
0

Ich habe ein 200x200 rgb Bild geladen und haben es durch ein neuronales Netz übergeben, indem sie in einem 1x(200x200x3) Vektor Umformen mitLua/Taschenlampe Tisch umformen

img1=torch.reshape(img,1,image_size*image_size*3) 

Die Ausgabe erhalte ich auch ein 1x(200x200x3) Vektor. Wie kann ich es in ein RGB-Bild der Größe 200x200 umformen, damit ich es drucken kann?

Antwort

0

Sie können versuchen, die Funktion permute(x, y, z) zu verwenden, um das Bild an die Form 3x200x200 zu ändern, dann sollten Sie in der Lage sein, es zu drucken mit itorch.image(your_image) .Die Buchstaben x, y, z der Index der Spalten in der Tensor sind. Hier haben Sie ein Beispiel.

x = torch.Tensor(3,4,2,5) 
> x:size() 
3 
4 
2 
5 
[torch.LongStorage of size 4] 

y = x:permute(2,3,1,4) -- equivalent to y = x:transpose(1,3):transpose(1,2) 
> y:size() 
4 
2 
3 
5 
[torch.LongStorage of size 4] 

Nach diesem Schritt tun Sie das gleiche wie Sie getan haben. Nehmen wir an, unsere img_size ist 5.

th> t = torch.Tensor(5,5,3) 


[0.0001s] 
th> t = t:permute(3,1,2) 
                      [0.0001s] 
th> t:size() 
3 
5 
5 
[torch.LongStorage of size 3] 
                     [0.0001s] 
th> t[{2}]:fill(2) 
2 2 2 2 2 
2 2 2 2 2 
2 2 2 2 2 
2 2 2 2 2 
2 2 2 2 2 
[torch.DoubleTensor of size 5x5] 

                     [0.0003s] 
th> t[{3}]:fill(3) 
3 3 3 3 3 
3 3 3 3 3 
3 3 3 3 3 
3 3 3 3 3 
3 3 3 3 3 
[torch.DoubleTensor of size 5x5] 

                     [0.0004s] 
th> w = t:reshape(1,t:size(2)*t:size(3)*3) 
                     [0.0001s] 
th> w 
Columns 1 to 26 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 

Columns 27 to 52 
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 

Columns 53 to 75 
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
[torch.DoubleTensor of size 1x75] 

th> x = w:reshape(3,5,5) 
                     [0.0001s] 
th> x 
(1,.,.) = 
    0 0 0 0 0 
    0 0 0 0 0 
    0 0 0 0 0 
    0 0 0 0 0 
    0 0 0 0 0 

(2,.,.) = 
    2 2 2 2 2 
    2 2 2 2 2 
    2 2 2 2 2 
    2 2 2 2 2 
    2 2 2 2 2 

(3,.,.) = 
    3 3 3 3 3 
    3 3 3 3 3 
    3 3 3 3 3 
    3 3 3 3 3 
    3 3 3 3 3 
[torch.DoubleTensor of size 3x5x5] 
+0

Der Spaltenvektor hat 3x200x200 = 120.000 Einträge. Die ersten 3 Werte sind die rgb-Werte für das erste Pixel, die zweiten 3 Werte sind die rgb-Werte für das zweite Pixel und so weiter. Ich brauche das nicht in eine 200x200 Matrix von 3 Tupeln umzuformen. Wie kann ich das machen? – Sibi

+0

@Sibi In diesem Fall kann die Ausgabe auf diese Weise in das Bild geändert werden: von Spalte 1 bis Spalte 200 * 200 ist der erste Bildkanal, von Spalte 200 * 200 +1 bis Spalte 2 * 200 * 200 ist der zweiten Kanal, und von 2 * 200 * 200 + 1 bis zum Ende (3 * 200 * 200) ist der dritte Kanal. Ich werde die Antwort bearbeiten, damit sie leichter zu sehen ist. –