用C语言从零开始写一个图像处理程序之三(卷积原理简介)

从信号采集到一维卷积:

卷积这个概念其实非常简单,先从一维卷积谈起,在信号采集的过程中会有噪音干扰,信号是会随着时间进行波动的

比如说一条曲线(拿画图板画的):

 要采集T点的数据的时候,要考虑旁边的权重,离中心点T越近,则权重越大,比如上图的三个点,T的权重为2,旁边的点离中心远一点,则权重低一些,那就设为1呗

那么最简单的一个一维卷积核就产生了

[1,2,1]

键入上述图片是一个巨大的集合,那么可以写一个集合:
[1,2,3,2,1,2]

卷积核运动到T(2)的时候,就会产生

      [1,2,1]

[1,2,3,2,1,2]

上下数字一乘,就会产生一个值8,那么8点就是新的这个地方的值

如果从头向后运动的话,就会产生一个新的数组

[8,10,8,6]

可以发现和第一张图片差不多,但是更短

该过程如下:

这个数组明显比原来的数组丢失怎么办,有两种办法处理

在边缘填上空白值

[0,1,2,3,2,1,2,0]

或者复制最边缘的值

[1,1,2,3,2,1,2,2]

采集一遍就会得到和原来数组长度一样的新的卷积结果了

数学公式:

卷积边缘是为了抵消噪声的,所以离当前时间点  越近的测量点权重应该越高,我们可以用下面的公式表示

从一维卷积扩展到二维卷积:

一张图就解释清楚了,得到一点附加周围噪声的权值的结果

下一篇文章将接着上一篇直接用一个常用的卷积核 Prewitt算子去完成一副图像的处理

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的图像卷积程序示例,使用C语言: ```c #include <stdio.h> #define WIDTH 5 #define HEIGHT 5 // 定义卷积核 int kernel[3][3] = { {1, 1, 1}, {1, 0, 1}, {1, 1, 1} }; void convolve(int input[][WIDTH], int output[][WIDTH]) { int i, j, m, n; int sum; for (i = 1; i < HEIGHT - 1; i++) { for (j = 1; j < WIDTH - 1; j++) { sum = 0; for (m = 0; m < 3; m++) { for (n = 0; n < 3; n++) { sum += input[i + m - 1][j + n - 1] * kernel[m][n]; } } output[i][j] = sum; } } } void print_image(int image[][WIDTH]) { int i, j; for (i = 0; i < HEIGHT; i++) { for (j = 0; j < WIDTH; j++) { printf("%d ", image[i][j]); } printf("\n"); } } int main() { int input_image[HEIGHT][WIDTH] = { {0, 0, 0, 0, 0}, {0, 255, 255, 255, 0}, {0, 255, 255, 255, 0}, {0, 255, 255, 255, 0}, {0, 0, 0, 0, 0}, }; int output_image[HEIGHT][WIDTH] = {0}; convolve(input_image, output_image); printf("Input image:\n"); print_image(input_image); printf("\nOutput image:\n"); print_image(output_image); return 0; } ``` 这个程序使用一个3x3的卷积核来对一个5x5的图像进行卷积操作。在`convolve`函数中,我们使用嵌套的循环遍历输入图像的每个像素,并对每个像素应用卷积核。卷积核中的每个元素都与输入图像中的一个像素相乘,然后将乘积相加得到输出图像中的像素值。 在这个程序中,我们使用了两个二维数组来表示输入图像和输出图像。`print_image`函数用于打印二维数组中的内容。 在`main`函数中,我们定义了一个简单的5x5图像,并将其输入到`convolve`函数中。最后,我们打印了输入图像和输出图像,以便查看卷积操作的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值