Что касается эффективности вычислений, я бы рекомендовал делать это в области Фурье вместо области времени (изображения) с использованием сверток. Помните, что свертка - это простое умножение в области Фурье. Как и во временных рядах, где функция спектральной плотности представляет собой дисперсию, разлагаемую в зависимости от частоты, для изображения можно расширить ее на два измерения. Должно быть намного лучше, чем вложенные циклы for.
У меня нет кода на данный момент. но этот метод использовался в таких алгоритмах, как «быстрое сопоставление с шаблоном» для обнаружения объектов или регистрации изображений.