2019年7月3日 更新

ディジタル画像処理~pythonによる空間フィルタリングpart2~ 

今回はフーリエ変換を用いた周波数領域でのフィルタリングをpythonで行ってみました。

51,075 view お気に入り 2
ローパスフィルタをかけたimg01.png

ローパスフィルタをかけたimg01.png

上絵のようにローパスフィルタをかけた画像を得ることができました。先述通り、平滑化されてぼんやりとした画像が得られます。これらのコードを図式化すると下絵のようになります。

 (5618)

2. ハイパスフィルタ

次にハイパスフィルタをかけていきます。ローパスフィルタと同様にフーリエ変換した画像にデザインしたフィルタをかけます。フーリエ変換までの過程は省略して、フィルタの設計から書きます。

size = gray.shape
mask = np.zeros(size)
length = size[0]
centery = size[0]/2
R = 10
for x in range(0,length):
    for y in range(0,length):
        if (x- centery)**2 +(y- centery)**2 >R**2:
            mask[x,y]=1
Design filter.py

これをフーリエ変換した先ほどの画像にかけていきます。

img_fft2_mask = img_fft2*mask
img_fft2_mask= np.fft.fftshift(img_fft2_mask) 
ifimage = np.fft.ifft2(img_fft2_mask) 
ifimage = ifimage.real
Image.fromarray(np.uint8(ifimage)).show()
Apply filter.py

これによって、ハイパスフィルタをかけた画像を得ることができます。

ハイパスフィルタをかけたimg01.png

ハイパスフィルタをかけたimg01.png

先述通り、エッジを抽出したような画像を得ることができました。この流れを図式化すると下絵のようになります。

ハイパスフィルタをかける流れ

ハイパスフィルタをかける流れ

円の直径を変えたり、円の内部、外部でかける数字を変えたりすることで様々なフィルタを作り出すことができます。皆さんもぜひ、周波数領域のフィルタリングで遊んでみてください。

43 件

関連する記事 こんな記事も人気です♪

この記事のキュレーター

亀谷 桃子 亀谷 桃子