700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 数字图像处理:滤波

数字图像处理:滤波

时间:2023-03-06 05:52:38

相关推荐

数字图像处理:滤波

1、中值滤波

2、均值滤波

3、双边滤波

--------------

下边是基于卷积核滤波的操作:

在图像中滤波的一般操作就是:

有一个原图。有一个滤波核。(其实就是一个滑动窗口)就是结果图。

PS:滤波的效果怎么样,完全取决于你这个滤波核是怎样的,就是原图像在这个滑动小窗口里边是怎么操作的。

就是滤波核在原图像进行从左到右、从上到下的滑动操作。

4、高斯滤波

4.1、高斯分布:

正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution)。

二维正态分布:

式子中为和的相关系数。

4.2、高斯滤波核的计算

将上述,,得二维高斯曲面的公式如下:(式子中和表示像素的模板坐标,模板中心位置为原点。)

根据这个公式,我们可以计算得到不同σ的高斯模板。下面是假设,将x和y的坐标带进去计算。

如何确定高斯滤波核里边的值?(核里边的值是根据你的size和标准差来确定的)

下面是C语言程序实现:

#include "stdafx.h"#include <fstream>#include <math.h>#include <iomanip>using namespace std;#define N 4//(确定高斯核模板大小)#define PI 3.141592653int _tmain(int argc, _TCHAR* argv[]){char* path = "C:\\path1.txt";ofstream fout(path);double a[2 * N + 1][2 * N + 1]; // 高斯模板;(大小为9x9)double r = 1; // 高斯半径;double A = 1 / (2 * PI * r * r);if (fout){for (int i = -1 * N; i <= N; i++){for (int j = -1 * N; j <= N; j++){a[i + N][j + N] = A*exp((-1)*(i*i + j*j) / (2 * r*r));fout << setiosflags(ios::fixed) << setprecision(6) << a[i + N][j + N] << " ";}fout << endl;}}fout.close();return 0;}

当σ即半径为0.7时,最后得到的高斯滤波核结果如下图所示:(大小为9x9)

那么,我们还有个问题,如何确定模板的大小与标准差之间的关系。经过我们的不断验证,即改变上述的σ和模板大小的值,可以得知。当σ越大时,要求的模板也就是越大。即当σ为1时,我们可以得到如下的高斯模板:

上图的意思是,与水平面平行的x,y平面,也就是上面高斯模板中的坐标(x,y),z轴表示的灰度值,也就是上面高斯模板中的灰度值。

通过上图我们可以得知,7*7的模板已经不能满足我们,我们需要9*9的模板,这时如果用5*5的模板,则会取中间部分的5*5模板。模板和σ的选择取决于我们图像的大小。如果图像是几万的分辨率,则需要高斯模板和σ值都要很大,如果几十的分辨率,用很小的如3*3的模板或者5*5的模板就可以了,这时σ一般可以取0.5左右。

得到的绘出的高斯曲面:

还可以对高斯核进行归一化处理,就是把高斯核内的所有数据相加,取倒数再与每一个值相乘就是最终的权重(如上右图)。

4.3、高斯滤波的思想

(就是类似于高斯分布图一样,离得近多分一点,离得远少分一点)

给每一个像素点加一个系数,离自身中心点越近,系数越大。

可以看出将中间的灰度值进行平滑了。

下边是5x5的卷积核:(道理一样,中心点他的权重高,向外扩展,无论是水平方向还是垂直方向向外扩展越远他所占的权重比越来越低。)

参考博客:/farmwang/article/details/78699926

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。