1

我目前正在尝试将图像划分为较小的窗口,这些窗口稍后用于互相关。下面的函数可以很好地达到这个目的(window_size 是窗口大小的长度(以像素为单位)(假设为正方形),重叠是窗口重叠的像素数(因此对于 32x32 窗口,16 个重叠意味着一半重叠)。

它适用于该目的。但是,现在我想比较两个不同大小的窗口(例如一个是 24x24,另一个是 12x12。“挑战”是它们必须居中并且大小窗口的数量必须相同。我可以目前通过裁剪窗口以将较小的窗口与较大的窗口居中来实现这一点(例如,如果我有一个 256x256 的图像,我从每个方向将它裁剪 6px,得到一个 244x244 的图像)。

然而,即使裁剪非常快(我有数千张图像),但如果我想尝试其他大小的窗口,它会变得乏味(如果我希望较小的窗口重叠,有时是不可能的)更改参数。

所以基本上,我的问题是,有没有办法让两个不同大小的窗口居中而不裁剪图像?一些注意事项:

1)如果尺寸增加的是黑色(或0灰度值)图像,则较大的窗口可能会“超出范围”。2)大小窗口的数量必须相同。

def moving_window_array(array, window_size, overlap):
"""
Create from the array a new array
with three dimension, of size (n_windows, window_size, window_size), in which
each slice, (along the first axis) is an interrogation window.
"""

    sz = array.itemsize
    shape = array.shape

    strides = (sz*shape[1]*(window_size-overlap), sz*(window_size-overlap),
               sz*shape[1], sz)
    shape = (int((shape[0] - window_size)/(window_size-overlap))+1,
             int((shape[1] - window_size)/(window_size-overlap))+1 ,
             window_size, window_size)

    return numpy.lib.stride_tricks.as_strided(array, strides=strides,
                                              shape=shape ).reshape(-1, window_size,
                                                                    window_size)
4

0 回答 0