数字图像处理实验(5):PROJECT 04-01 [Multiple Uses],Two-Dimensional Fast Fourier Transform
實驗要求:
Objective:
To further understand the well-known algorithm Fast Fourier Transform (FFT) and verify its effectiveness to calculate the discrete Fourier transform (DFT).
Main requirements:
Ability of programming with C, C++, or Matlab.
Instruction manual:
The purpose of this project is to develop a 2-D FFT program “package” that will be used in several other projects that follow. Your implementation must have the capabilities to:
(a) Multiply the input image by (-1)x+y to center the transform for filtering.
(b) Multiply the resulting (complex) array by a real function (in the sense that the the real coefficients multiply both the real and imaginary parts of the transforms). Recall that multiplication of two images is done on pairs of corresponding elements.
(c) Compute the inverse Fourier transform.
(d) Multiply the result by (-1)x+y and take the real part.
(e) Compute the spectrum.
Basically, this project implements Fig. 4.5. If you are using MATLAB, then your Fourier transform program will not be limited to images whose size are integer powers of 2. If you are implementing the program yourself, then the FFT routine you are using may be limited to integer powers of 2. In this case, you may need to zoom or shrink an image to the proper size by using the program you developed in Project 02-04.
An approximation: To simplify this and the following projects (with the exception of Project 04-05), you may ignore image padding (Section 4.6.3). Although your results will not be strictly correct, significant simplifications will be gained not only in image sizes, but also in the need for cropping the final result. The principles will not be affected by this approximation.
實驗要求我們編寫程序實現2維圖像的快速傅里葉變換,并運用于頻率域濾波。
簡要介紹一下頻率域濾波的步驟:
上程序:
%% close all; clc; clear all;%% % 讀取圖像 img = imread('gray_image.jpg'); figure(1) imshow(img); title('original A');% 得到填充參數P和Q [M, N] = size(img); P = 2 * M; Q = 2 * N;img = double(img); % 添加必要數量的0 img_fp = zeros(P, Q); img_fp(1:M, 1:N) = img(1:M, 1:N);figure(2); imshow(img_fp, []); title('image B');% 用(-1)^(x+y)乘以圖像的結果 for x = 1:Pfor y = 1:Qimg_fp(x, y) = img_fp(x, y) .* (-1)^(x+y);end end% figure(3); % imshow(img_fp, []); % title('image C');% 對圖像做快速傅里葉變換 img_Fp = fft2(img_fp);% figure(4); % imshow(img_Fp, []); % title('image D');% H = ones(P, Q); % H(P/2, Q/2) = 0;% H = zeros(P, Q); % H(P/2, Q/2) = 1; % H(P/2 - 1, Q/2 - 1) = 1;r = 30; H = ones(P, Q); for x = 1:Pfor y = 1:Qd = sqrt((x-M)^2 + (y-N)^2);if d > rH(x, y) = 0;elseH(x, y) = 1;end% if x == P/2 && y == Q/2 % H(x, y) = 1; % else % H(x, y) = 1; % endend endfigure(5); imshow(H, []); title('image E');img_G = img_Fp .* H;% figure(6); % imshow(img_G, []); % title('image F');img_g = ifft2(img_G); img_g = real(img_g);for x = 1:Pfor y = 1:Qimg_g(x, y) = img_g(x, y) .* (-1)^(x+y);end end% figure(7); % imshow(img_g, []); % title('image G');img_o = img_g(1:M, 1:N);figure(8); imshow(img_o, []); title('result H');imwrite(img_o, 'result.jpg');實驗結果:
上圖是原圖像;
上圖是步驟1和2,擴展后的圖像fp(x,y);
上圖是濾波器函數H(u,v),中心一個圓內為1,圓外都是0,表示一個低通濾波器;
上圖是逆DFT計算得到的gp(x,y);
上圖為最終的結果,從gp(x,y)提取出的g(x,y)圖像;
明顯得,可以發現,低通濾波器使原圖像變得模糊了。
總結
以上是生活随笔為你收集整理的数字图像处理实验(5):PROJECT 04-01 [Multiple Uses],Two-Dimensional Fast Fourier Transform的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杭电ACM刷题(1):1002,A +
- 下一篇: 数字图像处理实验(6):PROJECT