Tôi sẽ cho rằng điều này đang được thực hiện trên CPU thông thường, một lõi, thực thi một luồng đơn giản, không có phần cứng ưa thích. Nếu có nhiều hơn thế, có lẽ nó có thể được tính bằng các điều chỉnh đối với lý do cho một hệ thống đơn giản hơn. Không thể nói nhiều hơn nếu không có một hệ thống cụ thể để thảo luận, hoặc toàn bộ sách giáo khoa hoặc tài liệu nghiên cứu để đề cập đến một loạt các khả năng.
Tôi sẽ không lo lắng về sức mạnh của hai kích cỡ. Nó không thành vấn đề. Các thuật toán FFT với các đơn vị bướm và tất cả các yếu tố tồn tại cho các yếu tố 3 hoặc bất kỳ số nhỏ nào, không chỉ 2. Có các thuật toán thông minh cho chuỗi dữ liệu có kích thước chính. Tôi không thích trích dẫn Wikipedia về điều này do bản chất vô thường của nó, nhưng dù sao đi nữa:
có các FFT với độ phức tạp O (N log N) cho tất cả N, ngay cả đối với nguyên tố N
Việc triển khai các FFT cho N tùy ý có thể được tìm thấy trong thư viện GPL'd FFTW .
Cách đáng tin cậy duy nhất về mặt kỹ thuật nghiêm túc là xây dựng và đo lường, nhưng chúng tôi chắc chắn có thể lấy ý tưởng từ lý thuyết, để xem mối quan hệ giữa các biến. Chúng ta cần ước tính có bao nhiêu phép toán số học được tham gia cho mỗi phương thức.
Nhân lên vẫn chậm hơn so với bổ sung trên hầu hết các CPU, ngay cả khi sự khác biệt đã giảm đi rất nhiều trong những năm qua, vì vậy chúng ta hãy tính số nhân. Kế toán cũng cho thêm cần một chút suy nghĩ và theo dõi các công cụ.
Phép tích chập đơn giản, thực sự nhân và thêm bằng cách sử dụng hạt nhân chập, lặp lại cho mỗi pixel đầu ra, cần phép nhân W² · K², trong đó W là số pixel dọc theo một cạnh của hình ảnh (giả sử hình vuông cho đơn giản) và K là kích thước của hạt nhân chập, như các pixel dọc theo một phía. Phải nhân bội K² để tính toán một pixel đầu ra bằng cách sử dụng hạt nhân và phần cùng kích thước của hình ảnh đầu vào. Lặp lại cho tất cả các pixel đầu ra, số giống như trong hình ảnh đầu vào.
(N lỗi ) trực tiếp = W² · K²
Để thực hiện công việc trong không gian Fourier, chúng ta phải Fourier biến đổi hình ảnh. Điều này được thực hiện bằng cách áp dụng FFT cho từng cột riêng biệt và sau đó cho từng hàng. Các điểm dữ liệu FFT cho N mất khoảng 2N · phép nhân log (N); chúng tôi muốn N là W, chiều dài của một cột hoặc hàng. Tất cả các logarit ở đây là cơ sở hai.
Có các hàng W và cột W, vì vậy sau khi tất cả các FFT được thực hiện, chúng tôi đã thực hiện phép nhân 2W · (2W · log (W)). Nhân đôi điều đó, bởi vì sau khi chúng ta nhân với biến đổi Fourier của kernel, chúng ta phải đảo ngược dữ liệu để lấy lại hình ảnh hợp lý. Đó là 8W² · log (W). Tất nhiên, nhân với biến đổi Fourier của hạt nhân phải được thực hiện, một phép nhân W² khác. (Thực hiện một lần, không phải một lần cho mỗi pixel đầu ra, mỗi hàng hoặc bất cứ điều gì.) Đây là các phép nhân phức tạp, do đó, đó là phép nhân thực 4W².
Vì vậy, trừ khi tôi ủng hộ (và có lẽ tôi đã làm) chúng ta có
(N lỗi ) Fourier = 4W² · (2 · log (W) + 1)
Khi nào chúng ta muốn làm mọi thứ theo cách trực tiếp? Khi K đủ nhỏ để tạo W² · K² nhỏ hơn 4W² · (2 · log (W) + 1). Một yếu tố phổ biến của W² là dễ dàng được đưa ra. Chúng tôi có thể giảm "+1" vì chúng tôi đang xử lý các ước tính lý tưởng hóa. +1 có khả năng bị mất trong các lỗi liên quan đến việc triển khai thực tế, từ việc không tính các bổ sung, tổng phí lặp, v.v. Những chiếc lá đó:
K² < 8·log(W)
Đây là điều kiện gần đúng để chọn cách tiếp cận trực tiếp so với cách tiếp cận không gian tần số.
Lưu ý rằng sự tương quan của hai hình ảnh có cùng kích thước giống như kết hợp với hạt nhân có kích thước K = W. Không gian Fourier luôn là cách để làm điều đó.
Điều này có thể được tinh chỉnh và lập luận để giải thích cho chi phí hoạt động, đường ống của opcodes, float so với điểm cố định và ném ra ngoài cửa sổ với GPGPU và phần cứng chuyên dụng.