python - sklearn - scikit learn español
Cómo aplicar un clasificador ScikitLearn a los mosaicos/ventanas en una imagen grande (1)
Dado es un clasificador entrenado en scikit learn, por ejemplo, un RandomForestClassifier
. El clasificador ha sido entrenado en muestras de tamaño, por ejemplo, 25x25.
¿Cómo puedo aplicar esto fácilmente a todos los mosaicos / ventanas en una imagen grande (por ejemplo, 640x480)?
Lo que podría hacer es (código lento por delante!)
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 )
¿Cómo puedo aplicar clf
a todas las ventanas de 25x25 en img
?
Quizás esté buscando algo como skimage.util.view_as_windows
. Por favor, asegúrese de leer la advertencia sobre el uso de la memoria al final de la documentación.
Si el uso de view_as_windows
es un enfoque asequible para usted, puede generar mágicamente datos de prueba de todas las ventanas de la imagen modificando la matriz devuelta de esta manera:
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)