2016-10-05 8 views
0

私はpython 2.7でopencvを使用しています。OpenCV/Python:fft規模のカラーバー

  1. カラーマップは大きすぎます。それを縮小する方法は画像と同じ長さですか?
  2. どのように値の大きさ/範囲を説明しますか?

これは私のコードです:

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

img = cv2.imread('messi.jpg',0) 

dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT) 
dft_shift = np.fft.fftshift(dft) 

magnitude_spectrum = np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1])) 

plt.subplot(131),plt.imshow(img, cmap = 'gray') 
plt.title('Input Image'), plt.xticks([]), plt.yticks([]) 
plt.subplot(132),plt.imshow(magnitude_spectrum, cmap = 'gray'), plt.colorbar(cmap = 'gray') 
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([]) 
plt.show() 

enter image description here

答えて

0

私は解決策を見つけました。

colorbarのサイズを変更するには、fractionパラメータを使用し、対応する値はcolorbarです。 bejota's answerに感謝します。

マグニチュード値に関しては、マグニチュード画像の頂点が明るいほど、元のグレースケール画像の輝度のコントラストが大きくなることがわかりました。さまざまな画像を使って、以下のコードを試してみてください。

これは私の最終的なコードです:

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

img = cv2.imread('messi.jpg',0) 

dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT) 
dft_shift = np.fft.fftshift(dft) 

magnitude_spectrum = np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1])) 


plt.subplot(121),plt.imshow(img, cmap = 'gray') 
plt.title('Input Image'), plt.xticks([]), plt.yticks([]) 
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray'), plt.colorbar(cmap = 'gray',fraction=0.03, pad=0.04) 
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([]) 
plt.show() 

そして、これが結果です: enter image description here

+0

あなたが受け入れられた一人として、この答えをマークすることはできますか?ありがとう。 –

+0

@AhmedFasihはい、私はそれを行います。私自身の疑問に答えたので、もう一度それを受け入れるために待たなければなりません。 – zinon

関連する問題