convolution by numpy

手动实现一个卷积

其实就是数字图像处理的作业= =其实有时间的话想搞一下im2col,不过也没啥用,应该直接用框架就好了

计算公式

输入图片大小 W×W Filter大小 F×F 步长 S padding的像素数 P
N = (W − F + 2P )/S+1
padding = ‘SAME’ => W = N
S(W-1) = W-F+2P P = ((S-1)W-S+F)/2

代码习惯用jupyter写了。。。罪恶的循环啊。。。

from scipy.misc import imread,imshow,imsave
import numpy as np

img = np.floor(imread("/home/ryan/Desktop/cat.jpg"))

# 平滑和laplace

kernel = np.ones([3,3])/9
kernel = np.array([
        [0,-1,0],
        [-1,4,-1],
        [0,-1,0]
    ])

# 上图计算各种参数

shape = img.shape
stride = 1
S = stride
F = 3
W = shape[0]
H = shape[1]
Pw = round(((S-1)*W-S+F)/2)
Ph = round(((S-1)*H-S+F)/2)

# padding

padding_img = np.zeros([W+2*Pw,H+2*Ph,shape[2]])
for c in range(shape[2]):
    padding_img[Pw:W+Pw,Ph:H+Ph,c] = img[:,:,c]

output = np.zeros_like(a=padding_img)

#convolution

for c in range(shape[2]):
    for i in range(Pw, shape[0]+Pw,stride):
        for j in range(Ph,shape[1]+Ph,stride):
            output[i-Pw,j-Ph,c] = np.sum(padding_img[i-Pw:i+Pw+1,j-Ph:j+Ph+1,c]*kernel)

imshow(output)

原来的小猫

这里写图片描述
小猫现在长这样

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值