Python学习笔记3——图像卷积及分割子图(1)

本文介绍了如何使用Python编写一个通用的矩阵卷积函数,接受不同大小的随机矩阵和卷积核,支持两种填充模式。通过实例展示了3*3、5*5和7*7卷积核对100*100和10*10矩阵的卷积过程,并可视化了结果。
摘要由CSDN通过智能技术生成
1. 编写通用的矩阵卷积的函数,输入100*100的随机矩阵和3*3, 5*5, 7*7的随机卷积核,完成卷积操作。
  函数参数:def General_Conv(imatx, imaty, kernel, padding):,
  其中imatx和imaty为输入随机矩阵大小,kernel为随机卷积核大小,padding为填充模式,0为不填充,1为全填充0。
import matplotlib.pyplot as plt
import numpy as np
import pylab

def General_Conv(imatx, imaty, kernel, padding):
    k_array = np.random.rand(kernel, kernel)    # 卷积核矩阵
    i_array = np.random.randint(0, 256,(imatx, imaty))  # 随机数矩阵
    gap = kernel//2     # 计数空缺的行数和列数
    new_array = np.zeros(shape=(imatx, imaty))  # 在原来的随机数矩阵外围补零
    if padding == 0:  # 不填充
        b_array = np.zeros(shape=(imatx - gap*2, imaty - gap*2))  # 定义一个矩阵存放卷积以后的值
        for i in range(gap, imatx - gap):
            for j in range(gap, imaty - gap):
                m_array = i_array[i - gap:i + gap + 1, j - gap:j + gap + 1]
                b_array[i-gap][j-gap] = int(np.sum(k_array * m_array))
        for x in range(imatx-2*gap):
            for y in range(imaty-2*gap):
                new_array[x+gap][y+gap] = b_array[x][y]  # 将原来的随机数矩阵填入
        return new_array
    if padding == 1:    # 填充0
        b_array = np.zeros(shape=(imatx + gap*2, imaty + gap*2))    # 在原来的随机数矩阵外围补零
        for i in range(imatx):
            for j in range(imaty):
                b_array[i+gap][j+gap] = i_array[i][j]   # 将原来的随机数矩阵填入
        for i in range(gap, imatx+1):
            for j in range(gap, imaty+1):   # gap下标实际上是第gap+1个元素的位置
                m_array = b_array[i-gap:i+gap+1, j-gap:j+gap+1]
                new_array[i-gap-1][j-gap-1] = int(np.sum(k_array * m_array))   # 为什么-1
        return new_array

img_new = np.uint8(General_Conv(400,300,3,1))
print(img_new)
plt.imshow(img_new)   # 卷积结果可视化
pylab.show()
print('*'*40)
img_new = np.uint8(General_Conv(10,10,3,0))
print(img_new)
plt.imshow(img_new)   # 卷积结果可视化
pylab.show()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值