1

NAME
SYNOPSIS
INPUT PARAMETERS
OUTPUT PARAMETERS
DESCRIPTION
EXAMPLE
AUTHOR
AVAILABILITY
SEE ALSO

NAME

mkfftfilter - builds 2D frequency-domain filters

SYNOPSIS

transfer_function = mkfftfilter(image,filtername,frequency1[,frequency2])

INPUT PARAMETERS

image
A gray-level image.
filtername
a string, the name can be 'binary', 'butterworth1', 'butterworth2',
frequency1, frequency2
1st and 2nd cut-off frequencies which set the filter characteristics.

OUTPUT PARAMETERS

transfer_function
is a matrix with values between 0 and 1. These values can then be applied on the fft spectrum of an image.

DESCRIPTION

This function gives some popular filters to be applied on the spectrum (fft) of an image.
The Fourier Transform gives informations about which frequencies are present in a signal (=spectrum).
A great property of the spectrum is that the original image can be reconstructed from it. Of course, modifications in the spectrum will result in a modified image, but spectrum modifications can be easier and more intuitive.
A combination of several filters is possible.
All these filters are cylindrical and act only on amplitude (not on phase). The following filters are available (h is the trasfer function):
h=1/(1+(f/frequency1)^(2*n)) n=1,2 or 3 for 'butterworth1', 'butterworth2' or 'butterworth3'.
'exp': The exponential filter: h=exp(-(f/frequency1)^1);
The gaussian filter which is a particular case of the exponential: h=exp(-(f/frequency1)^2);
'trapeze': h=1 if f<=frequency1 h=-(f-frequency2)/(frequency2-frequency1) h=0 if f>=frequency2

EXAMPLE

stacksize(4e7); // increase the stack size because
                // images are very much memory consumming

image=gray_imread(SIPDIR+'images/ararauna.png');
xset("window",0);xbasc();imshow(image);
xtitle("Original Image");

IM=fft(image,-1);

//calculate the power spectrum
spectrum=real((IM).*conj(IM));
//for visualisation: the low frequencies are moved to the center of the image
//with sip_fftshift,
//the use of log(spectrum+1) allows to observe great amplitude variations.
xset("window",1);xbasc();imshow(sip_fftshift(log(spectrum+1)),[]);
xtitle("Power Spectrum");

//transfer function
h=mkfftfilter(image,'binary',20);
xset("window",2);xbasc();imshow(h);
xtitle("Transfer Function");

IM2=IM.*sip_fftshift(h);//spectrum modification

//reverse transform
im2=real(fft(IM2,1));
xset("window",3);xbasc();xselect();imshow(im2,[]);
xtitle("Low-pass binary filtering");

//High-pass filter
IM3=IM.*sip_fftshift(1-h);//spectrum modification with (1-h)
im3=real(fft(IM3,1));
xset("window",4);xbasc();xselect();imshow(im3,[]);
xtitle("High-pass binary filtering");

//Combination of 2 filters
h1=mkfftfilter(image,'binary',30);
h2=mkfftfilter(image,'binary',5);
h=h1-h2;
IM4=IM.*sip_fftshift(h);//spectrum modification
im4=real(fft(IM4,1));
xset("window",5);xbasc();xselect();imshow(im4,[]);
xtitle("Band-pass binary filtering");

AUTHOR

Jocelyn DRUEL <jocelyn.druel1@libertysurf.fr>

AVAILABILITY

The latest version of the Scilab Image Processing toolbox can be found at
http://siptoolbox.sourceforge.net

SEE ALSO

fft, gsm2d, imconv