4

Gegeben ist ein trainierter Klassifikator in scikit lernen, z. a RandomForestClassifier. Der Klassifikator wurde an Proben mit einer Grße von z.B. 25x25.Wie man einen ScikitLearn-Klassifizierer auf Fliesen/Fenster in einem großen Bild anwendet

Wie kann ich dies einfach auf alle Kacheln/Fenster in einem großen Bild (z. B. 640x480) anwenden?

Was ich konnte tun ist (langsam Code voraus!)

x_train = np.arange(25*25*1000).reshape(25,25,1000) # just some pseudo training data 
y_train = np.arange(1000) # just some pseudo training labels 
clf = RandomForestClassifier() 
clf.train(...) #train the classifier 

img = np.arange(640*480).reshape(640,480) #just some pseudo image data 

clf.magicallyApplyToAllSubwindoes(img) 

Wie kann ich mich bewerben clf für alle 25x25 Fenster in img?

Antwort

4

Vielleicht suchen Sie etwas wie skimage.util.view_as_windows. Bitte lesen Sie den Vorbehalt zur Speicherbelegung am Ende der Dokumentation.

Wenn view_as_windows mit für Sie einen kostengünstigen Ansatz ist, könnten Sie auf magische Weise Testdaten aus allen Fenstern in dem Bild erzeugen, indem das zurückgegebene Array wie folgt Umformung:

import numpy as np 
from skimage import io 
from skimage.util import view_as_windows 

img = io.imread('image_name.png')  
window_shape = (25, 25) 

windows = view_as_windows(img, window_shape)  
n_windows = np.prod(windows.shape[:2]) 
n_pixels = np.prod(windows.shape[2:]) 

x_test = windows.reshape(n_windows, n_pixels) 

clf.apply(x_test) 
Verwandte Themen