积分图像和卷积实现

积分图?

即是当前位置的像素值是为左上角到当前位置的像素总和,用途有计算haar特征、滤波等

程序代码:

def integral(img):
    rows,cols=img.shape[0],img.shape[1]
    integral_img=np.zeros((rows,cols)).astype("uint32")
    for i in range(rows):
        for j in range(cols):
            sum1=0
            for k in range(i+1):
                for p in range(j+1):
                    sum1+=img[k,p]
            integral_img[i,j]=sum1

这样的写法很不符合python,for循环能避免尽量避免

numpy 用一句可以 实现:

intergal_image=np.cumsum(np.cumsum(img,0),1) 

卷积?

图像卷积即是滤波,有三种方式:valid、same 、full

卷积后的图大小=1+(图像大小-卷积核大小+2*p)/s 

代码如下:

def conv(image,filter_mask,padding):
    h,w=image.shape[:]
    if padding==False:
        result=[]
        for i in range(0,h-len(filter_mask)+1):
            r=[]
            for j in range(0,w-len(filter_mask)+1):
                r.append(image[i,j]*filter_mask[0,0]+image[i,j+1]*filter_mask[0,1]
                +image[i,j+2]*filter_mask[0,2]+image[i+1,j]*filter_mask[1,0]+ 
                image[i+1,j+1]*filter_mask[1,1]+image[i+1,j+2]*filter_mask[1,2]
                +image[i+2,j]*filter_mask[2,0]+image[i+2,j+1]*filter_mask[2,1]
                +image[i+2,j+2]*filter_mask[2,2])
            result.append(r)
    if padding==True:
        image_new=np.zeros((h+2,w+2))
        image_new[0:h,0:w]=image
        result=[]
        for i in range(0,h+2-len(filter_mask)+1):
            r=[]
            for j in range(0,w+2-len(filter_mask)+1):
                r.append(image_new[i,j]*filter_mask[0,0]+image_new[i,j+1]*filter_mask[0,1]
                    +image_new[i,j+2]*filter_mask[0,2]+image_new[i+1,j]*filter_mask[1,0]+ 
                    image_new[i+1,j+1]*filter_mask[1,1]+image_new[i+1,j+2]*filter_mask[1,2]
                +image_new[i+2,j]*filter_mask[2,0]+image_new[i+2,j+1]*filter_mask[2,1]
                +image_new[i+2,j+2]*filter_mask[2,2])
            result.append(r)   
    return np.array(result)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值