当我开始使用 python 来实现一个滑动窗口来检测静止图像中的对象时,我开始了解 nice 函数:
numpy.lib.stride_tricks.as_strided
所以我试图实现一个通用规则,以避免在更改我需要的滑动窗口的大小时可能会失败的错误。最后我得到了这个表示:
all_windows = as_strided(x,((x.shape[0] - xsize)/xstep ,(x.shape[1] - ysize)/ystep ,xsize,ysize), (x.strides[0]*xstep,x.strides[1]*ystep,x.strides[0],x.strides[1])
这导致一个 4 暗矩阵。前两个表示图像 x 和 y 轴上的窗口数。和其他代表窗口的大小(xsize,ysize)
和
step
表示两个连续窗口之间的位移。如果我选择方形滑动窗口,这种表示效果很好。但是我仍然有一个问题要让它在 e.x. 的 windows 上工作。 (128,64),在这里我通常会得到与图像无关的数据。
我的代码有什么问题。有任何想法吗?如果有更好的方法可以在python中获得漂亮整洁的滑动窗口进行图像处理?
谢谢
最佳答案
您的代码中存在问题。实际上,此代码适用于 2D,没有理由使用多维版本 ( Using strides for an efficient moving average filter )。下面是固定版本:
A = np.arange(100).reshape((10, 10))
print A
all_windows = as_strided(A, ((A.shape[0] - xsize + 1) / xstep, (A.shape[1] - ysize + 1) / ystep, xsize, ysize),
(A.strides[0] * xstep, A.strides[1] * ystep, A.strides[0], A.strides[1]))
print all_windows
关于image-processing - 在numpy中使用as_strided函数滑动窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7542135/