【问题标题】:Band-Stop Filter mask based on low/high pass filter mask OpenCV基于低/高通滤波器掩码 OpenCV 的带阻滤波器掩码
【发布时间】:2017-11-21 22:40:59
【问题描述】:

我正在寻找合并以下图像的方法:

像这样的图像:

我正在做的是尝试用巴特沃斯低/高通滤波器的掩模制作带阻滤波器。 如果没有办法像这样合并掩码,我会发布我的 butterworth 代码,所以也许你可以帮助我重新实现它来完成这项工作:

void Processing::lowhighpass_filter(cv::Mat &dft_Filter, int D, int n, bool highpass)
{
    dft_Filter = cv::Mat(dft_Filter.rows,dft_Filter.cols,CV_32F,cv::Scalar::all(0));

    cv::Point centre = cv::Point(dft_Filter.rows / 2, dft_Filter.cols / 2);
    double radius;

    // based on the forumla in the IP notes (p. 130 of 2009/10 version)
    for(int i = 0; i < dft_Filter.rows; i++)
    {
        for(int j = 0; j < dft_Filter.cols; j++)
        {
            radius = (double) std::sqrt(std::pow((i - centre.x), 2.0) + std::pow((double) (j - centre.y), 2.0));
            dft_Filter.at<float>(i,j) = (float) ( 1 / (1 + std::pow((double) (radius /  D),   (double) (2 * n))));
        }
    }

    if (highpass)
    {
        dft_Filter = cv::Scalar::all(1) - dft_Filter;
        //cv::imshow("highpass_filter", dft_Filter);
    }

    cv::Mat toMerge[] = {dft_Filter, dft_Filter};
    cv::merge(toMerge, 2, dft_Filter);
}

我需要像第三张图片一样创建蒙版,可能具有可修改的内圆和外圆半径。有什么线索吗?

【问题讨论】:

  • 可以分享固定代码吗?

标签: c++ opencv image-processing fft


【解决方案1】:

将第一个范围标准化为 [0:1] 范围,然后在这两个图像之间进行逐元素相乘。 别忘了,它们需要有 CV_32FC 或 CV_64FC 元素类型。

【讨论】:

    【解决方案2】:

    您还需要在 FT 域中找到圆的半径,然后您将半径分配为零以停止所需的频率。 如果您已经更正了代码,请在此处分享您的代码,以便其他人可以帮助您的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-20
      • 2014-07-29
      • 1970-01-01
      • 2023-04-10
      • 2021-06-12
      • 2012-09-21
      • 2012-04-08
      • 2014-02-09
      相关资源
      最近更新 更多