圖像加強是數字圖像處理相對簡單卻最具藝術性的領域之一,加強的目的是消除噪聲,
顯現那些被模糊了的細節或簡單突出一幅圖像中咱們感興趣的特徵。一個簡單例子是加強圖
像的對比度, 使其看起來更加一目瞭然。加強是圖像處理中很是主觀的領域, 它以怎樣構成
好的加強效果這種人爲主觀偏好爲基礎, 也正是這一點爲其賦予了藝術性。這與圖像復原技
術恰好相反, 圖像復原也是改進圖像外貌的一個處理領域, 但它是客觀的。 算法
本文主要包括如下內容 數組
爲何要進行圖像加強
圖像加強是指根據特定的須要突出一幅圖像中的某些信息, 同時削弱或去除某些不須要
的信息的處理方法。其主要目的是使處理後的圖像對某種特定的應用來講, 比原始圖像更適
用。所以, 這類處理是爲了某種應用目的而去改善圖像質量的。處理的結果使圖像更適合人
的觀察或機器的識別系統。
應該明確地是加強處理並不能加強原始圖像的信息, 其結果只能加強對某種信息的辨別
能力, 而同時這種處理有可能損失一些其餘信息。正因如此, 咱們很難找到一個評價圖像增
強效果優劣的客觀標準, 也就沒有特別通用模式化的圖像加強方法, 這須要咱們根據具體期
望的處理效果作出取捨。 bash
圖像加強的分類
圖像加強技術基本上可分紅兩大類: 一類是空間域加強, 另外一類是頻率域加強。本章着
重介紹空問域加強技術, 下一意講述頻率域圖像加強。markdown
空間域圖像加強技術主要包括直方圖修正、灰度變換加強、圖像平滑化以及圖像銳化等。
在加強過程當中能夠採用單一方法處理, 但更多實際狀況是須要採用幾種方法聯合處理, 才能
達到預期的加強效果(某個單一的圖像處理方法能夠解決所有問題〉。網絡
在第3 章中經過灰度變換改善圖像外觀的方法, 以及3.7 節和3.8 節中的直方圖灰度修
正技術〈即直方圖均衡化和直方圖規定化〉都是圖像加強的有效手段, 它們的共同點在於變
換是直接針對像素灰度值的, 與該像素所處的鄰域無關, 而空間域加強則是基於圖像中每一
個小範圍(鄰域〉內的像素進行灰度變換運算, 某個點變換以後的灰度由該點鄰域以內的那
些點的灰度值共同決定, 所以空間域加強也稱爲鄰域運算或鄰域濾波。空間域變換可以使用
下式描述:
g(x,y)=T[f(x,y)] 函數
濾波是信號處理中的一個概念, 是將信號中特定波段頻率濾除的操做, 在數字信號處理
中一般採用傅立葉變換及其逆變換實現。因爲下面要學習的內容實際上和經過傅立葉變換實
現的頻域下的濾波是等效的, 故而也稱爲濾波。空間域濾波主要直接基於鄰域〈空間域〉對
圖像中像素執行計算,咱們使用空間域濾波這一術語以區別第6 章中將要討論的頻率域濾波。學習
空間域濾波和鄰域處理
對圖像中的每一點(x, y), 重複下面的操做:
(1) 對預先定義的以(x, y) 爲中心的鄰域內的像素進行運算。
(2)將(2)中運算的結果做爲(x, y)點的新響應。
上述過程就稱爲鄰域處理或空間域濾波。一幅數字圖像能夠當作一個二維函數爲f(x,y),
而x-y平面代表了空間位置信息, 稱爲空間域, 基於x-y 空間鄰域的濾波操做稱做空間域濾
波. 若是鄰域中的像素計算爲線性運算, 則又稱爲線性空間域濾波, 不然稱爲非線性空間域
濾液。 spa
邊界處理
執行濾波操做需注意當模板位於圖像邊緣時,須要對邊緣附近的那些元素執行濾波操做單獨處理,以免引用到本不屬於圖像的無心義的值(在Matlab中這將引發系統的警告,而在vc中極可能會因爲非法訪問內存而產生運行錯誤〉。 設計
如下3種策略均可以用來解決邊界問題:
(1)收縮處理範圍一處理時忽略位於圖像f 邊界附近會引發問題的那些點, 如對於
圖5.1中所使用的模板, 處理時忽略圖像f 四周一圈1個像素寬的邊界, 即只處理從x =
1,2 ,3, … .M-2和y = 1,2,3, .. .N-2 (在Matlab中應爲x = 2,3,4, … ,M-1和y = 2,3,4, … N-1)範圍內
的點, 從而確保了濾被過程當中模板始終不會超出圖像f 的邊界。
(2)使用常數填充圖像一根據模板形狀爲圖像f 虛擬出邊界. 虛擬邊界像素值爲指定
的常數, 如0, 獲得虛擬圖像f ’。保證模板在移動過程當中始終不會超出f ’的邊界。
(3)使用複製像素的方法填充圖像,和(2)基本相同, 只是用來填充虛擬邊界像素
值的不是固定的常數, 而是複製圖像f自己邊界的模式.
這些技巧在本章後面的小節程序設計實例中將給出具體實現。 3d
相關和卷積
圖像處理之卷積概念
咱們來看一下一維卷積的概念.
連續空間的卷積定義是 f(x)與g(x)的卷積是 f(t-x)g(x) 在t從負無窮到正無窮的積分值.t-x要在f(x)定義域內,因此看上去很大的積分實際上仍是在必定範圍的.
實際的過程就是f(x) 先作一個Y軸的反轉,而後再沿X軸平移t就是f(t-x),而後再把g(x)拿來,二者乘積的值再積分.想象一下若是g(x)或者f(x)是個單位的階越函數. 那麼就是f(t-x)與g(x)相交部分的面積.這就是卷積了.
把積分符號換成求和就是離散空間的卷積定義了.
對於圖像而言,離散卷積的計算過程是模板翻轉,而後在原圖像上滑動模板,把對應位置上的元素相乘後加起來,獲得最終的結果。若是不考慮翻轉,這個滑動-相乘-疊加的過程就是相關操做。事實上我也一直用相關來理解卷積。在時域內能夠從兩個角度來理解這樣作的含義。
一種是濾波,好比最簡單的高斯模板,就是把模板內像素乘以不一樣的權值而後加起來做爲模板的中心像素值,若是模板取值全爲1,就是滑動平均;若是模板取值爲高斯,就是加權滑動平均,權重是中間高,四周低,在頻率上理解就是低通濾波器;若是模板取值爲一些邊緣檢測的模板,結果就是模板左邊的像素減右邊的像素,或者右邊的減左邊的,獲得的就是圖像梯度,方向不一樣表明不一樣方向的邊緣;
另外一種理解是投影,由於當前模板內部圖像和模板的相乘累加操做就是圖像局部patch和模板的內積操做,若是把patch和模板拉直,拉直的向量當作是向量空間中的向量,那麼這個過程就是patch向模板方向上的投影,一幅圖像和一個模板卷積,獲得的結果就是圖像各個patch在這個方向上的response map或者feature map;若是這樣的模板有一組,咱們能夠把這一組當作一組基,獲得的一組feature map就是原圖像在這組基上的投影。常見的如用一組Garbor濾波器提取圖像的特徵,以及卷積神經網絡中的第一層,圖像在各個卷積核上的投影。
咱們之因此決定使用卷積後的特徵是由於圖像具備一種「靜態性」的屬性。也就是說使用卷積就是爲了提取顯著特徵,減小特徵維數,減小計算量。
在對圖像進行卷積操做後的主觀印象:圖像變得模糊了,但是咱們依然可以分辨出是什麼!因此卷積就是提取顯著特徵!(我的理解,簡單明瞭)
濾波操做的Matlab實現
Matlab中與濾披相關的函數主要有imfilter和fspecial. imfilter完成濾波操做,而fspecial
能夠爲咱們建立一些預約義的2維濾波器, 直接供imfilter函數使用.
濾波函數imfilter
函數原型以下:
g =imfilter(f,w,optional1,optional2);
參數說明
• f是要進行濾波操做的圖像.
• w是濾波操做所使用的模板,爲一個二維數組.
• option 1, option2, … 是可選項, 具體能夠包括:
(1)邊界選項: 主要針對5.2.2 小節中提到的邊界處理問題, 如表5.1所示。
採用第一種方式用固定值填充虛擬邊界會使邊緣附近會產生梯度, 採用後面三種方式填
充可以讓邊緣顯得平滑。
f = imread('cameraman.tif');
w = [1,1,1;1,1,1;1,1,10]/9;
g = imfilter(f,w,'corr','replicate');
figure;
subplot(1,2,1);
imshow(f),title('原圖像');
subplot(1,2,2);
imshow(g),title('濾波操做');
fspecial建立預約義的二維濾波器
其調用格式以下
h = fspecial(type,paramaters)
參數說明:
參數type用於指定濾波器的類型,其中一些類型的濾波器將在5.3節和5.4節中介紹,有些則將放到第9章的圖像分割中介紹,做爲邊緣檢測的算子.type的一些合法值 如表5.4所示.
圖像平滑是一種能夠減小和抑制圖像噪聲的實用數字圖像處理技術。在空間域中通常能夠採用鄰域平均來達到平滑的目的。
從圖5.2濾波先後的效果對比能夠看出濾波後的圖g有平滑或者說模糊的效果, 這徹底
是模板w做用的結果。例5.1中的w提供了一種平均的加權模式, 首先在以點(x, y ) 爲中
心,3×3鄰域內的點都參與了決定新圖像g中(x,y)點像素值的運算:並且全部係數都爲1
表示它們在參與決定g (x, y) 值的過程當中貢獻(權重)相同:而前面的係數則保證了整個
模板元素和爲1, 這裏應爲1/9, 這樣就能讓新圖像和原始圖像同樣, 保持在一個灰度範圍中
〈如(0, 255]). 這樣的w叫作平均模板, 是用於使圖像平滑的模板中的一種, 至關於一種局
部平均。更通常的平均模板爲:
工做原理
通常來講,圖像具備局部連續性質,即相鄰像素的數值相近,而噪聲的存在使得在噪聲
點處產生灰度跳躍,但通常咱們能夠合理地假設偶爾出現的噪聲影響並無改變圖像局部連
續的性質,例以下面的局部圖像f_sub,灰色底紋標識的爲噪聲點,在圖像中表現爲亮區中的
2個暗點:
顯然,經過平滑濾波原局部圖像f_sub中噪聲點的灰度值獲得了有效修正,像這樣將每
一個點用周圍點的平均替代從而達到減小噪聲影響的過程就稱爲平滑或模糊.
Matlab實現
I = imread('baby_noise.bmp');
h = fspecial('average',3);
I3 = imfilter(I,h,'corr','replicate');
h = fspecial('average',5);
I5 = imfilter(I,h,'corr','replicate');
h = fspecial('average',7);
I7 = imfilter(I,h,'corr','replicate');
figure;
subplot(2,2,1);
imshow(I),title('原圖');
subplot(2,2,2);
imshow(I3),title('3*3');
subplot(2,2,3);
imshow(I5),title('5*5');
subplot(2,2,4);
imshow(I7),title('7*7');
上述程序的運行效果如圖 5.3 所示, 能夠看出隨着模板的增大, 濾波過程在平滑更多噪聲的同時也使得圖像變得愈來愈模糊,這是由平均模板的工做機理決定的。當模板增大到7×7時, 圖像中的某些細節,如衣服上的褶皺已經難以辨識了, 鈕釦也變得至關模糊。 實際 上, 當圖像細節與濾波器模板大小相近時, 圖像細節就會受到比較大的影響, 尤爲當它們的灰度值比較接近時, 混合效應致使的圖像模糊會更明顯。 隨着模板地進一步增大, 像鈕釦這樣的細節都會被看成噪聲平滑掉. 所以, 咱們在肯定模板尺寸時應仔細考慮要濾除的噪聲點的大小, 有針對性地進行濾波.
平均平滑對鄰域內的像素一視同仁, 爲了減小平滑處理中的模糊, 獲得更天然的平滑效
果, 則會很天然地想到適當加大模板中心點的權重, 隨着遠離中心點, 權重迅速減少, 從而
能夠確保中心點看起來更接近與它距離更近的點, 基於這種考慮獲得的模板即爲高斯模板。
經常使用的3×3的高斯模板以下所示:
matlab實現
I = imread('baby_noise.bmp');
h3_5 = fspecial('gaussian',3,0.5);
I3_5 = imfilter(I,h3_5);
h3_8 = fspecial('gaussian',3,0.8);
I3_8 = imfilter(I,h3_8);
h3_18 = fspecial('gaussian',3,1.8);
I3_18 = imfilter(I,h3_18);
h5_8 = fspecial('gaussian',5,0.8);
I5_8 = imfilter(I,h5_8);
h7_12 = fspecial('gaussian',7,1.2);
I7_12 = imfilter(I,h7_12);
figure;
subplot(2,3,1);
imshow(I);
subplot(2,3,2);
imshow(I3_5);
subplot(2,3,3);
imshow(I3_8);
subplot(2,3,4);
imshow(I3_18);
subplot(2,3,5);
imshow(I5_8);
subplot(2,3,6);
imshow(I7_12);
上面介紹的平均平滑施波器和高斯平滑濾波器都是線性平滑濾波器, 在學習頻率域濾波
以後, 還能夠爲它們賦予另一個名字一一低通濾波器。
利用平均模板的平滑消除噪聲的同時也會使圖像變得模糊. 高斯平滑在必定程度上緩解
了這些現象, 但由平滑濾波機理可知這種模糊是不可避免的。這固然是咱們所不但願的. 於
是想到選擇性地進行平滑,即只在噪聲局部區域進行平滑,而在無噪聲局部區域不進行平滑,
將模糊的影響降到最低, 這就是自適應濾波的思想.
如何判斷該局部區域是包含噪聲須要平滑的區域仍是無明顯噪聲不需平滑的區域? 這
要基於噪聲的性質來考慮, 5.3.1小節討論了圖像的局部連續性質, 噪聲的存在致使在噪聲點
處產生灰度跳躍, 從而使噪聲點局部區域灰度跨度較大. 所以能夠選擇以下兩個標準中的1
個做爲局部區域存在噪聲的判據:
對於那些噪聲位置具備隨機性和局部性的圖像, 自適應的濾波具備很是好的效果. 有興 趣的讀者可本身編制程序實現自適應的高斯平滑算法, 應用於具備上述特色的噪聲圖像中, 而且,和咱們給出的標準高斯平滑效果進行比較.