我正在使用 scikit-image 的 graycomatrix (GLCM) 从图像中提取特征。这种方法非常快,但是当使用 GLCM 创建图像的特征图时,需要在图像上滑动一个窗口并为每个窗口调用一次 graycomatrix。对于 65536 次调用的 256x256 图像。使用简单的 Python 循环,这会变得非常慢。我一直在寻找高低,但我找不到这种窗口滑动方法的现有实现,所以我到目前为止自己做了。scikit-image 中不存在这似乎很奇怪,因为这是使用 GLCM 的主要方式。
在 scikit-image GLCM 教程(http://scikit-image.org/docs/dev/auto_examples/plot_glcm.html)中,他们只分析了几个单独的窗口,而对滑动窗口只字未提。这不是很有帮助。
import numpy as np
from skimage.feature import greycomatrix
from skimage.data import coins
def glide(image, w, d, theta, levels=16):
image = np.pad(image, int(w/2), mode='reflect') # Add padding.
M, N = image.shape
feature_map = np.zeros((M, N)) # Placeholder for some feature.
for m in xrange(0, M):
for n in xrange(0, N):
window = image[m:m+w, n:n+w]
glcm = greycomatrix(window, d, theta, levels)
# Do something with glcm: Find variance, entropy, etc.
feature_map[m,n] = 1. # Compute something here.
feature_map = glide(coins(), w=21, d=[5], theta=[0], levels=256)
这是我自定义的滑动窗口方法。scikit-image 或类似文件中是否已经存在更有效的版本?