Image processing 如何对图像中的每条水平线数据进行1D FFT滤波

Image processing 如何对图像中的每条水平线数据进行1D FFT滤波,image-processing,opencv,fft,Image Processing,Opencv,Fft,我希望对图像的每一条水平线应用频域滤波器,例如低通或带通滤波器。这是否可以使用opencv实现 我认为你需要详细说明你的问题。或许,请给出一些具体的例子 如果我把你的问题理解为: 你有一个10 x 10的图像 第1行 第2行 第三行 第10行 您希望在这些线路上单独应用一些滤波器(低通/带通) 然后,首先需要设计水平过滤器(使用您想要的任何工具) 让我们假设(不失一般性)您有2个过滤器: 低通:1x10图像 带通:1x10图像 然后可以使用cv::dft将这些滤波器转换为频域。还可以使用cv::

我希望对图像的每一条水平线应用频域滤波器,例如低通或带通滤波器。这是否可以使用opencv实现

我认为你需要详细说明你的问题。或许,请给出一些具体的例子

如果我把你的问题理解为:

你有一个10 x 10的图像

第1行

第2行

第三行

第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
}
cv::Mat im=cv::imread('myimage.jpg',1);
cv::Mat一行在频率域中;

对于(int i=0;i实际上,openCV似乎可以做到这一点:

DFT_行对输入矩阵的每一行执行正向或反向变换;此标志使您能够同时变换多个向量,并可用于减少开销


“FFT滤波器”没有意义。也没有“只传递所需频率”。@leonbloy-自从我弄乱FFT以来已经有20多年了,但是(我想)我记得有很多数据滤波器是基于将数据从时域转换到频域(使用FFT)来操作频域数据,然后再转换回时域(反向FFT)我记得我们把这些滤波器称为“FFT滤波器”@erjik-你是说高通滤波器吗?@Michael J-是的,我实际上是指高通或低通滤波器。@leonbloy-那么,用什么来代替“FFT滤波器”和“只传递所需频率”更好呢?请纠正我。