2D 卷积操作

2D 卷积操作是图像处理和计算机视觉中的一项关键技术,广泛应用于图像滤波、特征提取等场景。本题目要求参与者实现一个2D卷积函数,用于计算输入矩阵与卷积核的卷积结果。

此题可参照第四章 矩阵与卷积算法中的卷积算法

题目要求

  • 实现 convolution2D 函数,计算输入矩阵与卷积核的卷积。
  • 函数定义:
    void convolution2D(int input[5][5], int kernel[3][3], int output[3][3], int inputSize, int kernelSize);
    

示例

  • 输入矩阵:
    1 2 3 4 5
    6 7 8 9 10
    11 12 13 14 15
    16 17 18 19 20
    21 22 23 24 25
    
  • 卷积核:
    1 0 -1
    0 -1 0
    -1 0 1
    
  • 调用 convolution2D(input, kernel, output, 5, 3) 后,输出矩阵应为:
    -6 -6 -6
    -6 -6 -6
    -6 -6 -6
    

输入

  • 输入矩阵和卷积核矩阵,以逗号分隔的数值表示,例如:
    输入矩阵:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
    卷积核矩阵:1,0,-1,1,0,-1,1,0,-1
    

输出

  • 打印卷积后的矩阵,例如:
    Result:
    -6 -6 -6
    -6 -6 -6
    -6 -6 -6
    

代码介绍

  1. convolution.c 文件包含 convolution2D 函数的实现,但当前代码仅完成了初始化输出矩阵和卷积核半径的计算,卷积运算尚未实现。

  2. main.c 文件包含主函数,用于解析命令行参数,调用 convolution2D 函数,并打印卷积结果。

详细提示信息

  • convolution2D 函数实现

    • 计算卷积核半径 kernelRadius
    • 初始化输出矩阵 output 为全零。
    • 通过嵌套循环遍历输入矩阵的每个元素,应用卷积核进行卷积运算。
  • main 函数解析

    • 检查命令行参数数量。
    • 使用 parseMatrix 函数解析输入矩阵和卷积核。
    • 调用 convolution2D 函数执行卷积运算。
    • 打印卷积结果。
  • parseMatrix 函数

    • 使用 strtok 函数解析字符串,将数值转换为整数并填充到矩阵中。

注意事项

  • 确保 convolution2D 函数正确实现卷积运算逻辑。
  • 注意卷积核中心与输入矩阵对应位置的对齐方式。
  • 考虑边界条件,确保卷积核不会超出输入矩阵边界。
  • 避免内存泄漏,合理分配和释放内存。
  • 参与者需要根据题目要求,完成 convolution2D 函数的实现,确保卷积运算的正确性。同时,注意代码的健壮性和内存管理。通过解析命令行参数和打印结果,展示卷积运算的实际效果