频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器

                          
               

       1.高通滤波器

       首先,对一副图像进行如下二维傅里叶变换。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
我们将u=0和v=0带上式,我们可以得到如下式子。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
根据上式,可以到F(0,0)的值是非常大的。这里,我们将F(0,0)称为直流分量,直流分量比其他的成分要大好几个数量级。所以,这也就是傅里叶谱为什么需要使用对数变换才能看清楚的原因。
       这里,对于高通滤波器而言,由于直流分量被衰减,所以,所得到的图像的动态范围是非常狭窄的,也就造成了图像偏灰。进一步而言,保持直流(DC)分量,对别的部分进行增幅,可以增强图像的细节。这样的滤波器称为锐化滤波器。这一小节主要介绍高通滤波器与锐化滤波器。

        1.1理想高通滤波器

        频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
        这里的D0是滤波器的阻带半径,而D(u,v)是点到滤波器中央的距离。理想高通的滤波器的振幅特性如下所示。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
用这个滤波器对图像进行处理,可得到如下所示的结果。我们可以看到,与理想的低通滤波器一样,所得到的图像有很明显的振铃现象。结果图像从视觉上来看,有些偏暗,这是因为图像的直流分量被滤掉的原因。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器

       1.2巴特沃斯高通滤波器

频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
       同样的,巴特沃斯高通滤波器也可以通过改变次数n,对过度特性进行调整。过大的n会造成振铃现象。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器

       1.3高斯高通滤波器

频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
       高斯滤波器的过度特性很好,所以不会发生振铃现象。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器

       1.4 上述三种滤波器的实现Matlab代码

  1. close all;
  2. clear all;
  3. %% ---------Ideal Highpass Filters (Fre. Domain)------------
  4. f = imread('characters_test_pattern.tif');
  5. f = mat2gray(f,[0 255]);
  6. [M,N] = size(f);
  7. P = 2*M;
  8. Q = 2*N;
  9. fc = zeros(M,N);
  10. for x = 1:1:M
  11.     for y = 1:1:N
  12.         fc(x,y) = f(x,y) * (-1)^(x+y);
  13.     end
  14. end
  15. F = fft2(fc,P,Q);
  16. H_1 = ones(P,Q);
  17. H_2 = ones(P,Q);
  18. for x = (-P/2):1:(P/2)-1
  19.      for y = (-Q/2):1:(Q/2)-1
  20.         D = (x^2 + y^2)^(0.5);
  21.         if(D <= 60)  H_1(x+(P/2)+1,y+(Q/2)+1) = 0; end   
  22.         if(D <= 160) H_2(x+(P/2)+1,y+(Q/2)+1) = 0; end
  23.      end
  24. end
  25. G_1 = H_1 .* F;
  26. G_2 = H_2 .* F;
  27. g_1 = real(ifft2(G_1));
  28. g_1 = g_1(1:1:M,1:1:N);
  29. g_2 = real(ifft2(G_2));
  30. g_2 = g_2(1:1:M,1:1:N);        
  31. for x = 1:1:M
  32.     for y = 1:1:N
  33.         g_1(x,y) = g_1(x,y) * (-1)^(x+y);
  34.         g_2(x,y) = g_2(x,y) * (-1)^(x+y);
  35.     end
  36. end
  37. %% -----show-------
  38. figure();
  39. subplot(1,2,1);
  40. imshow(f,[0 1]);
  41. xlabel('a).Original Image');
  42. subplot(1,2,2);
  43. imshow(log(1 + abs(F)),[ ]);
  44. xlabel('b).Fourier spectrum of a');
  45. figure();
  46. subplot(1,2,1);
  47. imshow(H_1,[0 1]);
  48. xlabel('c).Ideal Highpass filter(D=60)');
  49. subplot(1,2,2);
  50. h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));
  51. set(h,'EdgeColor','k');
  52. axis([0 P 0 Q 0 1]);
  53. xlabel('u');ylabel('v');
  54. zlabel('|H(u,v)|');
  55. figure();
  56. subplot(1,2,1);
  57. imshow(log(1 + abs(G_1)),[ ]);
  58. xlabel('d).Result of filtering using c');
  59. subplot(1,2,2);
  60. imshow(g_1,[0 1]);
  61. xlabel('e).Result image');
  62. figure();
  63. subplot(1,2,1);
  64. imshow(H_2,[0 1]);
  65. xlabel('f).Ideal Highpass filter(D=160)');
  66. subplot(1,2,2);
  67. h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));
  68. set(h,'EdgeColor','k');
  69. axis([0 P 0 Q 0 1]);
  70. xlabel('u');ylabel('v');
  71. zlabel('|H(u,v)|');
  72. figure();
  73. subplot(1,2,1);
  74. imshow(log(1 + abs(G_2)),[ ]);
  75. xlabel('g).Result of filtering using e');
  76. subplot(1,2,2);
  77. imshow(g_2,[0 1]);
  78. xlabel('h).Result image');
  79. close all;
  80. clear all;
  81. %% ---------Butterworth Highpass Filters (Fre. Domain)------------
  82. f = imread('characters_test_pattern.tif');
  83. f = mat2gray(f,[0 255]);
  84. [M,N] = size(f);
  85. P = 2*M;
  86. Q = 2*N;
  87. fc = zeros(M,N);
  88. for x = 1:1:M
  89.     for y = 1:1:N
  90.         fc(x,y) = f(x,y) * (-1)^(x+y);
  91.     end
  92. end
  93. F = fft2(fc,P,Q);
  94. H_1 = zeros(P,Q);
  95. H_2 = zeros(P,Q);
  96. for x = (-P/2):1:(P/2)-1
  97.      for y = (-Q/2):1:(Q/2)-1
  98.         D = (x^2 + y^2)^(0.5);
  99.         D_0 = 100;
  100.         H_1(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D_0/D)^2);  
  101.         H_2(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D_0/D)^6);
  102.      end
  103. end
  104. G_1 = H_1 .* F;
  105. G_2 = H_2 .* F;
  106. g_1 = real(ifft2(G_1));
  107. g_1 = g_1(1:1:M,1:1:N);
  108. g_2 = real(ifft2(G_2));
  109. g_2 = g_2(1:1:M,1:1:N);        
  110. for x = 1:1:M
  111.     for y = 1:1:N
  112.         g_1(x,y) = g_1(x,y) * (-1)^(x+y);
  113.         g_2(x,y) = g_2(x,y) * (-1)^(x+y);
  114.     end
  115. end
  116. %% -----show-------
  117. figure();
  118. subplot(1,2,1);
  119. imshow(f,[0 1]);
  120. xlabel('a).Original Image');
  121. subplot(1,2,2);
  122. imshow(log(1 + abs(F)),[ ]);
  123. xlabel('b).Fourier spectrum of a');
  124. figure();
  125. subplot(1,2,1);
  126. imshow(H_1,[0 1]);
  127. xlabel('c)Butterworth Lowpass (D_{0}=100,n=1)');
  128. subplot(1,2,2);
  129. h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));
  130. set(h,'EdgeColor','k');
  131. axis([0 P 0 Q 0 1]);
  132. xlabel('u');ylabel('v');
  133. zlabel('|H(u,v)|');
  134. figure();
  135. subplot(1,2,1);
  136. imshow(log(1 + abs(G_1)),[ ]);
  137. xlabel('d).Result of filtering using c');
  138. subplot(1,2,2);
  139. imshow(g_1,[0 1]);
  140. xlabel('e).Result image');
  141. figure();
  142. subplot(1,2,1);
  143. imshow(H_2,[0 1]);
  144. xlabel('f).Butterworth Lowpass (D_{0}=100,n=3)');
  145. subplot(1,2,2);
  146. h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));
  147. set(h,'EdgeColor','k');
  148. axis([0 P 0 Q 0 1]);
  149. xlabel('u');ylabel('v');
  150. zlabel('|H(u,v)|');
  151. figure();
  152. subplot(1,2,1);
  153. imshow(log(1 + abs(G_2)),[ ]);
  154. xlabel('g).Result of filtering using e');
  155. subplot(1,2,2);
  156. imshow(g_2,[0 1]);
  157. xlabel('h).Result image');
  158. close all;
  159. clear all;
  160. %% ---------Gaussian Highpass Filters (Fre. Domain)------------
  161. f = imread('characters_test_pattern.tif');
  162. f = mat2gray(f,[0 255]);
  163. [M,N] = size(f);
  164. P = 2*M;
  165. Q = 2*N;
  166. fc = zeros(M,N);
  167. for x = 1:1:M
  168.     for y = 1:1:N
  169.         fc(x,y) = f(x,y) * (-1)^(x+y);
  170.     end
  171. end
  172. F = fft2(fc,P,Q);
  173. H_1 = zeros(P,Q);
  174. H_2 = zeros(P,Q);
  175. for x = (-P/2):1:(P/2)-1
  176.      for y = (-Q/2):1:(Q/2)-1
  177.         D = (x^2 + y^2)^(0.5);
  178.         D_0 = 60;
  179.         H_1(x+(P/2)+1,y+(Q/2)+1) = 1 - exp(-(D*D)/(2*D_0*D_0));  
  180.         D_0 = 160;
  181.         H_2(x+(P/2)+1,y+(Q/2)+1) = 1 - exp(-(D*D)/(2*D_0*D_0));
  182.      end
  183. end
  184. G_1 = H_1 .* F;
  185. G_2 = H_2 .* F;
  186. g_1 = real(ifft2(G_1));
  187. g_1 = g_1(1:1:M,1:1:N);
  188. g_2 = real(ifft2(G_2));
  189. g_2 = g_2(1:1:M,1:1:N);        
  190. for x = 1:1:M
  191.     for y = 1:1:N
  192.         g_1(x,y) = g_1(x,y) * (-1)^(x+y);
  193.         g_2(x,y) = g_2(x,y) * (-1)^(x+y);
  194.     end
  195. end
  196. %% -----show-------
  197. figure();
  198. subplot(1,2,1);
  199. imshow(f,[0 1]);
  200. xlabel('a).Original Image');
  201. subplot(1,2,2);
  202. imshow(log(1 + abs(F)),[ ]);
  203. xlabel('b).Fourier spectrum of a');
  204. figure();
  205. subplot(1,2,1);
  206. imshow(H_1,[0 1]);
  207. xlabel('c)Gaussian Highpass (D_{0}=60)');
  208. subplot(1,2,2);
  209. h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));
  210. set(h,'EdgeColor','k');
  211. axis([0 P 0 Q 0 1]);
  212. xlabel('u');ylabel('v');
  213. zlabel('|H(u,v)|');
  214. figure();
  215. subplot(1,2,1);
  216. imshow(log(1 + abs(G_1)),[ ]);
  217. xlabel('d).Result of filtering using c');
  218. subplot(1,2,2);
  219. imshow(g_1,[0 1]);
  220. xlabel('e).Result image');
  221. figure();
  222. subplot(1,2,1);
  223. imshow(H_2,[0 1]);
  224. xlabel('f).Gaussian Highpass (D_{0}=160)');
  225. subplot(1,2,2);
  226. h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));
  227. set(h,'EdgeColor','k');
  228. axis([0 P 0 Q 0 1]);
  229. xlabel('u');ylabel('v');
  230. zlabel('|H(u,v)|');
  231. figure();
  232. subplot(1,2,1);
  233. imshow(log(1 + abs(G_2)),[ ]);
  234. xlabel('g).Result of filtering using e');
  235. subplot(1,2,2);
  236. imshow(g_2,[0 1]);
  237. xlabel('h).Result image');

       1.5 锐化滤波器

       按照之前所说的,锐化滤波器是将傅里叶谱的直流分量保留,然后将其余的成分增幅。使用锐化滤波器,可以对图像的细节进行增强,使得细节凸显出来。锐化滤波器的表达式如下所示。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
      其实上式的目的很明显,就是先将原图的傅里叶频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器保留下来,然后叠加上高通滤波器的结果频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器,所得到的图像就是锐化后的图像了。这里为了调整锐化程度,引入了两个变量频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器可以调整直流分量的衰减程度,频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器可以调整高频分量的增幅程度。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
       下面是代码。
  1. close all;
  2. clear all;
  3. clc;
  4. %% ---------The High-Fre-Emphasis Filters (Fre. Domain)------------
  5. f = imread('blurry_moon.tif');
  6. f = mat2gray(f,[0 255]);
  7. [M,N] = size(f);
  8. P = 2*M;
  9. Q = 2*N;
  10. fc = zeros(M,N);
  11. for x = 1:1:M
  12.     for y = 1:1:N
  13.         fc(x,y) = f(x,y) * (-1)^(x+y);
  14.     end
  15. end
  16. F = fft2(fc,P,Q);
  17. H_HP = zeros(P,Q);
  18. for x = (-P/2):1:(P/2)-1
  19.      for y = (-Q/2):1:(Q/2)-1
  20.         D = (x^2 + y^2)^(0.5);
  21.         D_0 = 80;
  22.         H_HP(x+(P/2)+1,y+(Q/2)+1) = 1 - exp(-(D*D)/(2*D_0*D_0));  
  23.      end
  24. end
  25. G_HP = H_HP .* F;
  26. G_HFE = (1 + 1.1 * H_HP) .* F;
  27. g_1 = real(ifft2(G_HP));
  28. g_1 = g_1(1:1:M,1:1:N);
  29. g_2 = real(ifft2(G_HFE));
  30. g_2 = g_2(1:1:M,1:1:N);
  31. for x = 1:1:M
  32.     for y = 1:1:N
  33.         g_1(x,y) = g_1(x,y) * (-1)^(x+y);
  34.         g_2(x,y) = g_2(x,y) * (-1)^(x+y);
  35.     end
  36. end
  37. g = histeq(g_2);
  38. %g_1 = mat2gray(g_1);
  39. %% -----show-------
  40. figure();
  41. subplot(1,2,1);
  42. imshow(f,[0 1]);
  43. xlabel('a).Original Image');
  44. subplot(1,2,2);
  45. imshow(log(1 + abs(F)),[ ]);
  46. xlabel('b).Fourier spectrum of a');
  47. figure();
  48. subplot(1,2,1);
  49. imshow(g_1,[0 1]);
  50. xlabel('c).Result image of High-pass Filter');
  51. subplot(1,2,2);
  52. imshow(log(1 + abs(G_HP)),[ ]);
  53. xlabel('d).Result of filtering using e');
  54. figure();
  55. subplot(1,2,1);
  56. imshow(g_2,[0 1]);
  57. xlabel('e).Result image of High-Fre-Emphasis Filter');
  58. subplot(1,2,2);
  59. imshow(log(1 + abs(G_HFE)),[ ]);
  60. xlabel('f).Result of filtering using e');

       2.带阻滤波器

       同样的,带阻滤波器也有三种特性。高斯、巴特沃斯和理想,三种类型,其数学表达式如下所示。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
       其带通滤波器可以使用上面的表格转化而得。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
       带阻滤波器可以用于去除周期性噪声,为了体现带阻滤波器的特性,我们先对一幅图像增加很严重的噪声。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
       在原图的傅里叶谱上添加了几个很明显的亮点。在对其做IDFT,可以看到,原图被严重的周期噪声污染了。此时,我们可以使用带阻滤波器,可以有很好的去噪效果。为了避免振铃现象,选择使用如下所示巴特沃斯带阻滤波器,所用滤波器的次数为2次。使用空间域的操作,要去除这种噪声基本是不可能的,这也是频域内的操作的优点。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
  频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
  1. close all;
  2. clear all;
  3. clc;
  4. %% ---------------------Add Noise-------------------------
  5. f = imread('left.tif');
  6. f = mat2gray(f,[0 255]);
  7. [M,N] = size(f);
  8. P = 2*M;
  9. Q = 2*N;
  10. fc = zeros(M,N);
  11. for x = 1:1:M
  12.     for y = 1:1:N
  13.         fc(x,y) = f(x,y) * (-1)^(x+y);
  14.     end
  15. end
  16. F = fft2(fc,P,Q);
  17. H_NP = ones(P,Q);
  18. for x = (-P/2):1:(P/2)-1
  19.      for y = (-Q/2):1:(Q/2)-1
  20.         D = 2;
  21.        
  22.         v_k = -200; u_k = 150;
  23.         D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
  24.         H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  25.         D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
  26.         H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  27.        
  28.         v_k = 200; u_k = 150;
  29.         D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
  30.         H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  31.         D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
  32.         H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  33.        
  34.         v_k = 0; u_k = 250;
  35.         D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
  36.         H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  37.         D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
  38.         H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  39.        
  40.         v_k = 250; u_k = 0;
  41.         D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
  42.         H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  43.         D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
  44.         H_NP(x+(P/2)+1,y+(Q/2)+1) = H_NP(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  45.        
  46.        
  47.         H_NP(x+(P/2)+1,y+(Q/2)+1) = 1 + 700*(1 - H_NP(x+(P/2)+1,y+(Q/2)+1));
  48.      end
  49. end
  50. G_Noise = F .* H_NP;
  51. g_noise = real(ifft2(G_Noise));
  52. g_noise = g_noise(1:1:M,1:1:N);    
  53. for x = 1:1:M
  54.     for y = 1:1:N
  55.         g_noise(x,y) = g_noise(x,y) * (-1)^(x+y);
  56.     end
  57. end
  58. %% ---------Bondpass Filters (Fre. Domain)------------
  59. H_1 = ones(P,Q);
  60. for x = (-P/2):1:(P/2)-1
  61.      for y = (-Q/2):1:(Q/2)-1
  62.         D = (x^2 + y^2)^(0.5);
  63.         D_0 = 250;
  64.         W = 30;
  65.         H_1(x+(P/2)+1,y+(Q/2)+1) = 1/(1+((D*W)/((D*D) - (D_0*D_0)))^6);  
  66.      end
  67. end
  68. G_1 = H_1 .* G_Noise;
  69. g_1 = real(ifft2(G_1));
  70. g_1 = g_1(1:1:M,1:1:N);    
  71. for x = 1:1:M
  72.     for y = 1:1:N
  73.         g_1(x,y) = g_1(x,y) * (-1)^(x+y);
  74.     end
  75. end
  76. %% -----show-------
  77. close all;
  78. figure();
  79. subplot(1,2,1);
  80. imshow(f,[0 1]);
  81. xlabel('a).Original Image');
  82. subplot(1,2,2);
  83. imshow(log(1 + abs(F)),[ ]);
  84. xlabel('b).Fourier spectrum of a');
  85. figure();
  86. subplot(1,2,2);
  87. imshow(log(1 + abs(G_Noise)),[ ]);
  88. xlabel('c).Fourier spectrum of b');
  89. subplot(1,2,1);
  90. imshow(g_noise,[0 1]);
  91. xlabel('b).Result of add noise');
  92. figure();
  93. subplot(1,2,1);
  94. imshow(H_1,[0 1]);
  95. xlabel('d).Butterworth Bandpass filter(D=355 W=40 n =2)');
  96. subplot(1,2,2);
  97. h = mesh(1:20:Q,1:20:P,H_1(1:20:P,1:20:Q));
  98. set(h,'EdgeColor','k');
  99. axis([0 Q 0 P 0 1]);
  100. xlabel('u');ylabel('v');
  101. zlabel('|H(u,v)|');
  102. figure();
  103. subplot(1,2,2);
  104. imshow(log(1 + abs(G_1)),[ ]);
  105. xlabel('e).Fourier spectrum of f');
  106. subplot(1,2,1);
  107. imshow(g_1,[0 1]);
  108. xlabel('f).Result of denoise');

       3.陷波滤波器(Notch Filter)

       陷波滤波器也用于去除周期噪声,虽然带阻滤波器也能可以去除周期噪声,但是带阻滤波器对噪声以外的成分也有衰减。而陷波滤波器主要对,某个点进行衰减,对其余的成分不损失。使用下图将更容易理解。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
       从空间域内看,图像存在着周期性噪声。其傅里叶频谱中,也能看到噪声的所在之处(这里我用红圈标注出来了,他们不是数据的一部分)。我们如果使用带阻滤波器的话,是非常麻烦的,也会使得图像有损失。陷波滤波器,能够直接对噪声处进行衰减,可以有很好的去噪效果。
       其表达式如下所示,陷波滤波器可以通过对高通滤波器的中心,进行位移就可以得到了。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
这里,由于傅里叶的周期性,傅里叶频谱上不可能单独存在一个点的噪声,必定是关于远点对称的一个噪声对。这里的频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器需要去除的噪声点,其求取的方式如下所示。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
       针对于上图,我们设计如下滤波器,去进行去噪。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
(图片下标错了,后续更新改过来!)
       所得到的结果,如下所示。噪声已经被去除了,画质得到了很大的改善。
频域滤波(2)--高通滤波器带阻滤波器与陷波滤波器
                                                              (图片下标错了,后续更新改过来!)
  1. close all;
  2. clear all;
  3. clc;
  4. %% ---------Butterworth Notch filter (Fre. Domain)------------
  5. f = imread('car_75DPI_Moire.tif');
  6. f = mat2gray(f,[0 255]);
  7. [M,N] = size(f);
  8. P = 2*M;
  9. Q = 2*N;
  10. fc = zeros(M,N);
  11. for x = 1:1:M
  12.     for y = 1:1:N
  13.         fc(x,y) = f(x,y) * (-1)^(x+y);
  14.     end
  15. end
  16. F = fft2(fc,P,Q);
  17. H_NF = ones(P,Q);
  18. for x = (-P/2):1:(P/2)-1
  19.      for y = (-Q/2):1:(Q/2)-1
  20.         D = 30;
  21.        
  22.         v_k = 59; u_k = 77;
  23.         D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
  24.         H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  25.         D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
  26.         H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  27.        
  28.         v_k = 59; u_k = 159;
  29.         D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
  30.         H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  31.         D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
  32.         H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  33.        
  34.         v_k = -54; u_k = 84;
  35.         D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
  36.         H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  37.         D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
  38.         H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  39.        
  40.         v_k = -54; u_k = 167;
  41.         D_k = ((x+u_k)^2 + (y+v_k)^2)^(0.5);
  42.         H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  43.         D_k = ((x-u_k)^2 + (y-v_k)^2)^(0.5);
  44.         H_NF(x+(P/2)+1,y+(Q/2)+1) = H_NF(x+(P/2)+1,y+(Q/2)+1) * 1/(1+(D/D_k)^4);
  45.      end
  46. end
  47. G_1 = H_NF .* F;
  48. g_1 = real(ifft2(G_1));
  49. g_1 = g_1(1:1:M,1:1:N);    
  50. for x = 1:1:M
  51.     for y = 1:1:N
  52.         g_1(x,y) = g_1(x,y) * (-1)^(x+y);
  53.     end
  54. end
  55. %% -----show-------
  56. close all;
  57. figure();
  58. subplot(1,2,1);
  59. imshow(f,[0 1]);
  60. xlabel('a).Original Image');
  61. subplot(1,2,2);
  62. imshow(log(1 + abs(F)),[ ]);
  63. xlabel('b).Fourier spectrum of a');
  64. figure();
  65. subplot(1,2,1);
  66. imshow(H_NF,[0 1]);
  67. xlabel('c).Butterworth Notch filter(D=30 n=2)');
  68. subplot(1,2,2);
  69. h = mesh(1:10:Q,1:10:P,H_NF(1:10:P,1:10:Q));
  70. set(h,'EdgeColor','k');
  71. axis([0 Q 0 P 0 1]);
  72. xlabel('u');ylabel('v');
  73. zlabel('|H(u,v)|');
  74. figure();
  75. subplot(1,2,2);
  76. imshow(log(1 + abs(G_1)),[ ]);
  77. xlabel('e).Fourier spectrum of d');
  78. subplot(1,2,1);
  79. imshow(g_1,[0 1]);
  80. xlabel('d).Result image');
原文发于博客:http://blog.****.net/thnh169/