【发布时间】: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