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

                          
               

       1.高通滤波器

       首先,对一副图像进行如下二维傅里叶变换。

我们将u=0和v=0带上式,我们可以得到如下式子。

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

        1.1理想高通滤波器

        
        这里的D0是滤波器的阻带半径,而D(u,v)是点到滤波器中央的距离。理想高通的滤波器的振幅特性如下所示。

用这个滤波器对图像进行处理,可得到如下所示的结果。我们可以看到,与理想的低通滤波器一样,所得到的图像有很明显的振铃现象。结果图像从视觉上来看,有些偏暗,这是因为图像的直流分量被滤掉的原因。


       1.2巴特沃斯高通滤波器

       同样的,巴特沃斯高通滤波器也可以通过改变次数n,对过度特性进行调整。过大的n会造成振铃现象。


       1.3高斯高通滤波器

       高斯滤波器的过度特性很好,所以不会发生振铃现象。


       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 锐化滤波器

       按照之前所说的,锐化滤波器是将傅里叶谱的直流分量保留,然后将其余的成分增幅。使用锐化滤波器,可以对图像的细节进行增强,使得细节凸显出来。锐化滤波器的表达式如下所示。

      其实上式的目的很明显,就是先将原图的傅里叶 谱保留下来,然后叠加上高通滤波器的结果,所得到的图像就是锐化后的图像了。这里为了调整锐化程度,引入了两个变量可以调整直流分量的衰减程度,可以调整高频分量的增幅程度。

       下面是代码。

     
     
  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 = histe q(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.带阻滤波器

       同样的,带阻滤波器也有三种特性。高斯、巴特沃斯和理想,三种类型,其数学表达式如下所示。

       其带通滤波器可以使用上面的表格转化而得。

       带阻滤波器可以用于去除周期性噪声,为了体现带阻滤波器的特性,我们先对一幅图像增加很严重的噪声。


       在原图的傅里叶谱上添加了几个很明显的亮点。在对其做IDFT,可以看到,原图被严重的周期噪声污染了。此时,我们可以使用带阻滤波器,可以有很好的去噪效果。为了避免振铃现象,选择使用如下所示巴特沃斯带阻滤波器,所用滤波器的次数为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)

       陷波滤波器也用于去除周期噪声,虽然带阻滤波器也能可以去除周期噪声,但是带阻滤波器对噪声以外的成分也有衰减。而陷波滤波器主要对,某个点进行衰减,对其余的成分不损失。使用下图将更容易理解。

       从空间域内看,图像存在着周期性噪声。其傅里叶频谱中,也能看到噪声的所在之处(这里我用红圈标注出来了,他们不是数据的一部分)。我们如果使用带阻滤波器的话,是非常麻烦的,也会使得图像有损失。陷波滤波器,能够直接对噪声处进行衰减,可以有很好的去噪效果。
       其表达式如下所示,陷波滤波器可以通过对高通滤波器的中心,进行位移就可以得到了。

这里,由于傅里叶的周期性,傅里叶频谱上不可能单独存在一个点的噪声,必定是关于远点对称的一个噪声对。这里的需要去除的噪声点,其求取的方式如下所示。
       针对于上图,我们设计如下滤波器,去进行去噪。
(图片下标错了,后续更新改过来!)
       所得到的结果,如下所示。噪声已经被去除了,画质得到了很大的改善。

                                                              (图片下标错了,后续更新改过来!)

     
     
  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.csdn.net/thnh169/  

           
               
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值