图像处理之C语言实现二维卷积

在用C语言实现图像处理中,经常要用到二维卷积的运算,这个在matlab中是非常容易实现的,只需要conv2()就OK啦,而且速度非常的快。但是在C语言中就需要四层的for循环来实现了。

首先二维卷积的原理是:

 

      1 2 3               2 2 2

A=  1 2 3         B= 1 1 1

      1 2 3               3 3 3

单我们使用AB卷积时,首先需要将B旋转180度。即

 3 3 3

 1 1 1    逐渐右移

 2 2 2

       1 2 3

       1 2 3

       1 2 3

可得(full):

     2     6    12    10     6

     3     9    18    15     9

     6    18    36    30    18

     4    12    24    20    12

     3     9    18    15     9

但是我们在图像处理中一般只选择与A维数相同的矩阵即:

     9    18    15

    18    36    30

    12    24    20

 

所以可以得以下程序(给出部分代码):

#define N1 512
#define M1 512
#define N2 3
#define M2 3
/*x相当于矩阵A,y相当于J矩阵B,z相当于矩阵full时的输出,z2相当于矩阵与A维数相同时的输出,这里的参数类型根据实际情况作出修改。如果矩阵很大,运算时间比较久*/
void conv2(unsigned char x[N1][M1],int y[N2][M2],float z[N1+N2-1][M1+M2-1],float z2[N1][M1])
{
    int i,j;
    int n,m;
    for(i=0; i=0&&(i-m)=0&&(j-n)


你可能感兴趣的:(图像处理)