ということで、ハイパスフィルターを作ってみました。
function test2() [img, _, _] = imread("~/programming/octave/fft/test1a.png"); [H, _, _] = imread("~/programming/octave/fft/filter.png"); F = fft2(img); for i = 1:512 for j = 1:512 F(i, j) = H(i, j) * F(i, j); end end T = ifft2(F); T = abs(T); T = T / max(max(T)) * 255; T = uint8(T); imwrite(T, "~/programming/octave/fft/test1b.png"); endfunction
いまいちうまく書けてないです。特に二重でforループまわしているところは遅いです。うまい書き方あったら教えてください。
画像は以下を使用。
で、以下がフィルタ。どうもフィルタの形が重要なようで四隅を切り取ったような感じにしないとうまくフィルタリングができませんでした。真ん中の部分が高周波だからといって、単純に真ん中に円を書いてそこだけ通過させるようなものを書いてもうまくいきませんでした。このあたりは理由がよく分かっていないので勉強が必要です。
そして、ハイパスフィルターをかけた画像が以下!
おおっ。。ちょっと感動しました。
ついでに前回つくったgrayscaleの画像もハイパスってみました。白黒反転した方がよさそうかな。それは次回のテーマということで。
0 件のコメント:
コメントを投稿