Professional Documents
Culture Documents
BÁO CÁO
GVHD:
ThS.Nguyễn Duy Thảo [ngduythao76@gmail.com]
LỚP:
IMPR432463 - Nhóm 10 – Thứ 3 tiết 13-15
SVTH:
Nguyễn Đức Ngọc Cảnh [17119059@student.hcmute.edu.vn]
Nguyễn Văn Sỹ [17119099@student.hcmute.edu.vn]
Trần Nguyễn Thanh Duy [17119064@student.hcmute.edu.vn]
Cho là một hàm liên tục với biến có chu kỳ được biểu diễn dưới dạng
là tổng của các hàm sine và cosine với các hệ số xấp xỉ. Và tổng này, được biết
như là chuỗi Fourier có dạng như sau:
(1.1)
với
(1.2)
là các hệ số. Thật sự biểu thức (1.1) là dạng triển khai của hàm sine và cosine theo
như trong công thức Euler
Trong xử lý tín hiệu, xung đơn vị được định nghĩa như sau:
(1.3)
và có đáp ứng
(1.4)
Xung đơn vị chỉ có thể được quan sát tại thời điểm với biên độ vô cực,
do đó, nó có đặc trưng chọn lọc thông tin với tích phân như sau:
(1.5)
Biểu thức (1.5) chỉ đơn giản giữ lại thành phần tại thời điểm . Từ
đây, việc trích xuất thành phần tín hiệu tại thời điểm chỉ đơn giản thay đổi
vị trí của xung đơn vị . Trong trường hợp này, với đặc trưng chọn lọc:
1
(1.6)
Ví dụ, nếu hàm , sử dụng xung đơn vị trong biểu thức (1.6) sẽ
cho kết quả .
kỳ điểm
nào mà
(1.7)
Từ đó, biểu thức (1.6) tương ứng dưới dạng rời rạc được viết lại như sau:
(1.8)
Với một hàm liên tục trên miền thời gian, biểu thức biến đổi Fourier
được viết gọn như sau:
(1.9)
Sử dụng công thức Euler, ta có
(1.10)
Ngược lại, cho , hàm đạt được bằng phép biến đổi ngược
2
Fourier:
(1.11)
Nếu là thực thì biến đổi Fourier của nó có dạng phức. Do chỉ còn mỗi
biến tần số tồn tại sau khi tích phân nên thông thường người ta còn gọi biến đổi
Fourier là biến đổi tần số.
Xem như đã biết, tích chập hai tín hiệu được viết theo sau:
(1.12)
Khi đó biến đổi Fourier của tích chập hai tín hiệu có dạng:
(1.13)
Có thể thấy biến đổi Fourier của tích chập hai tín hiệu là tích của Fourier
của hai tín hiệu riêng lẻ. Hay nói cách khác, và là một cặp biến
đổi Fourier. Kết quả này là một phần lý thuyết tích chập và có thể được viết như
sau:
(1.14a)
Cần lưu ý vế phải đạt được bằng phép biến đổi Fourier vế trái, trong khi đó,
vế trái cũng thu được bằng phép biến đổi Fourier ngược vế phải. Phần còn lại của
lý thuyết tích chập có thể được biểu diễn dưới dạng biểu thức sau:
(1.14b)
Gọi là hàm liên tục được lấy mẫu với khoảng đồng nhất, biến đổi
Fourier của có dạng
3
(1.15)
Trong đó . Thế vào (1.15), ta có
(1.16)
Mặc dù là hàm rời rạc nhưng Fourier của nó là liên tục và tuần hoàn
với chu kỳ . Và vì thế chỉ cần xét đặc trưng trong một chu kỳ.
(1.17)
(1.18)
Đây là dạng mở rộng của biến đổi Fourier rời rạc, trong đó gồm mẫu
được lấy từ hàm liên tục . Do đó, kết quả của biến đổi Fourier rời rạc, tập ,
cũng gồm giá trị rời rạc dạng phức. Một cách ngược lại, chúng ta hoàn toàn có
thể thu được tập mẫu với phép biến đổi Fourier rời rạc.
(1.19)
Trong môi trường đa chiều, cụ thể là 2 chiều đối với ảnh số, thì hàm biến đổi
Fourier phải thỏa mãn hai biến số tương ứng với chiều ngang và dọc của ảnh. Cụ
thể, biến đổi Fourier rời rạc 2-D được thực hiện theo biểu thức sau:
(1.20)
4
Với là ảnh số có kích thước . Như ở dạng 1-D, biểu thức (1.20)
thỏa mãn toàn bộ các biến và trong khoảng và
. Từ dạng Fourier , chúng ta thu được hàm bằng
hàm biến đổi ngược Fourier rời rạc:
(1.21)
(1.22)
Góc pha của của biến đổi được xác định như sau:
(1.23)
Hai hàm này có thể được sử dụng để biểu diễn dưới dạng hệ tọa độc
cực thông thường cho một đại lượng:
(1.24)
Phổ công suất được định nghĩa như là bình phương của độ lớn
5
(1.25)
6
2. THỰC HÀNH
Dựa trên công thức (1.20), biến đổi Fourier rời rạc theo thời gian có
thể được thực hiện thông qua các phép tính thông thường. Thực hiện project thông
qua python với một hình cụ thể để hiểu rõ hơn về phương pháp tính biến đổi
Fourier.
import cv2
import numpy as np
import matplotlib.pyplot as plt
img_c1 = cv2.imread("tt.tif", 0)
img_c2 = np.fft.fft2(img_c1)
img_c3 = np.fft.fftshift(img_c2)
plt.show()
Biến đổi DFT và biển đổi ngược DFT được thực hiện bằng phương pháp sử
dụng thuật toán biến đổi nhanh Fourier FFT, nó có sẵn hàm fft trong toolbox.
Hàm này sẽ trả về biến đổi Fourier cũng với kích thước M x N, khi đó, gốc tọa độ
nằm ở góc trên bên trái của ma trận và chu kỳ kết thúc tại trung tâm của hình chữ
nhật tần số.
Hàm abs tính biên độ (căn bậc hai của tổng bình phương phần thực và ảo của
từng phần tử trong mảng. Hình 2.2 trình bày phổ Fourier, trong đó, các điểm sáng
7
tại các góc có biên độ lớn nhất tương ứng với 4 góc phần tư của 4 chu kỳ tiếp giáp
nhau.
8
Phân tích phổ bằng cách biểu diễn nó như một ảnh độc lập được xem là một
khía cạnh quan trọng trong miền tần số. Hàm fftshift trong Toolbox được sử dụng
để chuyển gốc tọa độ của biến đổi đến trung tâm của hình chữ nhật.
Với img_c2 là biến đổi Fourier đã được tính toán bằng hàm fft2 và img_c3 là
biến đổi trung tâm. Hàm fftshift thực hiện hoán đổi các gốc phần tư của img_c2
như trong hình 2.3, khi đó, việc tái sắp xếp các góc phần tư này làm cho các điểm
sáng đều được đặt tại vị trí trung tâm và cho phép hiển thị trọn vẹn một chu kỳ
hoàn chỉnh.
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('tt.jpg',0)
9
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))
plt.show()
Hiển thị phổ ở câu b) này thì trong câu a) cũng đã làm rồi, nên trong câu b) ta
tăng cường biểu diễn lên bằng hàm log.
Trước tiên, chúng ta sẽ xem cách tìm Fourier Transform bằng Numpy.
Numpy có một gói FFT để thực hiện việc này. np.fft.fft2() cung cấp cho chúng ta
phép biến đổi tần số sẽ là một mảng phức tạp. Đối số đầu tiên của nó là hình ảnh
đầu vào, có thang độ xám. Đối số thứ hai là tùy chọn quyết định kích thước của
mảng đầu ra. Nếu nó lớn hơn kích thước của hình ảnh đầu vào, hình ảnh đầu vào
sẽ được đệm bằng các số 0 trước khi tính FFT. Nếu nó nhỏ hơn hình ảnh đầu vào,
hình ảnh đầu vào sẽ bị cắt. Nếu không có đối số nào được truyền, kích thước
mảng đầu ra sẽ giống với đầu vào.
Bây giờ khi bạn nhận được kết quả, thành phần tần số 0 (thành phần DC) sẽ
nằm ở góc trên cùng bên trái. Nếu bạn muốn đưa nó vào trung tâm, bạn cần phải
dịch chuyển kết quả theo cả hai hướng. Điều này đơn giản được thực hiện bởi hàm
np.fft.fftshift().
10
Hình 2.4 Phổ Fourier của ảnh
import cv2
import numpy
myimg = cv2.imread("tt.tif", 0)
avg_per_row = numpy.average(myimg, axis=0)
avg = numpy.average(avg _per_row, axis=0)
print(avg)
Kết quả nhận được từ đoạn chương trình trên = 207.3146992462142
11