0
以下是查找64 * 64图像的DFT的代码。这是一个3频道的图像,所以我正在从中提取绿色通道并对其进行处理。我认为该计划没有给出所需的输出。请检查它并让我知道我是对还是错?查找64 * 64图像的离散傅里叶变换
这是我使用
#include "stdafx.h"
#include "opencv\highgui.h"
#include "opencv\cv.h"
using namespace cv;
#define _USE_MATH_DEFINES
#include<math.h>
#include<iostream>
#include<complex>
int main()
{
Mat im = imread("joker.jpg");
Mat im1(64, 64, CV_8UC1);
Mat im2(64, 64, CV_64FC1);
int from_to[] = {1,0};
mixChannels(&im, 1, &im1, 1, from_to, 1);
for (int u = 0; u < 64; u++)
{
for (int v = 0; v <64; v++)
{
double sum1 = 0, sum2 = 0;
for (int x = 0; x < 64; x++)
{
for (int y = 0; y < 64; y++)
{
auto c = std::complex<double>(cos(2 * M_PI*(u*x/64.0 + v*y/64.0)), -sin(2 * M_PI*(u*x/64.0 + v*y/64.0)));
double temp2 = std::real(c);
double temp3 = std::imag(c);
sum1 = sum1 + im1.at<uchar>(x,y) * temp2;
sum2 = sum2 + im1.at<uchar>(x,y) * temp3;
}
}
/* Finding the Frquency spectrum */
double t = round(sqrt(pow(sum1, 2) + pow(sum2, 2)));
im2.at<double>(u, v) = t;
}
}
double min, max;
minMaxIdx(im2, &min, &max);
/*Scaling to a range between 0 - 255 */
for (int i = 0; i < 64; i++)
{
for (int j = 0; j < 64; j++)
{
im2.at<double>(i, j) = 255/(max - min)*(im2.at<double>(i, j)-min);
}
}
namedWindow("output2");
imshow("output2", im2);
waitkey(0);
}
为什么在第一个C onvertTo函数缩放1/255,第二个缩放255? – Navdeep 2014-09-12 11:01:40
使其进入[0..1]范围。 (以及更多的显示convertTo功能),但结果是相同的,如果我跳过*转换的比例因子 – berak 2014-09-12 11:04:07
以下语句给出的输出图像只包含直流分量im2.convertTo(im3,CV_8UC1);但下面的声明给出了一个完整的黑色图像。 im2.convertTo(im3,CV_8UC1,.04);为什么这样?请解释。 – Navdeep 2014-09-12 14:23:33