Windows
- 1 ответ
- 0 вопросов
1
Вклад в тег
cv::Mat MainWindow::fourierSpectrum(Mat img)
{
src = img; //imread(path.toStdString(), 1); //читаем открытое изображение
cvtColor(src, src_gray, CV_RGB2GRAY);
int M = getOptimalDFTSize( src_gray.rows );
int N = getOptimalDFTSize( src_gray.cols );
Mat padded;
copyMakeBorder(src_gray, padded, 0, M - src_gray.rows, 0, N - src_gray.cols, BORDER_CONSTANT, Scalar::all(0));
Mat planes[] = {Mat_<float>(padded), Mat::zeros(padded.size(), CV_32F)};
Mat complexImg;
merge(planes, 2, complexImg);
dft(complexImg, complexImg, DFT_COMPLEX_OUTPUT);
cv::multiply(cv::abs(complexImg), complexImg, complexImg);
idft(complexImg,complexImg);
split(complexImg, planes);
magnitude(planes[0], planes[1], planes[0]);
Mat mag = planes[0];
mag += Scalar::all(1);
//log(mag, mag); //если это не закомментить получается спектр, показанный в вопросе
normalize(mag, mag, 0, 255, CV_MINMAX);
mag.copyTo(src_gray);
return src_gray;
}
cvtColor(src_gray, src_gray, CV_GRAY2RGB);
src_gray += CV_RGB(255,0,0);