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はカラー画像です。