Với x = 0,1,2, ,M-1 và y = 0,1,2, .N-1. Vì vậy, cho F(u,v), chúng ta có thể thu được f(x,y) trở lại bằng biến đổi ngược DFT. Giá trị của F(u,v) trong phương trình này đôi khi được suy ra như hệ số của khai triển Fourier.
Trong một vài công thức của DFT, 1/MN đứng trước phép biến đổi và trong một số khác nó nằm ở phép biến đổi ngược. Để thống nhất việc cài đặt trong Matlab của biến đổi Fourier, chúng ta có thể giả sử trong suốt cuốn sách này 1/MN đứng trước phép biến đổi ngược như đã nêu trong phươn trình. Bởi vì dãy chỉ số bắt đầu trong Matlab bắt đầu ở 1, không phải là 0, F(1,1) và f(1,1) trong Matlab tương ứng với giá trị toán học F(0,0) và f(0,0) trong biến đổi và biến đổi ngược của nó.
Giá trị của biến đổi tại gốc tọa độ của miền tần số [ví dụ F[0,0]] được gọi là thành phần dc của thành phần biến đổi Fourier. Thuật ngữ này xuất phát từ khoa học điện tử, trong đó ‘dc’ ký hiệu cho ‘direct current’ (hiện tại của tần số 0). Chúng ta có thể dễ dàng chứng minh rằng F(0,0) bằng MN lần giá trị trung bình của f(x,y).
Ngay cả khi f(x,y) là số thực, thì biến đổi của nó trong dạng tổng quát vẫn là số phức. Phương pháp chính của việc phân tích là tính toán phổ của nó [ ví dụ độ lớn của F(u,v)] và biểu diễn nó như là một ảnh. Đặt R(u,v) và I(u,v) biểu diễn thành phần thực và ảo của F(u,v), phổ Fourier được định nghĩa như sau :
33 trang |
Chia sẻ: maiphuongtl | Lượt xem: 3003 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Đề tài Biến hình xử lý ảnh - Ghép hình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Báo cáo cuối kỳ
Môn: Biến hình và xử lý ảnh.
Giảng viên: thạc sĩ Phạm Thế Bảo.
Tên đề tài: Ghép hình
Nhóm sinh viên thực hiện:
Huỳnh Nguyễn Duy Nhân Mssv: 0511027
Nguyễn Quang Thái Mssv: 0511323
1.Cơ sở lý thuyết:
Xử lý ảnh trong miền tần số
1.1 Biến đổi Fourier 2 chiều rời rạc :
Đặt f(x,y) ký hiệu cho ảnh M*N với x = 0,1,2,…,M-1 và y = 0,1,2,…,N-1.Trong không gian hai chiều , biến đổi Fourier rời rạc (DFT) của f , ký hiệu bởi F(u,v) , được cho bởi phương trình sau:
Cho u = 0,1,2,…M-1 và v = 0,1,2,..,N-1. Chúng ta có thể mở rộng hàm mũ thành dạng sin hay cosine với biến u và v trong việc xác định tần số của nó (x và y được tính tổng). Miền tần số đơn giản là hệ tọa độ được dựa theo F(u,v) với u và v là các biến tần số. Nó tương tự như là miền không gian trong chương trước, theo đó hệ tọa độ được dựa theo f(x,y) với x, y là biến không gian. Vùng hình chữ nhật M*N đươc định nghĩa bởi u= 0,1,2,……,M-1 và v = 0,1,2,……,N-1 thường được xem như là hình chữ nhật tần số. Rõ ràng hơn, hình chữ nhật tần số cùng kích thước với ảnh đầu vào.
Đảo lại, biến đổi Fourier rời rạc cho bởi:
Với x = 0,1,2,……,M-1 và y = 0,1,2,…….N-1. Vì vậy, cho F(u,v), chúng ta có thể thu được f(x,y) trở lại bằng biến đổi ngược DFT. Giá trị của F(u,v) trong phương trình này đôi khi được suy ra như hệ số của khai triển Fourier.
Trong một vài công thức của DFT, 1/MN đứng trước phép biến đổi và trong một số khác nó nằm ở phép biến đổi ngược. Để thống nhất việc cài đặt trong Matlab của biến đổi Fourier, chúng ta có thể giả sử trong suốt cuốn sách này 1/MN đứng trước phép biến đổi ngược như đã nêu trong phươn trình. Bởi vì dãy chỉ số bắt đầu trong Matlab bắt đầu ở 1, không phải là 0, F(1,1) và f(1,1) trong Matlab tương ứng với giá trị toán học F(0,0) và f(0,0) trong biến đổi và biến đổi ngược của nó.
Giá trị của biến đổi tại gốc tọa độ của miền tần số [ví dụ F[0,0]] được gọi là thành phần dc của thành phần biến đổi Fourier. Thuật ngữ này xuất phát từ khoa học điện tử, trong đó ‘dc’ ký hiệu cho ‘direct current’ (hiện tại của tần số 0). Chúng ta có thể dễ dàng chứng minh rằng F(0,0) bằng MN lần giá trị trung bình của f(x,y).
Ngay cả khi f(x,y) là số thực, thì biến đổi của nó trong dạng tổng quát vẫn là số phức. Phương pháp chính của việc phân tích là tính toán phổ của nó [ ví dụ độ lớn của F(u,v)] và biểu diễn nó như là một ảnh. Đặt R(u,v) và I(u,v) biểu diễn thành phần thực và ảo của F(u,v), phổ Fourier được định nghĩa như sau :
Góc pha của biến đổi được định nghĩa là :
Hai hàm có trước dùng để biểu diễn F(u,v) trong mối liên quan biểu diên cực của giá trị số phức :
Năng lượng phổ được định nghĩa như là hình vuông của độ lớn :
Để dễ hình dung chúng ta có thể chọn một trong hai cách biểu diễn là |F(u,v)| hay P(u,v).
Nếu f(x,y) là số thực, biến đổi Fourier là đối xứng liên hợp qua gốc tọc độ :
Điêu này cũng có nghĩa là phổ Fourier cũng đối xứng qua gốc tọa độ :
Chúng ta cũng có thể kiểm chứng rằng :
Nói cách khác, DFT là vô hạn tuần hoàn theo cả u và v, với chu kỳ xác định trước bởi M và N. Tuần hoàn cũng là một đặc trưng của biến đổi ngược DFT :
Có nghĩa là môt ảnh thu được bởi phép biến đổi ngược Fourier cũng vô hạn tuần hoàn. Điều này có thể gây ra nhầm lân vì không phải ảnh nào thu được từ biến đổi fourier cũng đều tuần hoàn. Chúng ta có thể hiểu nó đon thuần là một tính chất toán học của DFT và phép biến đổi ngược của nó. Chúng ta cũng nên nhớ rằng cài đặt tính toán của DFT chỉ tính trên một chu kỳ, vì vậy chúng ta làm việc với kích thước MN.
Hàm tuần hoàn rất quan trọng khi chúng ta xem xét dữ liệu DFT liên quan đến chu kỳ biến đổi như thế nào. Ví dụ, hình 1.1(a) biểu diễn phổ của biến đổi một chiều, F(u). Trong trường hợp này, biểu thức tuần hoàn F(u) = F(u+M), từ đó ta có |F(u)| = |F(u+M)|. Đồng thời do tính đối xứng nên |F(u)| = |F(-u)|. Tính chất tuần hoàn chỉ ra rằng F(u) có chu kỳ chiều dài M, và tính đối xứng chỉ ra rằng độ lớn của biến đổi được trung tâm hóa tại gốc tọa độ, như trong hình 1.1(a).
Hình 1.1 :
(a) Phổ Fourier minh họa mỗi nửa chu kỳ trong khoảng [0, M-1].
(b) Trung tâm của phổ trong cùng một khoảng thu được bằng việc nhân f(x) và (-1)x trước khi tính toán biến đổi Fourier.
Hình này và những lời chú thích trước đó minh họa rằng độ lớn của biến đổi giá trị từ M/2 tới M-1 là sự lăp lại của giá trị trong một nửa chu kỳ bên trái gốc tọa độ. Bởi vì biến đổi DFT một chiều chỉ được cài đặt cho M điểm (ví dụ cho giá trị của u trong khoảng [0, M-1]), nên nó tính toán theo biến đổi một chiều của mỗi nửa chu kỳ trong khoảng [0, M-1]. Không khó để chứng minh rằng một chu kỳ thích hợp là chu kỳ thu được bằng việc nhân f(x) với (-1)x trước khi tính toán biến đổi. Nó có tác dụng chuyển gốc tọa độ của biến đổi tới điểm u = M/2, như hình 1.1(b). Bây giờ giá trị của phổ tại u = 0 trong hình 1.1(b) tương ứng với |F(-M/2)| trong hình 1.1(a). Tương tự giá trị tại |F(M/2)| và |F(M-1)| trong hình 1.1(b) tương ứng với |F(0)| và |F(M/2-1)| trong hình 1.1(a).
Điều này củng xảy ra tương tự trong hàm biến đổi hai chiều. Tính toán biến đổi DFT hai chiều bây giờ tương ứng với điểm biến đổi trong khoảng hình chữ nhật như trong hình 1.2(a), vùng hình chữ nhật đổ bóng chỉ giá trị của F(u,v) thu được bằng cài đặt của phương trình biến đổi Fourier hai chiều được định nghĩa trong phần đầu tiên của chương này. Vùng hình chữ nhật đứt nét là sự lặp lại, giống như hình 1.1(a). Phân tích một cách trực quan ta thấy rằng đó chính là sự di chuyển phổ từ gốc tọa độ đến trung tâm của vùng tần số. Việc này được thực hiện bằng cách nhân f(x,y) với (-1)x+y trước khi tính toán biến đổi Fourier hai chiều. Chu kỳ khi ấy sẽ được biểu diễn rõ ràng hơn như trong hình 1.2(b). Như đã bàn luận ở phần trước cho hàm 1 chiều, giá trị của phổ tại (M/2, N/2) trong hình 1.2(b) là cùng giá trị với phổ tại (0,0) trong hình 1.2(a), và giá trị tại (0,0) trong hình 1.2(b) thì cùng giá trị với giá trị tại (-M/2, - N/2) trong hình 1.2(a). Tương tự, giá trị tại (M-1, N-1) trong hình 1.2(b) là cùng giá trị với giá trị tại (M/2-1, N/2-1) trong hình 1.2(a).
Hình 1.2 (a) M*N phổ Fourier (phần đổ bóng), chỉ ra mỗi ¼ chu kỳ chứa trong phổ dữ liệu. (b) Phổ thu được bằng việc nhân f(x,y) với (-1)x+y trước khi tính toán biến đổi Fourier. Chỉ có một chu kỳ được biểu diễn đổ bóng. bởi vì đây là dữ liệu sẽ thu được bằng việc cài đặt của phương trình cho F(u,v).
Những bàn luận ở phần trên trong việc trung tâm hóa bằng cách nhân f(x,y) và (-1)x+y là một khái niệm quan trọng. Khi làm việc trong MATLAB, tính toán không bao gồm việc nhân (-1)x+y và sau đó sắp xếp dữ liệu lại bằng hàm fftshift. Hàm này và cách sử dụng nó sẽ được bàn trong phần kế tiếp.
1.2 Tính toán và hình dung biến đổi DFT hai chiều trong MATLAB:
Biến đổi DFT và biến đổi ngược của nó thu được trong thực nghiệm bằng thuật toán biến đổi Fourier nhanh (FFT). FFT của ảnh kích thước M*N f thu được trong hộp công cụ với hàm fft2 với cú pháp như sau:
F = fft2(f).
Hàm này trả về biến đổi fourier cũng có kích thước M*N, với dữ liệu được sắp xếp như trong hình 1.2(a); đó là bởi vì gốc tọa độ được đặt ở góc trên bên trái, và với 4 góc phần tư gặp nhau tại tâm của vùng tần số.
Như giải thích trong phần 1.3.1, sẽ cần thiết khi ảnh đầu vào được thêm vào những số 0 khi biến đổi Fourier được sử dụng như hàm lọc. Trong trường hợp này, cú pháp trở thành
F = fft2(f, P, Q)
Với cú pháp này, fft2 thêm vào đầu vào những số 0 được yêu cầu để hàm kết quả có kích thước P*Q.
Phổ Fourier thu được bằng cách sử dụng hàm abs:
S = abs(F)
Hàm tính toán độ lớn (căn bậc hai của tổng bình phương phần thực và phần ảo) của mỗi phần tử trong mảng.
Phân tích trực quan của phổ bẳng việc biểu diễn nó như ảnh là một khía cạnh quan trọng trong miền tần số. Như minh họa xem như chúng ta có ảnh mẫu f, trong hình 1.3(a). Chúng ta tính toán biển đổi Fourier của nó và biểu diễn phổ theo những bước sau:
>> F = fft2(f);
>> S= abs(F);
>> imshow(S, [ ])
Hình 1.3(b) minh họa kết quả. 4 điểm sáng màu trắng trong góc của ảnh là bởi vì tính chất đã được đề cập trong phần trước.
Hàm fftshift có thể sử dụng để di chuyển gốc tọa độ của biến đổi tới trung tâm của vùng tần số. Cú pháp như sau:
Fc = fftshift(F)
Trong đó F là biến đổi fft2 và Fc là biến đổi trung tâm hóa. Hàm fftshift thực thi bằng việc trao đổi các góc phần tư của F. Ví dụ, nếu a = [1 2;3 4], fftshift(a) = [4 3; 2 1]. Khi áp dụng biến đổi này sau tính toán fft2 thì kết quả cho ra cũng giống như nhân (-1)x+y trước khi tính toán. Tuy nhiên điều đó không có nghĩa là hai biến đổi này có thể thay thế lẫn nhau. Cụ thể hơn, nếu ta ký hiệu F là biến đổi fourier thì F[(-1)x+yf(x,y)] bằng fftshift(fft2(t)) nhưng lại không bằng fft2(fftshift(f)).
Trong ví dụ hiện tại chúng ta thêm:
>> Fc = fftshift(F);
>> imshow(abs(Fc),[ ]).
Tương ứng với ảnh 1.3(c). Kết quả của việc trọng tâm hóa được minh chứng trong ảnh này
Mặc dầu sự chuyển đổi được hoàn thành như mong muốn, nhưng sự sắp xếp động của giá trị trong phổ thì quá lớn (0 tới 24000) trội hơn so với 8 bit biểu diễn giá trị độ sáng. Như đã bàn luận trong mụch 3.2.2, khó khăn này có thể giải quyết bằng biến đổi log. Ta thực hiện những câu lệnh sau:
>> S2 = log(1+abs(Fc));
>> imshow(S2, [ ])
Kết quả trong hình 1.3(d).Sự gia tăng những chi tiết nhìn thấy được được minh chứng trong ảnh.
Hình 1.3
a b
c d
(a) Ảnh đơn giản
(b) Phổ fourier
(c) Trung tâm hóa phổ
(d) Phổ dễ nhìn hơn thông qua biến đổi log.
Hàm ifftshift nghịch đảo lại việc trông tâm hóa. Cú pháp là:
F = ifftshift(Fc)
Hàm này chuyển đổi một hàm có trung tâm tại tâm hình chữ nhật thành một hàm có trung tâm tại góc trên bên trái hình chữ nhật. Chúng ta sẽ sử dụng tính chất này trong mụch 1.4.
Chúng ta nên nhớ rằng trung tâm của miền tần số là tại (M/2,N/2) nếu biến u và v chạy từ 0 đến M-1 và N-1. Ví dụ, tâm của miền tần số có kích thước 8*8 là tại điểm (4,4), chính xác là điểm thứ 5 dọc theo trục tọa độ tính từ (0,0). Trong MATLAB khi biến chạy từ 1 tới M và 1 tới N thì trọng tâm nằm tại [M/2 +1, N/2 +1]. Trong trường hợp này trung tâm của chúng ta nằm tại điểm (5,5), tính từ (1,1).
Nếu M, N là lẻ, trung tâm trong MATLAB được tính bằng cách làm tròn M/2, N/2 tới số nguyên gần nhất nhỏ hơn nó. Phần còn lại giống như những phân tích trong phần trên. Ví dụ, trung tâm của vùng 7*7 là (3,3) nếu tính từ (0,0) và (4,4) nếu tính từ (1,1). Trong cả hai trường hợp trên, trung tâm là điểm thứ 4 tại gốc tọa độ. Nếu chỉ một chiều là lẻ thì tọa độ trung tâm theo chiều ấy cũng đượclàm tròn tương tự. Sử dụng hàm floor trong MATLAB (nhớ rằng gốc tọa độ đặt tại (1,1)), trung tâm của miền tần số được tính như sau :
[floor(M/2) +1, floor(N/2) +1]
Trung tâm tính theo biểu thức này được dùng cho cả giá trị chẵn và lẻ của M, N.
Cuối cùng, chúng ta cần biết rằng biến đổi ngược Fourier được tính toán dựa theo hàm ifft2, có cú pháp:
>> f = ifft2(F)
Trong đó F là biến đổi Fourier của f là ảnh kết quả. Nếu F là số thực thì kết quả cũng là số thực. Tuy nhiên trong thực nghiệm thì đầu ra của ifft2 thường có phần ảo rất nhỏ (nhờ phép làm tròn ) là đặc trưng của tính toán. Vì vậy người ta đi tính phần thưc của kết quả sau khi tính hàm ngược để thu được ảnh bao gồm giá trị thực. Ta thực hiện như sau :
>> f = real(ifft2(F));
Như trong trường hợp trước, hàm này thay thế ifft2(F, P, Q), là lệnh thêm 0 vào F để có kích thước P*Q trước khi tính hàm ngược. Tuy nhiên lựa chọn này không được dùng trong sách này.
1.3 Lọc trong miền tần số:
Lọc trong miền tần số là khái niệm đơn giản. Trong phần này chúng tôi đưa ra tóm tắt tổng quan những khái niễm xoay quanh lọc trong miền tần số và cài đặt nó trong MATLAB.
1.3.1 Khái niệm căn bản:
Khái niệm căn bản cho cả lọc tuyến tính trong cả miền không gian và tần số là lý thuyết tích chập. Ta có thể biểu diễn như sau:
Hay ngược lại:
Ở đây, biểu tượng “*” chỉ tích chập giữa hai hàm, các biểu thức ở hai phía tạo thành những cặp biến đổi Fourier. Ví dụ, trong biểu thức thứ nhất chỉ ra rằng, tích chập của hai hàm không gian có thể tính bằng bến đổi ngược Fourier của tích từng biến đổi Fourier của hai hàm. Ngược lại, ta có thể tính tích biến đổi Fourier của hai bằng việc lấy tính tích chập của hai hàm đó. Ta cũng có suy diễn tương tự cho biểu thức thứ hai.
Trong phần lọc, chúng ta quan tâm trước hết đến 2 biểu thức này. Lọc trong miền không gian chúng ta tính tích chập của ảnh f(x,y) với mặt nạ lọc h(x,y). Theo lý thuyết tích chập, chúng ta có thể thu được cùng một kết quả trong miền tần số bằng việc nhân F(u,v) với H(u,v), (H(u,v) là biến đổi Fourier của lọc không gian). Người ta xem H(u,v) như hàm lọc chuyển đổi.
Ý tưởng lọc trong miền tần số là tìm hàm lọc chuyển đổi hiệu chỉnh F(u,v) theo một cách đặt biệt nào đó. Ví dụ, bộ lọc trong hình 1.4(a) có hàm chuyển đổi có dạng như sau:
Hình 1.4
Hàm chuyển đổi của hàm lọc băng thông thấp
Định dạng sử dụng cho bộ lọc DFT. Chú ý rằng có rất nhiều hàm lọc miền tân số.
Khi hàm lọc nhân với F(u,v), nó làm mỏng đi thành phần tần số cao của F(u,v), trong khi những thành phần tần số thấp không thay đổi. Bộ lọc với những đặc trưng như vậy gọi là bộ lọc băng thông thấp. Như bàn luận trong mụch 1.5.2, kết quả của lọc băng thông thấp là làm ảnh mờ đi (mịn hóa ảnh). Hình 1.4(b) chỉ ra một bộ lọc tương tự sau khi nó được xử lý với fftshift. Đây là định dạng bộ lọc được sử dụng thương xuyên trong sách khi làm việc với miền tần số trong đó biến đổi Fourier của đầu vào chưa được trọng tâm hóa.
Dựa theo lý thuyết tích chập, chúng ta biết rằng để thu được ảnh lọc tương ứng trong miền không gian chúng ta đơn giản là tính biến đổi ngược của biến đổi Fourier của tích H(u,v)F(u,v). Điều quan trọng cần nhớ là tiến trình này cũng đồng nhất với việc sử dụng tích chập trong miền không gian với mặt nạ h(x,y), là hàm biến đổi Fourier ngược của H(u,v). Trong thực nghiệm, tích chập tổng quát trong miền không gian là sử dụng một mặt nạ nhỏ để cố thu được của miền tần số tương ứng của nó.
Như đã lưu ý trong mụch 1.1, ảnh và biến đổi của nó tự động được xử lý tuần hoàn nếu chúng ta chọn DFT để cài đặt hàm lọc. Không khó để nhận ra rằng hàm tích chập tuần hoàn có thể là nguyên nhân ảnh hưởng tới sự tác động giữa những chu kỳ đó liên quan tới khoảng thời gian của những phần khác 0 của hàm. Sự tác động này gọi là lỗi vòng tròn khép kín (wraparound error), có thể tránh việc thêm vào hàm những số 0.
Giả sử rằng hàm f(x,y) và h(x,y) có kích thước A*B và C*D. Chúng ta định dạng hai hàm mở rộng, đều có kích thước P*Q bằng việc thêm 0 vào hàm f và g. Chúng ta có thể chỉ ra được lỗi vòng tròn khép kín có thể tránh được bằng cách chọn:
P>= A+C-1.
và
Q>= B+D-1.
Phần lớn trong chương này đều làm việc với hàm có cùng kích thước M*N, trong trường hợp này chúng ta thêm giá trị : P>=2M-1 và Q>=2N-1.
Hàm này gọi là hàm paddedsize, tính toán giá trị chẵn cực tiểu của P và Q thỏa yêu cầu phương trình trước đó. Ta có thể lựa chọn thêm vào ảnh để định dạng ảnh là hình vuông (có kích thước chiều dài và rộng bằng nhau). Việc thực thi thuật toán FFT phụ thuộc mạnh mẽ vào số thừa số nguyên tố trong P và Q. Thuật toán tổng quát sẽ nhanh hơn nếu P và Q là số chính phương và chậm đi khi P và Q là số nguyên tố. Trong thực nghiệm thì chúng ta nên sử dụng ảnh vuông và bộ lọc để công việc lọc xảy ra trên cùng cả hai hướng của ảnh. Hàm paddedsize cung cấp sự linh hoạt cho ta thực hiện lời khuyên trên thông qua việc lựa chọn tham số.
Trong hàm paddedsize, vecto AB, CD, và PQ có các phần tử [A B], [C D], [P Q], trong đó những giá trị đã được định nghĩa trước đó.
function PQ = paddedsize(AB, CD, PARAM)
% PADDEDSIZE tính toán kích thước cần thiết thêm vào cho FFT dựa theo hàm lọc.
% PQ = PADDEDSIZE(AB), trong đó AB là vecto gồm hai phần tử, tính PQ = 2*AB.
%
% PQ = PADDEDSIZE(AB, ‘PWR2’) tính toán vecto PQ để PQ(1) = PQ(2) = 2^nextpow2(2*m), trong đó m là max(AB).
%
% PQ = PADDEDSIZE(AB, CD), trong đó AB và CD là vecto gồm hai phần tử, tính toán PQ. Những phần tử của PQ là số nguyên chẵn nhỏ nhất lớn hơn hoặc bằng AB + CD -1
%
% PQ = PADDEDSIZE(AB,CD,’PWR2’) tính toán vecto PQ để PQ(1) = PQ(2) =
2^nextpow2(2*m), trong đó m là max([AB CD]).
if nargin = = 1
PQ = 2*AB;
esleif nargin = = 2 & -ischar(CD)
PQ = AB + CD -1;
PQ = 2* ceil(PQ/2);
esleif nargin = = 2
m = max(AB); % chiều cực đại.
% Tìm kiếm số mũ gần nhấn lớn hơn 2 lần m.
P = 2^nextpow2(2*m);
PQ = [P, P];
esleif nargin = = 3
m = max([AB CD]); % chiều cực đại
P = 2^nextpow2(2*m);
PQ = [P, P];
else
error(‘đối số nhập vào là không đúng.’)
end
Với PQ tính được từ hàm paddedsize, chúng ta sử dụng lệnh fft2 để tính như sau:
F = fft2(f, PQ(1), PQ(2))
Câu lệnh thực hiện đơn giản là thêm đủ số 0 cho f để ảnh có kích thước là PQ(1)*PQ(2), và sau đó tính FFT như đã mô tả trước đó. Chú ý rằng khi chúng ta sử thủ tục trên thì hàm lọc trong miền tần số cũng phải có kích thước là PQ(1)*PQ(2).
Ảnh f trong hình 1.5(a) được sử dụng trong ví dụ để minh họa hàm lọc sử dụng và không sử dụng thủ tục thêm vào. Trong phần bàn luận dưới đây, chúng ta sử dụng lpfilter để sinh ra lọc băng thông thấp Gauss [tương tự hình 1.4(b)] với giá trị đặc biệt sigma(sig). Hàm này được bàn luận chi tiết trong mụch 1.5.2, nhưng cú pháp của nó dễ hiểu vì vậy chúng ta chỉ sử dụng nó ở đây còn phần giải thích để lại sau.
Những lệnh sau biểu diễn công việc lọc mà không dùng thủ tục thêm:
>> [M, N] = size(f);
>> F = fft2(f);
>> sig = 10;
>> H = lpfilter(‘gaussian’, M, N, sig);
>> G = H.*F;
>> g = real(ifft2(G));
>> imshow(g, [ ])
Trong hình 1.5(b) chỉ ra ảnh g. Như mong muốn, ảnh bị mờ đi nhưng cạnh nằm ngang thì không. Lý do có thể được giải thích trong hình 1.6(a). Hình 1.6(a) cho thấy chu kỳ trong tính toán DFT. Nhưng đường thẳng màu trắng nhỏ trong ảnh là cho dễ nhìn, nó không phải là một phần dữ liệu. Đường thẳng đứt nét dùng để chỉ định một cách tùy ý ảnh có kích thước M*N được xử lý bởi fft2. Tùy ý ở đây có nghĩa là ta chọn một chu kỳ bất kỳ trong dãy chu kỳ vô hạn ở trên. Tưởng tượng về sự hoạt động của bộ lọc mờ trong chuỗi chu kỳ vô hạn, chúng ta có thể nhận thấy rõ ràng là bộ lọc đi từ đỉnh của hình chữ nhật đứt nét, nó sẽ bao quanh từng vùng của ảnh cho tới phần cuối cùng của chu kỳ bên phải nó. Vì vậy vùng sáng và vùng tối khi ở chung một bộ lọc thì cho ra kết quả là độ xám trung bình, làm mờ ảnh đầu ra. Hình 1.5(b) cho ra kết quả đó. Nói cách khác, khi bộ lọc ở vùng sáng của vùng hình chư nhật đứt nét, nó sẽ bắt gặp vùng đồng nhất, khi trung bình của một vùng không đổi(vùng có các giá trị bằng nhau) thì vùng đó không bị làm mờ. Những phần khác của hình 1.5(b) được giải thích tương tự theo cách đó.
Hình 1.5
a b c
(a) Mẫu ảnh có kích thước 256*256
(b) Ảnh được lọc bằng bộ lọc băng thông thấp trong miền tần số mà không dùng kỹ thuật thêm vào.
(c) Ảnh được lọc bằng bộ lọc băng thông thấp với kỹ thuật thêm vào.
Hình 1.6:
a
b
Chuỗi chu kỳ vô hạn của ảnh trong hình 1.5(a). Vùng chữ nhật có nét đứt biểu diễn dữ liệu được xử lý bằng fft2.
Cùng một chu kỳ như trên nhưng sau khi được thêm 0. Đường thẳng mỏng màu trắng trong cả hai ảnh dùng để cho ta quan sát cho tiện, nó không phải là một phần dữ liệu
Ta xem bộ lọc có áp dụng kỹ thuật:
>> PQ = paddedsize(size(f));
>> Fp = fft2(f, PQ(1), PQ(2), 2*sig);
>> Hp = lpfilter(‘gaussian’, PQ(1), PQ(2), 2*sig);
>> Gp = Hp*Fp;
>> gp = real(ifft2(Gp));
>> gpc = gp(1:size(f,1), 1:size(f,2));
>> imshow(gp, [ ]);
Ở đó chúng ta dùng 2*sig bởi vì kích thước bộ lọc này gấp 2 lần bộ lọc không dùng kỹ thuật thêm.
Hình 1.7 chỉ ra kết quả đầy đủ khi dùng kỹ thuật thêm được trích xuất từ hàm ifft2 sau khi lọc. Ảnh này có kích thước 512*512 pixel.
1.3.2 Những bước cơ bản trong bộ lọc DFT:
Trong bàn luận trước đó chúng ta có thể tổng kết thành những hàm sau trong Matlab, ở đó f là ảnh được lọc, g là kết quả, với giả sử hàm lọc H(u,v) có cùng kích thước với ảnh được thêm số 0:
Dùng hàm padded