アプリ版:「スタンプのみでお礼する」機能のリリースについて

画像処理のプログラムを作成しています。参考にしている参考書は【最新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はカラー画像です。

A 回答 (2件)

これの可能性が高いと思います。


http://www.cybernet.co.jp/matlab/support/techkwd …
そこに書いてあるように、
which fft2
とかしてどのmファイルが実行されているか調べてください。
もしくは、
edit fft2
として、20行目を見てみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/02 08:05

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

この回答への補足

エラーメッセージは

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

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

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

補足日時:2007/06/29 14:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!