こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MATLABで二次元フーリエ変換

画像処理のプログラムを作成しています。参考にしている参考書は【最新MATLABハンドブック】という本です。この本を参考にして、一次元フーリエ変換のプログラムから画像処理の二次元フーリエ変換のプログラムに変更させたいのですが、fft2のところでエラーが出てしまいます。自分なりにプログラムを書き直してみたのですが、fft→fft2に関数変更する以外にもっと根本的なことが必要なのでしょうか?

作成したプログラムはこれです。
clear;close all;n=256;dt=0.005;
t=((1:n)-1)*dt;
f=t/dt/dt/n;n2=n/2;n2p1=n2+1;
X=imread('001.bmp');
X=rgb2gray(X);
X=double(X);
[m,n]=size(X);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%calc corresponding index number
F=50;
index=round(F*dt*n+1);index1=(index-1):(index+1);
index2=n+2-index1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%band elminate filter
befil=ones(size(X));
befil(index1)=zeros(size(index1));
befil(index2)=zeros(size(index2));
Y=fft2(X);    ←ここでエラーが出ます。
subplot(2,2,1)
plot(f,abs(Y)/n2,'r');axis([0 f(n2p1) 0 1])
xlabel('Frequency (Hz)'),ylabel('Magnitude');
title('Original Signal in freq domain');
%%Now apply fft filter in freq domain
fftX=fftX.*befil;
subplot(2,2,3)
plot(f,abs(Y)/n2,'r');axis([0 f(n2p1) 0 1])
xlabel('Frequency (Hz)'),ylabel('Magnitude');
title('filtered Signal in freq domain');
subplot(2,2,2)
imaagesc(X),colormap(gray),axis tight;
subplot(2,2,4)
imagesc(real(ifft2(Y))),colormap(gray),axis tight;

画像の一部分の情報のみを欠落させたいのです。そのためにはバンドエルミネーションフィルタと思ったのですが…もし違うようならご指摘をお願いします。ちなみに001.bmpはカラー画像です。

投稿日時 - 2007-06-28 12:56:36

QNo.3122606

困ってます

質問者が選んだベストアンサー

これの可能性が高いと思います。
http://www.cybernet.co.jp/matlab/support/techkwdb/search_view.php?id=1560
そこに書いてあるように、
which fft2
とかしてどのmファイルが実行されているか調べてください。
もしくは、
edit fft2
として、20行目を見てみてください。

投稿日時 - 2007-06-30 00:10:32

お礼

解決しました!
ありがとうございます。
実に簡単なことに、ファイル名をfft2にしていたことが問題でした。

投稿日時 - 2007-07-02 08:05:59

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

なんでエラーなのかエラーメッセージがでると思いますが。

投稿日時 - 2007-06-28 23:09:53

補足

エラーメッセージは

??? Attempt to execute SCRIPT fft2 as a function.

エラー ==> fft2 at 20
Y=fft2(X);

と出ます。
なんでエラーなのか詳しいことまでは,この文では分かりかねます…。

投稿日時 - 2007-06-29 14:21:30

あなたにオススメの質問