在以每个像素为中心的固定大小区域内求和(二进制)像素



给定一个HxW二进制图像(表示为numpy 2d数组(和D(整数(,我想输出另一个HxW2d数组,其中每个(i, j)索引存储二进制图像中1像素的数量,这些像素最多为(i, j)D行或列(基本上,L1意义上最多为D像素(。

当然,我可以通过将二进制图像与DxD全一平方进行卷积来实现这一点,但例如,使用scipy.signal.convolve2d似乎相当慢。此外,我的D可能相当大(例如,对于大小为2600x1900的图像为256(。还有其他建议吗?

DxD平方是一个可分离的滤波器核——将图像与DxD的平方进行卷积,与将每行与D1s的行进行卷积,然后将结果的每列与D1s列进行卷积相同。这将问题从O(H*W*D*D(减少到O(H*W*D(。

但是,具有D1s的行或列的1d卷积可以实现为(单级(级联积分器梳状滤波器。这将问题的复杂性从O(H*W*D(降低到O(H*W(。

在计算上,这与@Cris Luengo在评论中建议的类似,但它可以在没有额外内存的情况下就地实现。

最新更新