Я ищу способ комбинировать изображения ниже:
в изображение как:
То, что я делаю, пытается сделать фильтр остановки полосы с помощью масок из фильтров lowwave с фильтром 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);
}
Мне нужно создать маску, как на третьем изображении, возможно, с изменяемым радиусом внутреннего и внешнего круга. Любые подсказки?
Нормализовать первый диапазон [0: 1], затем умножить на каждый элемент между этими двумя изображениями. Не забывайте, что они должны иметь тип элемента CV_32FC или CV_64FC.
Вам также необходимо найти радиус круга в домене FT, который позже вы назначаете нулевые значения радиусом для остановки нужной частоты. Если вы уже скорректировали свой код, поделитесь своим кодом здесь, чтобы другие люди получили код помощи.