盒滤波作为一种快速窗口求和算法在图像处理中被广泛使用
行列处理都分为ABC三部分,如图所示
以下是python代码实现
#coding:u8
import numpy as np
import numpy.matlib
import cv2
np.set_printoptions(threshold='nan')
def boxfilter(I,r):
I=I.copy()
imdst=np.zeros(I.shape)
h,w=I.shape
#行处理
I=np.cumsum(I,0)
imdst[:r+1,:]=I[r:2*r+1,:]
imdst[r+1:h-r,:]=I[2*r+1:,:]-I[:h-2*r-1,:]
imdst[h-r:,:]=np.matlib.repmat(I[h-1,:],r,1)-I[h-2*r-1:h-r-1,:]
#列处理
I=np.cumsum(imdst,1)
imdst[:,:r+1]=I[:,r:2*r+1]
imdst[:,r+1:w-r]=I[:,2*r+1:]-I[:,:w-2*r-1]
imdst[:,w-r:]=np.matlib.repmat(I[:,w-1].reshape(-1,1),1,r)-I[:,w-2*r-1:w-r-1]
return imdst
map=np.ones((400,400))
out=boxfilter(map,40)
out=np.uint8(out*255/np.max(out))
cv2.imshow('out',out)
cv2.waitKey(0)