午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

[數字圖像處理]空間濾波

 waston 2016-11-03

1.空間濾波   

   空間濾波,就是直接在灰度值上,做一些濾波操作。濾波一詞,其實來源于頻域,將某個頻率成分濾除的意思。大部分線性的空間濾波器(比如均值濾波器),是在空間上進行一些灰度值上的操作,這個線性空間濾波器與頻域濾波器有一一對應的關系(比如均值濾波器其本質就是低通濾波器),這樣會有助于理解這個濾波器的特性。然而,對于非線性的濾波器(比如最大值,最小值和中央值濾波器)的話,則沒有這樣一個一一對應的關系。

   線性空間濾波所使用的運算是卷積,其計算如下所示。


在執(zhí)行空間濾波的時候,我們都會使用到這個操作。

      這個式子可能會出現兩個問題。這次是在空間域進行操作的,所以上式應該沒什么問題。但是,如果換到頻域,我們會發(fā)現,我們使用的濾波器是非因果的,按照我之前在數字信號處理的那一節(jié),非因果具有零相位特性,但是是不可實現的,因為需要未來的輸入。而在這,我們在圖像處理的時候,都是一幀一幀的處理,所以,這里非因果性不是問題。而最重要的是,零相位特性不會使得圖像變形,這是很重要的。

      還有一個問題就是邊界問題,當濾波器的中心靠近圖像邊緣時候,濾波器的一部分會位于圖像外,那么此時,我們通常會采用填0的操作來解決。但是,一些場合,直接填0操作會使得操作后的圖像出現黑邊。所以,常用的操作還有,①選擇距離最近的點填充,②填充的點為圓圖像的鏡像,③將原圖像當做周期信號來填充。

2.幾個典型的空間濾波器

      2.1平滑濾波器

      在空間域上考慮,我們所指的平滑濾波器,有平均濾波與加權平均濾波兩種形式。


這里很好理解,將濾波器范圍內的點,求平均值(或者加權平均值)。這樣會使得圖像平滑,有助于去掉一些噪聲。

      我們將其放到頻域去考慮的話,其實這是一個很典型的低通濾波器。這個濾波器會濾掉高頻成分,所以可以使得圖像平滑。其頻率響應如下所示。


3X3平均濾波的頻率響應


3X3加權平均濾波的頻率響應

      

      首先,對于兩個濾波器的振幅特性。平均濾波器的通帶要比加權平均濾波器的窄,故使用平均濾波器處理的圖像要比加權濾波器處理的圖像要模糊一些。

      注意平均濾波器的相位特性,其相位特性并不是一個平面,有的地方的值為π。首先,平均濾波器是一個偶實函數,其頻率響應是一個實函數。但是,其頻率響應有的部分為負值,這就造成了Matlab的angle()的計算結果為π。其實其還是具有0相位特性的。

      用其處理實際處理圖像的話,會得到以下結果。


      看其處理結果,其實很難分辨出有什么區(qū)別。所以,加權平均濾波器和平均濾波器的區(qū)別,從頻率響應來看的話,容易明白一些。本文只是簡單的介紹一下均值濾波器,詳細的,請參看[數字圖像處理]圖像去噪初步(1)--均值濾波器


      2.2統(tǒng)計排序濾波器

      統(tǒng)計排序濾波器的運用也廣泛,其是很典型的非線性濾波器。主要包括了,最大值濾波器,最小值濾波器,中央值濾波器等等。這里作為代表的,主要說中央值濾波器,中央值濾波對于去除椒鹽噪聲特別有效。

      所謂中央值濾波器,就是將濾波器范圍內的像素的灰度值,進行排序,選出中央值作為這個像素的灰度值。同理可解釋最大值濾波器與最小值濾波器。

      我們將一幅圖像添加椒鹽噪聲,然后嘗試著用中央值濾波器去除。



從直方圖中,可以看出,中央值濾波器對于椒鹽噪聲,有很好的去噪作用。關于非線性濾波的詳細,請參看[數字圖像處理]圖像去噪初步(2)--非線性濾波器


      2.3銳化濾波器

      使用平均濾波器,可以將圖像平滑,其本質是將圖像在濾波器范圍內求平均值。從頻域上來看,平均濾波器是低通濾波器。然而,所謂的銳化,即是將圖像的細節(jié)強調出來。這里進行了一個假設,假設細節(jié)部分是圖像高頻成分。從這里看來,其實銳化濾波器是與平均濾波器是相反的操作。

      對于一個一次元函數,其一階微分為


這樣的微分被稱為向前一次微分,這樣的微分會產生一個采樣點(針對圖像來說,偏移一個像素)的偏移。為了避免這樣的偏移,一般將向前一次微分與向后一次微分連用,這樣就不會產生一些偏移,如下所示。


現在將其二階段微分擴展到二次元的圖像,如下所示。


將其寫成濾波器的形式的話,如下左所示。我們?yōu)榱藦娬{其微分效果,也可以在斜方向上加上一個微分效果,如下右所示。我們將其稱為拉普拉斯算子。


       其頻率響應如下所示。


方向的拉普拉斯濾波器的頻率響應


八方向的拉普拉斯濾波器的頻率響應


      我們可以看出,八方向的拉普拉斯濾波器對于高頻成分的強調效果較強。其低頻部分最小值為0,這意味著,進行拉普拉斯濾波之后,其實只剩下圖像的高頻部分了(在空間域里來講,只剩下邊緣部分了)。所以,若用于圖像銳化的話,可以將所得結果疊加至原圖像,其實也就相當與濾波器的振幅特性往上移動1,保證低頻部分不變,強調高頻部分。



       2.4高提升濾波

       高提升濾波一般用于使得圖片更加清晰。其步驟大致如下,首先將圖片模糊化,然后從原圖中,將其模糊形式去除。

從而得到圖像的反銳化掩蔽,然后用將其疊加至原圖上,從而使得圖像更清晰。

當k=1的時候,這個操作稱為反銳化掩蔽。當k>1時候,這個操作稱為高提升濾波。
       其實,高提升濾波也是一種銳化濾波,其強調的也是圖像的邊緣部分(或者跳變部分)。用以下實驗可以加深對高提升濾波的理解。

        得到的結果確實比原圖更加的清晰了。為了更深一步理解,我們將第77行的灰度曲線畫出來,看看具體啥樣的。
        首先是原圖的77行與高斯模糊后的77行。

然后是原圖與模糊后的圖像的差,其圖像如下所示。

可以看出,邊緣部分都凸顯出來了,下面,我們將這個部分乘以某個常數,再疊加回原圖,就可以得到高提升濾波的結果,如下所示。

      可以看出,字體的邊緣部分被強調了。這樣會使得字體在感覺上,更加的清晰。 

      2.5 sobel濾波器

      sobel濾波器也是一個常用的濾波器。其原理與銳化濾波器也很像,其運用了一階微分,使得邊緣部分得到保留,濾除了其余的平滑部分。
      現在來分析一下sobel濾波器??v向看這個濾波器,是一個中心2次式微分運算,這個運算是一個高通濾波器。由此可以確定,sobel濾波器是可以提取圖像的邊緣。再看縱向,縱向其實是一個加權平均濾波器,這也就說明了,其實sobel濾波器有一定的平滑作用。綜上,sobel濾波器是由以下兩個濾波器合成的。
       
        Sobel濾波器有兩個方向,所以,其兩個方向的頻響如下所示。


       
         sobel濾波器可以抽出圖像的邊緣部分。從頻域上來看,其保留了圖像的中部頻段部分。


3.參考用代碼

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
close all;
clear all;

%% -------------Smoothing Lines Filters-----------------
f = imread('test_pattern_blurring_orig.tif');
f = mat2gray(f,[0 255]);

w_1 = ones(3)/9; %%%%%
g_1 = imfilter(f,w_1,'conv','symmetric','same');

w_2 = ones(5)/25; %%%%%
g_2 = imfilter(f,w_2,'conv','symmetric','same');

w_3 = [1 2 1;
2 4 2;
1 2 1]/16; %%%%%
g_3 = imfilter(f,w_3,'conv','symmetric','same');

figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');

subplot(1,2,2);
imshow(g_1,[0 1]);
xlabel('b).Average Filter(size 3x3)');

figure();
subplot(1,2,1);
imshow(g_2,[0 1]);
xlabel('c).Average Filter(size 5x5)');

subplot(1,2,2);
imshow(g_3,[0 1]);
xlabel('d).Weighted Average Filter(size 3x3)');

%% ------------------------
M = 64;
N = 64;
[H_1,w1,w2] = freqz2(w_1,M,N);
figure();
subplot(1,2,1);
mesh(w1(1:M)*pi,w2(1:N)*pi,abs(H_1(1:M,1:N)));
axis([-pi pi -pi pi 0 1]);
xlabel('\omega_1 [rad]');ylabel('\omega_2 [rad]');
zlabel('|H(e^{j\omega_1},e^{j\omega_2})|');


%figure();
subplot(1,2,2);
mesh(w1(1:M)*pi,w2(1:N)*pi,unwrap(angle(H_1(1:M,1:N))));
axis([-pi pi -pi pi -pi pi]);
xlabel('\omega_1 [rad]');ylabel('\omega_2 [rad]');
zlabel('\theta [rad]');
Average_Filter.m


   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
close all;
clear all;

%% ----------------Noise type--------------------
f = imread('original_pattern.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);

g_gaussian = imnoise(f,'gaussian',0,0.015);
g_salt_pepper = imnoise(f,'salt & pepper',0.15);

figure(1);
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');

subplot(1,2,2);
h = imhist(f)/(M*N);
bar(0:1/255:1,h);
axis([-0.1 1.1 0 0.55]),grid;
axis square;
xlabel('b).The histogram of original image');
ylabel('Number of pixels');

figure(2);
subplot(1,2,1);
imshow(g_gaussian,[0 1]);
xlabel('c).gaussian noise image');

subplot(1,2,2);
h = imhist(g_gaussian)/(M*N);
bar(0:1/255:1,h);
axis([-.1 1.1 0 0.05]),grid;
axis square;
xlabel('d).The histogram of c)');
ylabel('Number of pixels');

figure(5);
subplot(1,2,1);
imshow(g_salt_pepper,[0 1]);
xlabel('i).salt & pepper noise image');

subplot(1,2,2);
h = imhist(g_salt_pepper)/(M*N);
bar(0:1/255:1,h);
axis([-.1 1.1 0 0.55]),grid;
axis square;
xlabel('j).The histogram of g)');
ylabel('Number of pixels');

%% -------------Nonlines Filters-----------------
g_med_wg = medfilt2(g_gaussian,'symmetric',[3 3]);
g_med_sp = medfilt2(g_salt_pepper,'symmetric',[3 3]);

figure(3);
subplot(1,2,1);
imshow(g_med_wg,[0 1]);
xlabel('e).Result of median filter');

subplot(1,2,2);
h = imhist(g_med_wg)/(M*N);
bar(0:1/255:1,h);
axis([-.1 1.1 0 0.05]),grid;
axis square;
xlabel('f).The histogram of e)');
ylabel('Number of pixels');


figure(6);
subplot(1,2,1);
imshow(g_med_sp,[0 1]);
xlabel('k).Result of median filter');

subplot(1,2,2);
h = imhist(g_med_sp)/(M*N);
bar(0:1/255:1,h);
axis([-.1 1.1 0 0.55]),grid;
axis square;
xlabel('l).The histogram of i)');
ylabel('Number of pixels');


%% -------------lines Filters-----------------
w_1 = [1 2 1;
2 4 2;
1 2 1]/16; %%%%%
g_ave_wg = imfilter(g_gaussian,w_1,'conv','symmetric','same');
g_ave_sp = imfilter(g_salt_pepper,w_1,'conv','symmetric','same');

figure(4);
subplot(1,2,1);
imshow(g_ave_wg,[0 1]);
xlabel('g).Result of weighted average filter');

subplot(1,2,2);
h = imhist(g_ave_wg)/(M*N);
bar(0:1/255:1,h);
axis([-.1 1.1 0 0.05]),grid;
axis square;
xlabel('h).The histogram of k)');
ylabel('Number of pixels');


figure(7);
subplot(1,2,1);
imshow(g_ave_sp,[0 1]);
xlabel('m).Result of weighted average filter');

subplot(1,2,2);
h = imhist(g_ave_sp)/(M*N);
bar(0:1/255:1,h);
axis([-.1 1.1 0 0.55]),grid;
axis square;
xlabel('n).The histogram of m)');
ylabel('Number of pixels');
Noline_Filter.m

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
close all;
clear all;

%% -------------Sharpening Spatial Filters-----------------
f = imread('blurry_moon.tif');
f = mat2gray(f,[0 255]);

w_L = [0 1 0
1 -4 1
0 1 0];
g_L_whitout = imfilter(f,w_L,'conv','symmetric','same');
g_L = mat2gray(g_L_whitout);
g = f - g_L_whitout;
g = mat2gray(g ,[0 1]);

figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');

subplot(1,2,2);
imshow(g_L_whitout,[0 1]);
xlabel('b).The Laplacian');

figure();
subplot(1,2,1);
imshow(g_L,[0 1]);
xlabel('c).The Laplacian with scaling');

subplot(1,2,2);
imshow(g,[0 1]);
xlabel('d).Result Image');

%% ------------------------
[M,N] = size(f);
[H,w1,w2] = freqz2(w_L,N,M);
figure();
subplot(1,2,1);
mesh(w1(1:10:N)*pi,w2(1:10:M)*pi,abs(H(1:10:M,1:10:N)));
axis([-pi pi -pi pi 0 12]);
xlabel('\omega_1 [rad]');ylabel('\omega_2 [rad]');
zlabel('|H(e^{j\omega_1},e^{j\omega_2})|');


%figure();
subplot(1,2,2);
mesh(w1(1:10:N)*pi,w2(1:10:M)*pi,unwrap(angle(H(1:10:M,1:10:N))));
axis([-pi pi -pi pi -pi pi]);
xlabel('\omega_1 [rad]');ylabel('\omega_2 [rad]');
zlabel('\theta [rad]');
Laplacian_Filters.m

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
close all;
clear all;

%% -------------Unsharp Masking and Highboots Filtering-----------------
close all;
clear all;

f = imread('dipxe_text.tif');
f = mat2gray(f,[0 255]);

w_Gaussian = fspecial('gaussian',[3,3],1);
g_Gaussian = imfilter(f,w_Gaussian,'conv','symmetric','same');

g_mask = f - g_Gaussian;

g_Unsharp = f + g_mask;
g_hb = f + (4.5 * g_mask);
f = mat2gray(f,[0 1]);

figure();
subplot(2,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');

subplot(2,2,2);
imshow(g_Gaussian,[0 1]);
xlabel('b).Result of Gaussian Filter');

subplot(2,2,3);
imshow(mat2gray(g_mask),[0 1]);
xlabel('a).Unsharp Mask');

subplot(2,2,4);
imshow(g_hb,[0 1]);
xlabel('b).Result of Highboots Filter');


%%
[M,N] = size(f);

figure();
%subplot(1,2,1);
plot(1:N,f(77,1:N),'r');
axis([1,N,0,1]),grid;
axis square;
xlabel('a).Original Image(77th column)');
ylabel('intensity level');

figure();
%subplot(1,2,2);
plot(1:N,f(77,1:N),'r',1:N,g_Gaussian(77,1:N),'--b');
legend('Original','Result');
axis([1,N,0,1]),grid;
axis square;
xlabel('b).Result of gaussian filter(77th column)');
ylabel('intensity level');

figure();
%subplot(1,2,1);
plot(1:N,g_mask(77,1:N));
axis([1,N,-.1,.1]),grid;
axis square;
xlabel('c).Result of gaussian filter (77th column)');
ylabel('intensity level');

figure();
%subplot(1,2,2);
plot(1:N,g_hb(77,1:N));
axis([1,N,0,1.1]),grid;
axis square;
xlabel('d).Result of Highboots Filtering(77th column)');
ylabel('intensity level');
Highboots_Filter.m

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
close all;
clear all;

%% -------------The Gradient-----------------
f = imread('contact_lens_original.tif');
f = mat2gray(f,[0 255]);

sobel_x = [-1 -2 -1;
0 0 0;
1 2 1];
sobel_y = [-1 0 1;
-2 0 2;
-1 0 1];

g_x = abs(imfilter(f,sobel_x,'conv','symmetric','same'));
g_y = abs(imfilter(f,sobel_y,'conv','symmetric','same'));
g_sobel = g_x + g_y;

figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original Image');

subplot(1,2,2);
imshow(g_sobel,[0 1]);
xlabel('b).Result of Sobel Operators');

figure();
subplot(1,2,1);
imshow(g_x,[0 1]);
xlabel('c).Result of Sx');

subplot(1,2,2);
imshow(g_y,[0 1]);
xlabel('d).Result of Sy');


%% ------------------------
M = 64;
N = 64;
[H,w1,w2] = freqz2(sobel_x,N,M);
figure();
subplot(1,2,1);
mesh(w1(1:N)*pi,w2(1:M)*pi,abs(H(1:M,1:N)));
axis([-pi pi -pi pi 0 12]);
xlabel('\omega_1 [rad]');ylabel('\omega_2 [rad]');
zlabel('|H(e^{j\omega_1},e^{j\omega_2})|');


%figure();
subplot(1,2,2);
mesh(w1(1:N)*pi,w2(1:M)*pi,unwrap(angle(H(1:M,1:N))));
axis([-pi pi -pi pi -pi pi]);
xlabel('\omega_1 [rad]');ylabel('\omega_2 [rad]');
zlabel('\theta [rad]');


[H,w1,w2] = freqz2(sobel_y,N,M);
figure();
subplot(1,2,1);
mesh(w1(1:N)*pi,w2(1:M)*pi,abs(H(1:M,1:N)));
axis([-pi pi -pi pi -12 12]);
xlabel('\omega_1 [rad]');ylabel('\omega_2 [rad]');
zlabel('|H(e^{j\omega_1},e^{j\omega_2})|');

%figure();
subplot(1,2,2);
mesh(w1(1:N)*pi,w2(1:M)*pi,unwrap(angle(H(1:M,1:N))));
axis([-pi pi -pi pi -pi pi]);
xlabel('\omega_1 [rad]');ylabel('\omega_2 [rad]');
zlabel('\theta [rad]');
Sobel_Operators.m


數字圖像處理 - 銳化空間濾波器

3.6 銳化空間濾波器

銳化處理的主要目的是突出圖像中的細節(jié)或者增強被模糊了的細節(jié),這種模糊不是由于錯誤操作,就是特殊圖像獲取方法的固有印象??偟膩碚f,微分算子的 響應強度與圖像在該店(應用了算子)的突變程度有關。這樣一來,圖像微分增強了邊緣和其他突變(如噪聲)并削弱了灰度變化緩慢的區(qū)域。

 為了說明簡單,主要集中討論一階微分的性質。我們最高興去的微分性質是恒定灰度區(qū)域(平坦段)、突變的開頭與結尾(階梯和斜坡突變)及沿著灰度級斜坡處的特性。這些類型的突變可以用來對圖像中的噪聲點、細線與邊緣模型化。

3.6.1 基礎

數字函數(圖像,離散的數字序列)的微分定義條件:

  這里我們首先了解下數學函數的微分,微分可以用不同的術語定義,也有各種方法定義這些差別,然而,對于一階微分任何定義都必須保證以下幾點:

(1)在平坦 段(灰度不變區(qū)域)微分值為零;

(2)在灰度階梯或斜坡的起始點處微分值非零;

(3)沿著斜坡面微分值非零。

任何二階微分的定義也類似:

(1)在平坦去微 分值必為零;

(2)在灰度階梯或斜坡的起始點處微分值非零;

(3)沿著斜坡面微分值非零。

  因為我們處理的是數字量,其值是有限的,故最大灰度級的變換也是有限的,變化發(fā)生最短距離是在兩相鄰像素之間。對于一元函數f(x)表達一階微分定義是一個差值:

f/f(x+1 f(x)

這里,為了與對二元圖像函數f(x,y)求微分時的表達式保持一致,使用偏導數符號,對二元函數,我們將沿著兩個空間軸處理偏微分,類似地,用差分定義二階微分:

技術分享

下圖表明了上述的具體含義。注意下圖中二階差分的零交叉點(Zero crossing),零交叉點對于邊緣的定位非常有用。

技術分享

二階微分在增強細節(jié)方面比一階微分好得多,這是一個適合銳化圖像的理想特征。

3.6.2 基于二階微分的圖像增強--拉普拉斯算子

  這里介紹二階微分在圖像增強處理中的應用。首先定義一個二階微分的離散公式,然后構造一個基于此式的濾波器。我們最關注的是一種各向同性濾波器,這種濾波 器的響應與濾波器作用的圖像的突變方向無關。也就是說,各向同性濾波器是旋轉不變的,即將原始圖像旋轉后進行濾波處理給出的結果與先對圖像濾波,然后再旋 轉的結果相同。

   處理方法

   最簡單的各向同性微分算子是拉普拉斯算子,一個二元圖像函數f(x,y)的拉普拉斯變換定義為:

                                                  技術分享

因為任意階微分都是線型操作,所以拉普拉斯變換也是一個線性操作。

考慮到有兩個變量,因此,我們在x,y方向上對二階偏微分采用下倆定義:

                                                 技術分享  

                                                技術分享

因此二維拉維拉斯數字實現可由這兩個分量相加得到:

                                               技術分享 ,這里關注系數矩陣即掩膜:

技術分享

這個矩陣給出了在90度方向上旋轉的各向同性結果,如果向得到45度方向上旋轉的各向同性結果則,將中心對角點標為1,中心點為-8即可。

   由于拉普拉斯是一種微分算子,它的應用強調圖像中灰度的突變及降低灰度慢變化的區(qū)域。將原始圖像和拉普拉斯圖像疊加在一起的簡單方法可以保護拉普拉斯銳化處理的效果,同時又能復原背景信息。我們使用拉普拉斯變換對圖像增強的基本方法可表示為下式:

                                                          技術分享

 

含有對角線信息的拉普拉斯算子

技術分享

 

3.6.3 非銳化掩蔽和高提升濾波

在印刷和出版界用了多年的圖像銳化處理過程,從原圖中減去一副非銳化(平滑后的)圖像,達到銳化的目的。

步驟有以下幾步:

  1. 模糊源圖像
  2. 從原圖像中減去模糊圖像(產生的差值圖像稱為模板)
  3. 將模板加到原圖像上。

令 技術分享表示模糊圖像,那么首先我們得到模板:

技術分享

然后在原圖像上加上該模板的一個權重部分:

技術分享

上式中,當k=1時,我們得到上面定義的非銳化掩蔽,當k>1時,該處理稱為高提升濾波,當k<1時,則不強調非銳化模板的貢獻。

技術分享

需要注意的是,如果k足夠大的時候,負值將導致邊緣周圍有暗的暈輪,會產生不好的效果。

3.6.4 使用一階微分對(非線性)圖像銳化—梯度

一個函數ff(x,y)的梯度是定義為二維列向量(這是一個矢量,給定了一個方向):

技術分享

然后其幅度值為技術分享,其中M(x,y)是與原圖像大小相同的圖像,該圖像通常稱為梯度圖像。后面的表達式仍保留了灰度的變換,但丟失掉了其各向同性。

下面介紹兩種算子:一階Roberts交叉梯度算子和二階Soble算子:

技術分享

3×3的區(qū)域圖像中,應該是gx = (z8z5) g= (z9z6),但是Roberts進行了改良,提出了Roberts算子,gx=(z9z5)gy=(z8z6);由于偶數模板沒有對稱中心,所以與之前的卷積模板定義中,運算結果等會中心點位置值不能對應, 所以使用奇數的模板,例如3 * 3 的Soble算子,gx=(z7+2z8+z9)(z1+2z2+z3),gy=(z3+2z6+z9)(z1+2z4+z7)。

使用梯度進行邊緣增強,可以用以突出灰度圖像中看不見的小斑點,在下面的例子中甚至可以去除灰度不變或變換緩慢的圖案陰影。

技術分享

3.7 混合空間增強法

本書所提供例子的策略是:用Laplace突出圖像中的小細節(jié),然后使用梯度法突出邊緣。平滑過得梯度圖像用于掩蔽Laplace圖像,最后使用灰度變換來增大圖像的灰度動態(tài)范圍。其中降低噪聲可以使用中值濾波器或者使用原圖像梯度操作的平滑形式形成的一個模板。

圖像請直接參考Digital Image Processing (3rd Edition)Page 192。

3.8 使用模糊技術進行灰度變換和空間變換

3.8.1 引言

隸屬度函數μ(z):用以描述一個元素是否屬于集合的模糊程度,若是一個階躍函數,可以認為是一個我們所了解的"干脆的"集合,若是一個分段函數,則可以看做一個模糊集合:

技術分享

3.8.2模糊集合論原理

模糊集合是一個有z值和(賦予z成員等級的)相應隸屬度函數組成的序對,即

 

A={z,μA(z)|zZ}

 

其中隸屬度函數是關鍵,表明了元素z到集合的一種對應關系。如果隸屬度函數僅有0,1兩個值,那么模糊集合退化為"干脆的"集合。下面這張圖展示了模糊集合間的一些關系:

技術分享

有一些常用的隸屬度函數,如三角形、梯形、型、S型、種型、截尾高斯型等,之后用到了會另作介紹。

3.8.3 模糊集合的應用(略)

3.8.4 使用模糊集合進行灰度變換

對于一副灰度圖像,描述它的某個區(qū)域"暗的"、"灰的"、"亮的"都是利用模糊的概念,那么我們將給予這三種情況定義三種模糊集合:

技術分享

那么對于任何輸入z0,輸出v0技術分享

從書中給予的例子中來看,圖像的細節(jié)部分得到了比較好的保留,但代價是計算量大大增加。


    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多