- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想以 C++ 语言实现 DFT ,以处理图像。
在学习理论的过程中,我知道可以将2D DFT分为和1D DFT 两个部分。首先,我为每一行执行一维DFT,然后为每一列执行一维DFT。当然,我应该对复数进行运算。
这里会出现一些问题,因为我不确定在哪里使用实数,在复数的虚数部分在哪里。我在某处发现应该将输入图像像素的值视为实部,并将虚部设置为0。
我做了一个实现,但是我想结果图像不正确。
如果有人可以帮助我,我将不胜感激。
为了读取和保存图像,我使用CImg库。
void DFT (CImg<unsigned char> image)
{
int w=512;
int h=512;
int rgb=3;
complex <double> ***obrazek=new complex <double>**[w];
for (int b=0;b<w;b++) //making 3-dimensional table to store DFT values
{
obrazek[b]=new complex <double>*[h];
for (int a=0;a<h;a++)
{
obrazek[b][a]=new complex <double>[rgb];
}
}
CImg<unsigned char> kopia(image.width(),image.height(),1,3,0);
complex<double> sum=0;
complex<double> sum2=0;
double pi = 3.14;
for (int i=0; i<512; i++){
for (int j=0; j<512; j++){
for (int c=0; c<3; c++){
complex<double> cplx(image(i,j,c), 0);
obrazek[i][j][c]=cplx;
}}}
for (int c=0; c<3; c++) //for rows
{
for (int y=0; y<512; y++)
{
sum=0;
for (int x=0; x<512; x++)
{
sum+=(obrazek[x][y][c].real())*cos((2*pi*x*y)/512)-(obrazek[x][y][c].imag())*sin((2*pi*x*y)/512);
obrazek[x][y][c]=sum;
}
}
}
for (int c=0; c<3; c++) //for columns
{
for (int y=0; y<512; y++)//r
{
sum2=0;
for (int x=0; x<512; x++)
{
sum2+=(obrazek[y][x][c].real())*cos((2*pi*x*y)/512)-(obrazek[y][x][c].imag())*sin((2*pi*x*y)/512);
obrazek[y][x][c]=sum2;
}
}
}
for (int i=0; i<512; i++){
for (int j=0; j<512; j++){
for (int c=0; c<3; c++){
kopia(i,j,c)=obrazek[i][j][c].real();
}}}
CImgDisplay image_disp(kopia,"dft");
while (!image_disp.is_closed() )
{
image_disp.wait();
}
saving(kopia);
}
最佳答案
看一下这个页面。这可能会有所帮助:
http://paulbourke.net/miscellaneous/dft/
有一个DFT的实现(大约40行)。
关于c++ - C++中DFT的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794283/
假设一个数字序列(波状数据)。然后我执行 DFT(或 FFT)变换。我想要实现的下一步是找到与数据中包含的实际频率相对应的频率。正如我们所知,DFT 输出具有实部和虚部 a[i] 和 b[i]。如果我
我正在尝试在频域中执行逆滤波和伪逆滤波。 但是我在访问 DFT 系数和之后乘以 DFT 矩阵时遇到问题,因为我得到了复数,因此实际上是两个矩阵...... 基本上逆向过滤执行 F = G/H, 其中
对于我的项目,我必须对大型 2D 输入矩阵进行 DFT,对其进行处理,然后使用 IDFT 将其转换回来,并将结果与输入矩阵进行比较。我的问题出在 2D DFT 步骤中。我使用一个小的简单数据集编写
我有一个场景,我必须从未知的 excel 文件和未知的选项卡中获取数据。所以我创建了一个包含 50 列的表。 问题是进入第二个循环后 ssis 包没有进展。第一个循环获取文件名,第二个循环获取该文件中
我正在尝试用 Java 编写一个小型离散傅立叶变换,以查找清晰的 400 Hz 正弦信号中的幅度谱(1 秒为 pcm 带符号短) 首先我计算复数值的 DFT: public void berechne
我们需要在 GSL 中更改/重新实现标准的 DFT 实现,即 int FUNCTION(gsl_dft_complex,transform) (const BASE data[],
注意:这个问题最初是在 OpenCV forum 上提出的几天前。 我正在构建一个广泛使用二维 dft、离散傅立叶变换的图像处理程序。我正在尝试加速以实时运行。 在该应用程序中,我仅使用由矩形 ROI
我正在编写一个非常简单的就地 DFT。我正在使用此处显示的公式: http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition与
我试图通过 Matlab 中的 DFT(数字傅里叶变换)使用相关性来比较 2 个信号的相似程度,但相关函数给出的结果并不是真正可预测的。例如,如果我比较那两对信号: 相关性 1 和 2 相关性 3 和
更多细节:我开始写我的“学士学位论文”这将是与图像压缩相关的东西 我想知道您是否知道有任何尝试使用 PNG 格式的方波傅里叶级数(变换)作为滤波器而不是 haar 小波?会有什么好处吗? 如果您对我的
在这个 DFT 上我一直在用头撞墙。它应该打印出:8,0,0,0,0,0,0,0 但我得到的是 8,然后是非常非常小的数字。这些是舍入误差吗?有什么我可以做的吗?我的 Radix2 FFT 给出了正确
我想要质心的坐标并且我已经计算了 DFT(用于不同的目的)。我看过一些幻灯片,暗示可以通过查看矩阵的第一个值来粗略估计质心。代码基于:http://docs.opencv.org/doc/tutori
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
我正在尝试对两个单独的图像进行逐点乘法傅立叶变换,然后再转换回普通图像。我不太熟悉在 OpenCV 中使用傅立叶变换,但这就是我目前所拥有的。显示输出的最后一行导致类型为“System.Runtime
我正在尝试在我的 C++ 代码中使用 FFTW3,并且我想使用 scipy.fftpack.fft 在 python 中完成同样的事情 用于真正的一维信号。我只是制作一维信号并从信号中找到频率。我不知
我正在进行一项作业,以 20kHz 的采样频率对频率为 500Hz 的方波执行 200 点 DFT,其幅度在 0 和 20 之间交替。 我正在使用 C++,我已经想出了如何编写 DFT 方程的代码,我
我最近在我的 Ubuntu 16.04 机器上重新编译了 OpenCV 3.2.0 以包含 CUDA。出于某种原因,cv::dft() 现在对特定图像大约需要 30 秒,而不是编译前的 5 秒。这是灾
我正在研究图像频率过滤的 GPU 实现。我的代码在 CPU 上运行良好(我使用了类似 this 的东西),但我花了一整天时间尝试在 GPU 上进行同样的工作——但没有成功。我想在频域中应用一个滤波器,
我创建了一个简单的积分函数和 DFT 函数,可以将它们与我编写的其他代码一起使用。 from math import sin,pi from time import time def aintegra
我使用以下代码计算图像与指定内核(在我的例子中是高斯内核)的卷积。每次我得到不同的结果,结果图像甚至不接近我在空间域中通过卷积获得的图像。首先我认为问题出在图像的数据类型上。我将它们更改为 32 和
我是一名优秀的程序员,十分优秀!