2017-05-21 4 views
1

私はopencv pythonで理想的なローパスフィルタを実装しようとしています。私はここで何が間違っているのか分かりません。誰かが私を導くことができますか? iは、以下に続くopencv(python)でローパス周波数フィルタを実装しようとしましたが、不正確な結果を得ようとしています

  1. 読取画像
  2. 画像のFFTを取得するステップ - > H
  3. 乗算HとF - > F
  4. クレートは
  5. マスクマスクのFFTを得ます - > g
  6. gの逆数を取得

#!/usr/bin/env python 

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 

img = cv2.imread('1.tif', 0) 
height, width = img.shape 

plt.figure("Input") 
plt.subplot(221),plt.imshow(img, cmap = 'gray') 
plt.title('Image'), plt.xticks([]), plt.yticks([]) 

fft = np.log(np.abs(np.fft.fftshift(np.fft.fft2(img)))) 
plt.subplot(222),plt.imshow(fft, cmap = 'gray') 
plt.title('Fourier Transform'), plt.xticks([]), plt.yticks([]) 

r = 20 
h_Filter_Low_Pass = np.zeros(img.size, img.dtype).reshape(img.shape) 
for icounter in range(1, height): 
    for jcounter in range(1, width): 
     if ((icounter - height/2)**2 + (jcounter - width/2)**2) < r**2: 
      h_Filter_Low_Pass[icounter, jcounter] = 1 
plt.subplot(223),plt.imshow(h_Filter_Low_Pass, cmap = 'gray') 
plt.title('Filter'), plt.xticks([]), plt.yticks([]) 

h_fft = np.log(np.abs(np.fft.fftshift(np.fft.fft2(h_Filter_Low_Pass)))) 
plt.subplot(224),plt.imshow(h_fft, cmap = 'gray') 
plt.title('Fourier Transform (Filter)'), plt.xticks([]), plt.yticks([]) 


plt.figure("Output") 
g = fft * h_fft 
g_ifft = np.abs(np.fft.ifftshift(np.fft.ifft2(g)).real) 
plt.subplot(),plt.imshow(g_ifft, cmap = 'gray') 
plt.title(''), plt.xticks([]), plt.yticks([]) 
plt.show() 

次のコード

である私はあなたがローパスをしない、あなたのステップで enter image description here

答えて

0

を取得しています出力enter image description hereですが、マスクを使用して画像を畳み込みます。ローパスを行うために、手順は次のとおりです。

  1. 読み取り画像
  2. 画像のFFTを取得 - > F
  3. クレートはマスクとfを乗算
  4. をマスク - >グラム
  5. はの逆を取得しますg
+0

@MARK次に、未解決の質問を検索するときに人々が時間を費やすことがないように、問題を解決済みとしてマークします。 – yar