4

鉴于Scikit学习是一种训练有素的分类器,例如,一个RandomForestClassifier。分类器已经通过例如大小的样本进行训练。 25×25。如何将ScikitLearn分类器应用于大图中的瓷砖/窗口

我该如何轻松地将它应用于大图像中的所有瓷砖/窗口(例如640x480)?

可能做的是(慢码进取!)

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) 

如何申请clf所有25×25窗户img

回答

4

也许您在寻找类似skimage.util.view_as_windows的东西。请确保在文档结尾处阅读关于内存使用情况的警告。

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) 

如果使用view_as_windows是你的一个负担得起的方式,你可以奇迹般地重塑返回数组这样生成的图像中的所有窗口的测试数据

相关问题