2016-08-09 71 views
-4

ich eine numpy Matrix mit allen Elementen zu Nullen initialisiert erstellt haben, wie gezeigt:Wie selektiv Patches aus einem Bild erstellen auf der Grundlage der identifizierten Objekte

[[[0 0 0 0] 
    [0 0 0 0] 
    [0 0 0 0] 
... 

Dies ist ein Bild des Screenshot einer Webseite ähneln welches ist von der Größe 1200 X 1000.

Ich habe ein paar rechteckige Region von Interesse für verschiedene HTML-Objekte wie Radiobutton, Textbox und Dropdown innerhalb des Screenshot-Bildes identifiziert und ihnen feste Werte wie 1,2 und 3 für die zugewiesen jeweilige Objektbereiche in der erzeugten numpigen Matrix.

So ist die resultierende Matrix sieht fast aus wie:

[[[0 0 0 0] 
    [0 0 0 0] 
    [0 0 0 0] 
    ..., 
[[1 1 1 1] 
    [1 1 1 1] 
    [1 1 1 1] 
    ..., 
    [0 0 0 0] 
    [2 2 2 2] 
    [0 0 0 0] 
    ..., 

Ich möchte jetzt Daten für Faltungs neuronales Netzwerk mit den Patches aus dem Screenshot Bild gesetzt vorzubereiten. Um die Qualität der dem CNN zugeführten Daten zu verbessern, möchte ich die Patches filtern und nur die Patches für das CNN bereitstellen, die die zuvor gefundenen Objekte (Textbox, Radiobutton usw.) enthalten (Radiobutton und Dropdown-Auswahl) sei dort voll und Knopf mindestens 50% der Region sollte in dem Patch enthalten sein). Irgendwelche Ideen, wie es in Python realisiert werden kann?

+0

'scipy.misc.imshow()' – Julien

+0

Vielen Dank für die Antwort. Ich bekomme ein 'RuntimeError: Bildbetrachter konnte nicht ausgeführt werden.' wenn Sie versuchen, diese Funktion zu verwenden. Nicht sicher warum. – shripati007

+0

Wie soll ein 4d-Array ein Bild sein? Ein Bild ist 2d, eventuell 3d für Farbbilder, die 3. Dimension codiert RGB. Im Grunde müssen Sie erklären, wie Ihr 4d-Array erstellt wird und wie es Ihre Bilder enthält. Im Moment ist deine Frage zu unklar. – Julien

Antwort

0

einen sehr naiver Ansatz

maxY, maxX = np.shape(theMatrix) 

for curY in range(0,maxY): 
    for curX in range(0,maxX): 
     print theMatrix[curY,curX], 
    print " " 
0

können Sie nur die Plot-Funktion verwenden, um einen 2D-Array plotten. Nehmen Sie zum Beispiel:

import numpy as np 
import matplotlib.pyplot as pyplot 
x = np.random.rand(3, 2) 

die Ausbeute wird uns

array([[ 0.53255518, 0.04687357], 
     [ 0.4600085 , 0.73059902], 
     [ 0.7153942 , 0.68812506]]) 

Wenn Sie die pyplot.plot(x, 'ro') verwenden, wird es zeichnen Sie die Abbildung unten.

2d array plot

Die Zeilennummern sind in der X-Achse gesetzt, und die Werte sind in der y-Achse aufgetragen. Aber von der Art Ihres Problems vermute ich, dass Sie die Spaltennummern in X-Achse und die Werte in Y-Achse eingeben müssen. Um dies zu tun, können Sie einfach Ihre Matrix transponieren.

was nun (für das gleiche Array) die unten angegebene Zahl ergibt.

2d array transpose plot

+0

In meinem Fall habe ich eine 4-dimensionale Matrix. Wird es in diesem Fall funktionieren? – shripati007

+1

Kein pyplot.plot kann kein 4D Array plotten. Es muss 1D oder 2D sein. Vielleicht sollten Sie Ihre Frage ein wenig auf den neuesten Stand bringen, denn ein 1200x1000 großes Array wird die Leute verstehen lassen, dass Ihr Array 1200 Zeilen und 1000 Spalten hat und es sich um ein 2D-Array handelt. Bitte geben Sie einige zusätzliche Informationen, wie eine kleinere Version Ihres Arrays und die gewünschte Ausgabe – Prasanna

+0

Entschuldigung. Die Frage wurde aktualisiert. – shripati007