Page List

Search on the blog

2013年6月8日土曜日

Octaveで画像処理(2)

Octave使うと、FFTが簡単に使えます。もちろん二次元配列に対するFFTも簡単にできます。
ということで、ハイパスフィルターを作ってみました。
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 件のコメント:

コメントを投稿