给定一个HxW
二进制图像(表示为numpy 2d数组(和D
(整数(,我想输出另一个HxW
2d数组,其中每个(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在评论中建议的类似,但它可以在没有额外内存的情况下就地实现。