如何为图像中的每个水平线数据实现1D FFT滤波器

erj*_*jik 2 opencv fft image-processing

我希望将频域滤波器(例如低通或带通)应用于图像的每条水平线.这可能使用opencv吗?

Dat*_*Chu 5

我认为你需要详细说明你的问题.或许,举一些具体的例子.

如果我将您的问题解释为:

你有一个10 x 10的图像

第1行

第2行

第3行......

第10行

您想要在这些线路上独立应用一些滤波器(低通/带通).

然后,首先你需要设计你的水平过滤器(你想要的任何工具).

让我们假设(不失一般性)你有2个过滤器:

低通:1x10图像

带通:1x10图像

然后,您可以使用cv :: dft将这些过滤器转换为频域.还可以使用cv :: dft将图像转换为频域.当然,您应该单独转换单个行.一种方法是:

cv::Mat im = cv::imread('myimage.jpg', 1);
cv::Mat one_row_in_frequency_domain;
for (int i=0; i<im.rows; i++){
  cv::Mat one_row = im.row(i);
  cv::dft(one_row, one_row_in_frequency_domain);

  // Apply your filter by multiplying
}
Run Code Online (Sandbox Code Playgroud)