Cơ bản về xử lý ảnh số
162
1
1
(2 /
)
(2 / )
0
0
( , )
( , )
M
N
j
M pm
j
N qn
m
n
F p q
f m n e
e
π
π
−
−
−
−
=
=
=
∑∑
(0
≤ p ≤ M-1, 0 ≤ q ≤ N-1) (11.2)
1
1
(2 /
)
(2 / )
0
0
1
( , )
( , )
M
N
j
M pm j
N qn
p
q
f m n
F p q e
e
MN
π
π
−
−
=
=
=
∑∑
(0
≤ m ≤ M-1, 0 ≤ n ≤ N-1) (11.3)
F(p,q) được gọi là các hệ số của biến đổi DFT. Trong MATLAB, các mảng và ma trận có chỉ
số bắt đầu từ 1, do đó phần tử F[1,1] sẽ ứng với hệ số F(0,0), phần tử F[2,2] ứng với F(1,1), ...
Các hàm MATLAB fft, fft2, fftn sẽ thực hiện các phép biến đổi Fourier rời rạc 1 chiều, 2
chiều và n chiều. Các hàm ifft, ifft2, ifftn thực hiện các phép biến đổi DFT ngược. Với các
ứng dụng xử lý ảnh, ta chỉ cần quan tâm đến các hàm fft2 và ifft2.
>> F = fft2(X,Mrows,Ncols)
>> X = ifft2(F,Mrows,Ncols)
trong đó,
Mrows x Ncols
là kích thước của biến đổi DFT. Nếu ảnh ban đầu có kích thước
nhỏ hơn thì MATLAB sẽ tự động thêm vào các zero pixel trước khi biến đổi.
Sau khi thực hiện biến đổi DFT bằng hàm fft2, thành phần DC của biến đổi sẽ nằm ở góc trên
bên trái của ảnh. Có thể dịch chuyển thành phần này về trung tâm bằng cách dùng hàm
fftshift
.
Ví dụ 11-8. Thực hiện phép biến đổi Fourier rời rạc cho một ảnh đơn giản:
f = zeros(30,30);
% Tạo một ảnh kích thước 30x30
f(5:24,13:17) = 1;
imshow(f,'notruesize') %
Hiển thị ảnh ban đầu
F = fft2(f);
% Biến đổi DFT với kích thước 30x30
F2 = log(abs(F));
imshow(F2,[-1 5],'notruesize');
colormap(jet); colorbar % Hiển thị ảnh biến đổi
F = fft2(f,256,256);
% Biến đổi DFT với kích thước 256x256
imshow(log(abs(F)),[-1 5]); colormap(jet); colorbar % Hiển thị ảnh
F2 = fftshift(F);
% Chuyển thành phần DC về trung tâm
imshow(log(abs(F2)),[-1 5]); colormap(jet); colorbar % Hiển thị ảnh
a)
Ảnh gốc b)
Biến đổi DFT 30x30 c) Biến đổi DFT 256x256 d) Sử dụng fftshift
Hình 11.14. Minh hoạ biến đổi DFT
Phép biến đổi Fourier có nhiều ứng dụng, chẳng hạn tìm đáp ứng tần số của các bộ lọc tuyến
tính, tính tích chập, tìm ảnh tương quan, ... Trong các chương sau, đọc giả có thể tìm thấy
nhiều ví dụ ứng dụng biến đổi này trong xử lý ánh.