2010-08-24 39 views
8

Tôi đang cố gắng triển khai hiệu ứng mờ gaussian bằng cách sử dụng FFT và có thể tìm thấy ở đây công thức sau.Gaussian blur với FFT

Điều này có nghĩa rằng bạn có thể đi biến đổi Fourier của hình ảnh và lọc, nhân (phức tạp) kết quả, và sau đó đi ngược biến đổi Fourier.

Tôi có K hạt nhân, ma trận 7x7 và Hình ảnh I, ma trận 512x512.

Tôi không hiểu cách nhân K với I. Cách duy nhất để thực hiện điều đó bằng cách tạo K lớn bằng I (512x512)?

Trả lời

15

Có, bạn cần phải tạo K lớn bằng cách đệm nó bằng số không. Ngoài ra, sau khi padding, nhưng trước khi bạn lấy FFT của hạt nhân, bạn cần dịch nó với wraparound, sao cho trung tâm của hạt nhân (đỉnh của Gaussian) là tại (0,0). Nếu không, hình ảnh được lọc của bạn sẽ được dịch. Ngoài ra, bạn có thể dịch hình ảnh được lọc sau khi bạn đã hoàn tất.

Một điểm khác: đối với các hạt nhân nhỏ không sử dụng FFT thực sự có thể nhanh hơn. Một hạt nhân Gaussian 2D có thể phân tách được, nghĩa là bạn có thể tách nó thành hai hạt nhân 1D cho x và y. Sau đó, thay vì một convolution, bạn có thể làm hai 1D convolutions theo hướng x và y trong miền không gian. Đối với các hạt nhân nhỏ hơn có thể kết thúc nhanh hơn việc thực hiện chập trong miền tần số bằng FFT.

2

Nếu bạn cảm thấy thoải mái với pixel shader và nếu FFT không phải là mục tiêu chính của bạn ở đây, nhưng chập với kernel gaussian blur IS, - sau đó tôi có thể giới thiệu hướng dẫn của tôi on what convolution is

liên quan.