Я полагаю, что вы застряли в том, что фильтр Гаусса, предоставленный OpenCV, создается в пространственной (временной) области, но вы хотите фильтр в частотной области. Здесь - хорошая статья о разнице между фильтрацией верхних и нижних частот в частотной области.
Как только вы хорошо поймете, как работает фильтрация в частотной области, вы готовы попытаться создать фильтр Гаусса в частотной области. Здесь - хорошая лекция о создании нескольких различных (в том числе гауссовых) фильтров в частотной области.
Если у вас все еще проблемы, я постараюсь обновить мой пост с примером чуть позже!
РЕДАКТИРОВАТЬ:
Вот короткий пример, который я написал о реализации фильтра высоких частот Гаусса (на основе лекции, на которую я вам указал):
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
double pixelDistance(double u, double v)
{
return cv::sqrt(u*u + v*v);
}
double gaussianCoeff(double u, double v, double d0)
{
double d = pixelDistance(u, v);
return 1.0 - cv::exp((-d*d) / (2*d0*d0));
}
cv::Mat createGaussianHighPassFilter(cv::Size size, double cutoffInPixels)
{
Mat ghpf(size, CV_64F);
cv::Point center(size.width / 2, size.height / 2);
for(int u = 0; u < ghpf.rows; u++)
{
for(int v = 0; v < ghpf.cols; v++)
{
ghpf.at<double>(u, v) = gaussianCoeff(u - center.y, v - center.x, cutoffInPixels);
}
}
return ghpf;
}
int main(int /*argc*/, char** /*argv*/)
{
Mat ghpf = createGaussianHighPassFilter(Size(128, 128), 16.0);
imshow("ghpf", ghpf);
waitKey();
return 0;
}
Это определенно не оптимизированный генератор фильтров, но я постарался сделать его простым и понятным, чтобы облегчить понимание :) В любом случае, этот код отображает следующий фильтр:
ПРИМЕЧАНИЕ: Этот фильтр не смещен по БПФ (т. Е. Этот фильтр работает, когда постоянный ток расположен в центре, а не в верхнем левом углу). См. Пример OpenCV dft.cpp (в частности, строки 62 - 74) о том, как выполнить БПФ-сдвиг в OpenCV.
Наслаждайтесь!