卷积操作-手动计算(处理图片)

import tensorflow as tf  
import numpy as np  
import matplotlib.pyplot as plt  
  
class Conv2D(tf.keras.layers.Layer):  
    def __init__(self, kernel_size, step_len, kernel):  
        super().__init__()  
        self.kernel_size = kernel_size  # 卷积核大小  
        self.step_len = step_len        # 步长,但此处并未在卷积中实际使用  
        self.kernel = np.array(kernel)  # 确保kernel是numpy数组  
  
    def call(self, inputs):  
        new_image = []  
        for i in range(0, inputs.shape[0] - self.kernel_size[0] + 1, self.step_len):  # 修正步长逻辑  
            print(i, inputs.shape[0])  
            Line_data = []  
            for j in range(0, inputs.shape[1] - self.kernel_size[1] + 1, self.step_len):  # 同样修正步长逻辑  
                # 使用numpy的dot函数或np.sum(inputs[...]*self.kernel)代替np.mean  
                # 因为卷积通常使用加权和而不是平均值  
                conv_result = np.sum(inputs[i:i+self.kernel_size[0], j:j+self.kernel_size[1]] * self.kernel)  
                Line_data.append(conv_result)  
            # 这里需要将Line_data转换为二维数组以匹配原始图像的维度(考虑步长)  
            new_image.append(Line_data)  
 
        new_image = np.array(new_image)  
 
        return new_image  
  
# 实例化自定义卷积层  
Conv2DLayer = Conv2D([3, 3], 1, kernel=[[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])  
  
image = "dog.jpg"  
image_data = plt.imread(image)  
print(image_data.shape)  # 这将显示图像的尺寸和颜色通道数  
  
# 如果image_data是RGB,我们只取第一个通道(红色)作为灰度图像  
input_data = image_data[:, :, 0]  
  
  
plt.imshow(Conv2DLayer(input_data), cmap='gray')  # 使用灰度图色彩映射  
plt.show()

原图

卷积后

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香克斯的格里芬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值