数字图像处理:滤波
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.141592653
int _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的卷積核:(道理一樣,中心點他的權重高,向外擴展,無論是水平方向還是垂直方向向外擴展越遠他所占的權重比越來越低。)
參考博客:https://blog.csdn.net/farmwang/article/details/78699926
總結
- 上一篇: 数字图像处理:(5)非微分算子在数字图像
- 下一篇: 齐次坐标的理解(1)