Вы находитесь на странице: 1из 20

Discrete Fourier Transform

FFT and Its Applications


FFTSHIFT Shift zero-frequency component
to the center of spectrum. For vectors,
FFTSHIFT(X) swaps the left and right
halves of X. For matrices, FFTSHIFT(X)
swaps the first and third quadrants and the
second and fourth quadrants. For N-D
arrays, FFTSHIFT(X) swaps "half-spaces"
of X along each dimension.
Example of 1-D Fourier Transform
fftBox.m Plot Fourier Spectrum
%
% Script file: fftBox.m
% Fourier Spectrum Plot of Box function
%
X1=linspace(0,1,17);
Y1=ones(1,length(X1));
X2=linspace(1,16,241);
Y2=zeros(1,length(X2));
X=[X1 X2]; Y=[Y1 Y2];
W=abs(fftshift(fft(Y)));
subplot(2,1,1)
plot(X,Y,'r'); axis([0 16, 0,1.2]); title('Box function')
subplot(2,1,2)
plot(W,'b-');
title('Fourier Spectrum of Box function')
2-D Discrete Fourier Transform
Example of 2-D FFT Matlab Code

% Script file: fourier.m - 2D Fourier Transform


% Pictures on P.113 of Gonzalez, Woods, Eddins
m=128; n=128;
f=zeros(m,n);
f(56:71,48:79)=255;
F0=fft2(f); S0=abs(F0);
Fc=fftshift(fft2(f)); Sc=abs(Fc);
Fd=fft2(fftshift(f)); Sd=log(1+abs(Fc));
subplot(2,2,1)
imshow(f,[])
subplot(2,2,2)
imshow(S0,[])
subplot(2,2,3)
imshow(Sc,[ ])
subplot(2,2,4)
imshow(Sd,[ ])
2-D FFT with CenterShift
2-D FFT on Texture Images
Discrete Cosine Transform
Partition an image into nonoverlapping 8 by
8 blocks, and apply a 2d DCT on each blo
ck to get DC and AC coefficients.
Most of the high frequency coefficients beco
me insignificant, only the DC term and so
me low frequency AC coefficients are signi
ficant.
Fundamental for JPEG Image Compression
Discrete Cosine Transform (DCT)

X: a block of 8x8 pixels


A=Q8: 8x8 DCT matrix as
shown above
Y=AXAt
DCT on a 8x8 Block
Quantized DCT Coefficients
Matlab Code for 2d DCT
Q=xlsread('Qtable.xls','A2:H9');
fin=fopen('block8x8.txt','r');
fout=fopen('dctO.txt','w');
fgetl(fin); X=fscanf(fin,'%f',[8,8]); fclose(fin); X=X';
Y=dct2(X-128,[8,8]);
fprintf(fout,'DCT coefficients\n');
for i=1:8
for j=1:8 fprintf(fout,'%6.1f',Y(i,j)); end; fprintf(fout,'\n');
end
Y=Y./Q; % Y=fix(Y+0.5*(Y>0));
for i=1:8
for j=1:8
if (Y(i,j)>0) Y(i,j)=fix(Y(i,j)+0.5); else Y(i,j)=fix(Y(i,j)-0.5); end
end
end
fprintf(fout,'Quantized DCT coefficients\n');
for i=1:8
for j=1:8 fprintf(fout,'%4d',Y(i,j)); end; fprintf(fout,'\n');
end
fclose(fout);
DCT-Based JPEG Conversion

Input image write to file

shift 128 huffman encoding

DCT run-length encoding

convert 2D matrix to 1D array


round

quantize with quantize matrix


Standard Quantization Table

run-length encoding

:
-26,-3,0,,-1,-1,0,0,0,0.


JPEG Decoding
image result read compression file

shift 128 huffman decoding

IDCT run-length decoding

quantize with quantize matrix convert 1D array to 2D matrix





CameraMan Plusplus lena boats

49.3 KB 468 KB 257 KB 188 KB


( )
----------------- ----------------- ----------------- -----------------

zip ----------------- 42.5KB 111KB 219KB 137KB


(82.61%) (23.72%) (85.21%) (72.87%)

rar ----------------- 36.6KB 97.3KB 164KB 116KB


(74.24%) (20.79%) (63.81%) (61.7%)

jpg ----------------- 12.9KB 26.5KB 62.0KB 46.6KB


(26.17%) (5.662%) (24.12%) (24.79)

project ----------------- 11.2KB 9.48KB 28.1KB 24.3KB


(22.75%) (2.024%) (10.95%) (12.93%)

Вам также может понравиться