1 高斯模糊算法,高斯平滑,我自己的理解就是给卷积核确定卷积核过滤矩阵中每个位置数值的算法;如果我们对于一个原二维像素矩阵的像素数值,仅仅是通过周围元素的一个平均值作为过滤后的新像素矩阵的像素数值的话是不合理的,因为对于某一个位置的像素与和他靠得近的数值元素关系大,远的关系就小。有一个权值分配,我们使用正态分布的权值分配来作为他的权值分配,显然在矩阵对应的是二维的,那么我们需要的是二维正态分布,并且将要过滤的某一个点作为直角坐标系的原点(0,0),但是矩阵的下标不能够是负数,可以采用坐标轴平移的方法来实现:
2 卷积核坐标矩阵核二维坐标轴的对应关系:
二维标准正态分布图:
二维标准正态分布------->二维矩阵的坐标对应:
这里要注意的是一般平时的坐标做的是方格的顶点,这里的坐标对应的是方格,并且表示的形式略有不同如下,假设卷积核的直径是3,那么这个卷积核的矩阵就是3*3的方阵;
(1,-1) | (1,0) | (1,1) |
(0,-1) | (0,0) | (0,1) |
(-1,-1) | (-1,0) | (-1,-1) |
(0,0) | (0,1) | (0,2) |
(1,0) | (1,1) | (1,2) |
(2,0) | (2,1) | (2,2) |
左侧的图是卷积核矩阵的坐标情况 ,坐标内第一个数值表示行号,第二个表示列号;右侧的是二维正态分布的坐标情况,坐标内数值的意义是相同的;假设卷积核权值数组定义为;
double weightarr[Maxsize][Maxsize];
weightarr[0][0]=f(-1,1);
这里要注意,函数f(x,y)是二维标准正态分布概率密度的分布,这里的x,y就是坐标轴中的x,y;x对应的是列号,y对应的是行号,所以是f(-1,1)不是f(1,-1);
3 下面是两个函数的实现
二维标准正态函数的实现: