如何将 ScikitLearn 分类器应用于大图像中的 tiles/windows
How to apply a ScikitLearn classifier to tiles/windows in a large image
Given 是 scikit learn 中经过训练的分类器,例如一个RandomForestClassifier
。分类器已经接受过大小样本的训练,例如25x25.
我如何轻松地将此应用于大图像(例如 640x480)中的所有 tiles/windows?
我可以做的是(前面的代码慢!)
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
应用于 img
中的所有 25x25 windows?
也许您正在寻找类似 skimage.util.view_as_windows
的内容。请务必阅读文档末尾关于内存使用的警告。
如果使用 view_as_windows
对您来说是一种负担得起的方法,您可以通过像这样重塑返回的数组,从图像中的所有 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)
Given 是 scikit learn 中经过训练的分类器,例如一个RandomForestClassifier
。分类器已经接受过大小样本的训练,例如25x25.
我如何轻松地将此应用于大图像(例如 640x480)中的所有 tiles/windows?
我可以做的是(前面的代码慢!)
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
应用于 img
中的所有 25x25 windows?
也许您正在寻找类似 skimage.util.view_as_windows
的内容。请务必阅读文档末尾关于内存使用的警告。
如果使用 view_as_windows
对您来说是一种负担得起的方法,您可以通过像这样重塑返回的数组,从图像中的所有 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)